![]() |
Delphi-Version: 7
Listbox Zahlen erhöhen
Hi ich möchte ne Listbox in der Zahlen stehen, die sich erhöhen also 1 --> 2 ---> 3 (von Würfelsimulation (Zahlen von 2-12))
Danke für Hilfe! |
AW: Listbox Zahlen erhöhen
Und was genau ist dein Problem dabei? Was hast du schon versucht und was ging nicht?
|
AW: Listbox Zahlen erhöhen
Zitat:
Hört sich aber eher an nach Ich bin jetzt hier, also macht mal für mich. |
AW: Listbox Zahlen erhöhen
Sorry, hatte gerade keine Zeit gehabt...
Die Sache ist die... Ich hab ein Programm in dem 2 "Würfel" gewürfelt werden und die Augenzahlen dann addiert werden (also nur Zahlen von 2 bis 12). Jetzt möchte ich die Zahlen [hab eine Variable summe : Array[2..12] of Integer;] in eine Listbox schreiben. Das ist auch kein Problem. Bei meinem Info-Lehrer habe ich gesehen dass die Zahlen (in der Listbox) nicht aus dem nichts auftauchen, sondern sich erhöhen also z.B: Für 7: 1 --> 2 --> 3 --> 4 --> 5 ... oder so. Da ich ein Array habe weis ich jetzt nicht wie man das macht dass sich die Zahlen erhöhen... Meine Idee war, die Items aus der Listbox immer wieder zu löschen und neu reinzuschreiben um die Zahlen zu erhöhen. Hier die Prozedur um zu würfeln:
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var i,k,w1,w2 : integer; summe : array[2..12] of Integer; begin randomize; button1.enabled := false; k := strtoint(edit1.Text); nabled := false; listbox1.Clear; for i := 2 to 12 do summe[i] := 0; for i := 1 to k do begin listbox1.Clear; w1 := Random(6)+1; w2 := Random(6)+1; inc(summe[w1+w2]); sleep(50); end; for i := 2 to 12 do begin listbox1.Items.Add(floattostr(summe[i])); end; button1.Enabled := true; end; |
AW: Listbox Zahlen erhöhen
Ich Verstehe leider nicht worauf genau Du hinaus willst obwohl Du es ja anscheinend beschrieben hast, aber IntToStr() würde ich anstelle von FloatToStr() einsetzen.
|
AW: Listbox Zahlen erhöhen
Ok, danke für den Tipp.
Normalerweise steht in der Listbox ja nichts, und auf einmal, wenn k-mal gewürfelt wurde, werden alle Zahlen hineingeschrieben. aber ich möchte es so machen dass wenn z.B. eine 2 gewürfelt wurde, die Anzahl der Zweien um 1 steigt und das auch so in der Listbox angezeigt wird. Ich hoffe ich kann es irgendwie verständlich machen. |
AW: Listbox Zahlen erhöhen
1) randomize; nur einmalig in FormCreate aufrufen und nicht bei jedem ButtonClick
2) lass das mit dem Array sein 3) die Würfelfunktion würde ich nach dem KISS-Prinzip schreiben
Delphi-Quellcode:
procedure TForm1.Button2Click(Sender: TObject);
var Wuerfel1, Wuerfel2: 1 .. 6; Summe: 2 .. 12; // Das hier ist kein Array! Falls es hier Fehler beim Kompilieren gibt, schreib einfach Byte hin. begin Wuerfel1 := Random(6) + 1; Wuerfel2 := Random(6) + 1; Summe := Wuerfel1 + Wuerfel2; end; |
AW: Listbox Zahlen erhöhen
Ist die Listbox denn so etwas wie ein Zähler, wo gezählt werden soll wie oft eine Zahl gewürfelt wurde?
Falls ja, dann würd ich entweder 2 Arrays anlegen (für jeden Würfel = 1..6) oder ein gemeinsames Array fürs Ergebniss aus Würfel 1+2. In beiden Fällen würde es ausreichen die Listbox Items direkt zu bearbeiten und nicht jedesmal alles neu erstellen lassen, das vermindert ein Flickern, oder BeginUpdate/EndUpdate für die Listbox einsetzen. Ps: Die Listbox selbst kann auch dein Array sein, du musst dann halt nur mit Festen Index Werten umgehen, also Wissen das Index=0 deinem Würfelwert von 2 entspricht zum Beispiel. Also Listbox erstmal mit 10 leeren strings füllen, danach deine Würfelei, danach Listbox Item Text erneuern. |
AW: Listbox Zahlen erhöhen
Ja, also da soll die Anzahl der Zweien, Dreien, ..., Zwölfen angezeigt werden (später noch grafisch dargestellt)
aber wie schaffe ich es dass sich die Zahlen in der Listbox (wie in meinem letzten Beitrag beschrieben) erhöhen. Also in der Listbox: wenn eine 7 gewürfelt wurde: Anzahl: 0 --> 1 --> 2 ---> 3 (so soll es dargestellt werden, damit man sehen kann wie die Anzahl steigt. |
AW: Listbox Zahlen erhöhen
Angenommen Würfel A = 5 und Würfel B = 6, was soll in deiner Anzeige bei dieser Paarung Angezeigt werden?
|
AW: Listbox Zahlen erhöhen
Also die Augenzahlen (6 und 5) sollen addiert werden, naja und dann soll in der Listbox bei: "Anzahl der 11: 1"
stehen (vorher stand da: "Anzahl der 11: 0") und wenn nochmal ne 11 gewürfelt wird dann "Anzahl der 11: 2" und wenn eine 7 gewürfelt wird dann "Anzahl der 7: 1" und so weiter und so fort... |
AW: Listbox Zahlen erhöhen
Was du meinst könnte einem Histogram nahe kommen. Such das mal bei Google um das Prinzip zu verstehen.
|
AW: Listbox Zahlen erhöhen
Hallo,
wenn nicht nach dem 2. Würfeln die Ergebnisse des 1. Würfelns weg sein sollen, darf summe nicht in der ButtonClick-Methode definiert werden, sondern "global" im Formular.
Delphi-Quellcode:
Dann darf in der ButtonClick das Array natürlich nicht auf 0 zurückgesetzt werden.
type
TForm1 = class(TForm) private public summe: array[2..12] of Integer; end; Da jetzt du dir jetzt die Summe merken kannst, kannst Du in der Tat die ListBox bei jedem Klick löschen (Clear) und neu füllen. PS: Ausserdem sollte man 1..12 drausmachen, falls einer der Würfel mal von Tisch runterfällt ;) |
AW: Listbox Zahlen erhöhen
Zitat:
PS: Vieleicht wäre es einfacher 2 Reihen á 10 Labels fest zu platzieren? Linke Labels bekommen Beschriftung wie "Würfelsumme 11", daneben ein Label mit einer Summe ala IntToStr(das Würfel-Array mit der 11) ODER (auf's Array verzichten und so hier) den Werte-Labels passende Namen geben, w11 zum Beispiel als Name für Würfelsumme 11, beim Programm-Start den Werte-Labeln alle eine "0" geben, und wenn nun ein Ergebniss 11 kommt, nurnoch w11.Caption := IntToStr(StrToInt(w11.Caption)+1); Das für jede Würfelkombination sollte auch passend sein. |
AW: Listbox Zahlen erhöhen
Hallo,
na, lass Ihn erst mal machen. Mit der ListBox ist das ja sonst nicht unverkehrt. Man sollte halt ein paar Grundlagen der Programmierung verstehen, dazu sind wir ja auch da ... ;) |
AW: Listbox Zahlen erhöhen
Naja, die Idee mit dem Array ist ja nicht verkehrt. Die Items einer Listbox sind ja eigentlich auch eins.
Wenn man nun ein Array für die Berechnung hat und das auch alles funktioniert, dann braucht man nur noch eine Routine, die den Arrayeintrag an die entsprechende Position der Listbox schreibt. Das Array geht von 2 bis 12. Die Listboxitems beginnen jedoch bei 0. Wenn man den richtigen Eintrag in der Listbox haben will, muss man nur die Position aus dem Array nehmen und dann 2 abziehen. Der Eintrag in der Listbox könnte dann ungefähr so aktuallisiert werden:
Delphi-Quellcode:
// x ist die gewürfelte Zahl.
Array[x] := Array[x] + 1; Listbox.Items[x - 2] := Format('%d: %d',[x,Array[x]]); |
AW: Listbox Zahlen erhöhen
Hallo,
KISS ist das nicht (Keap it simple, stupid). ListBox löschen und neu eintragen, ist doch viel einfacher zum lernen. Ausserdem geht das Array ja jetzt ab 1 los, falls mal ein Würfel von Tisch runterfällt ;) |
AW: Listbox Zahlen erhöhen
Na dann würde ich mein Beispiel auf Columns anwenden mit gleichem Prinzip, erste Column erhält Beschreibung zweite Column erhält einen Wert per IntToStr(StrToInt(hier die Column für Text/Caption)+1), könnte das klappen?
Eine Tabellenkalkulation, bei gleichem Prinzip, könnte man zu lern zwecken dafür auch benutzen. |
AW: Listbox Zahlen erhöhen
Sorry das ich mich nur so schlecht ausdrücken könnte.
Heute min Informatik-Unterricht wurde uns die Lösung gezeigt:
Code:
For i := 1 to k do begin w1 := Random(6)+1; w2 := Random(6)+1; inc(summe[w1+w2]); if (i mod 500 = 0) then application.Processmessage; Listbox1.Clear; For j := 2 to 12 do Listbox1.items.add(inttostr(Summe[j]; end; So, oder so Änlich.. Am Handy das zu schreiben ist schrecklich;( |
AW: Listbox Zahlen erhöhen
Delphi-Quellcode:
Da hast du doch dein Histogram.
inc(summe[w1+w2]);
|
AW: Listbox Zahlen erhöhen
Ähm ja, und?
|
AW: Listbox Zahlen erhöhen
Tolle Einstellung.
|
AW: Listbox Zahlen erhöhen
Zitat:
|
AW: Listbox Zahlen erhöhen
Hallo,
w1 := Random(6)+1; 1. Würfel (w1), Random(6) ergibt einen Wert von 0 bis 5, das +1 ergibt also eine Würfelzahl von 1 bis 6 w2 := Random(6)+1; 2. Würfel (w2), dito inc(summe[w1+w2]); w1+w2 ergibt die Würfelzahl von Würfel1 und Würfel2, also 2 bis 12 inc(summe[w1+w2]); ist das gleiche wie summe[w1+w2]:= summe[w1+w2]+1; Bsp: w1=1,w2=2 -> summe[1+2]:= summe[1+2]+1; oder summe[3]:= summe[3]+1; w1=2,w2=6 -> summe[2+6]:= summe[2+6]+1; oder summe[8]:= summe[8]+1 Es wird also immer der korrekte Array-Index benutzt und damit die richtige Würfelsumme um 1 erhöht. Man hätte es auch noch anders schreiben können: wuerfelsumme:= w1+w2; summe[wuerfelsumme]:= summe[wuerfelsumme]+1; Jetzt das ganze noch in eine Schleife (k=Anzahl der Würfe). |
AW: Listbox Zahlen erhöhen
Danke für die Tips, aber irgendwie glaub ich immer noch dass ich scheiße im erklären bin ... so sollte es sein:
Hier ein Link zu meinem Programm in Dropbox... ![]() |
AW: Listbox Zahlen erhöhen
NaJa, wenn das eine Musterlösung ist, die Form ist doch leicht verbesserungswürdig.
Wo fehlt denn da noch etwas? Gruß K-H |
AW: Listbox Zahlen erhöhen
So sollte es in etwa sein.
Rechts daneben soll später noch ein Diagramm hin, welches die Würfe grafisch Anzeigt (in PaintBox bzw. Bitmap). |
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:26 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz