Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Listbox Zahlen erhöhen (https://www.delphipraxis.net/195594-listbox-zahlen-erhoehen.html)

TarantelFaser47 12. Mär 2018 19:01

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!

Der schöne Günther 12. Mär 2018 19:08

AW: Listbox Zahlen erhöhen
 
Und was genau ist dein Problem dabei? Was hast du schon versucht und was ging nicht?

günni0 12. Mär 2018 19:11

AW: Listbox Zahlen erhöhen
 
Zitat:

Hi ich möchte ne Listbox in der Zahlen stehen
Na dann bastel dir das doch zusammen.
Hört sich aber eher an nach Ich bin jetzt hier, also macht mal für mich.

TarantelFaser47 12. Mär 2018 19:31

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;

KodeZwerg 12. Mär 2018 19:49

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.

TarantelFaser47 12. Mär 2018 19:57

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.

günni0 12. Mär 2018 20:03

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;

KodeZwerg 12. Mär 2018 20:20

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.

TarantelFaser47 12. Mär 2018 20:24

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.

KodeZwerg 12. Mär 2018 20:42

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?

TarantelFaser47 12. Mär 2018 20:48

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...

günni0 12. Mär 2018 20:49

AW: Listbox Zahlen erhöhen
 
Was du meinst könnte einem Histogram nahe kommen. Such das mal bei Google um das Prinzip zu verstehen.

hoika 12. Mär 2018 20:55

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:
type
  TForm1 = class(TForm)
    private
    public
      summe: array[2..12] of Integer;
  end;
Dann darf in der ButtonClick das Array natürlich nicht auf 0 zurückgesetzt werden.

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 ;)

KodeZwerg 12. Mär 2018 21:11

AW: Listbox Zahlen erhöhen
 
Zitat:

Zitat von hoika (Beitrag 1395898)
Dann darf in der ButtonClick das Array natürlich nicht auf 0 zurückgesetzt werden.

Genau deshalb hab ich es anfangs nicht verstanden und mehr und mehr nachgefragt ;-)

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.

hoika 12. Mär 2018 22:00

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 ... ;)

Delphi.Narium 12. Mär 2018 22:15

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]]);

hoika 12. Mär 2018 22:25

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 ;)

KodeZwerg 12. Mär 2018 22:33

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.

TarantelFaser47 13. Mär 2018 09:24

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;(

günni0 13. Mär 2018 10:08

AW: Listbox Zahlen erhöhen
 
Delphi-Quellcode:
inc(summe[w1+w2]);
Da hast du doch dein Histogram.

TarantelFaser47 13. Mär 2018 11:11

AW: Listbox Zahlen erhöhen
 
Ähm ja, und?

günni0 13. Mär 2018 11:23

AW: Listbox Zahlen erhöhen
 
Tolle Einstellung.

TarantelFaser47 13. Mär 2018 13:52

AW: Listbox Zahlen erhöhen
 
Zitat:

Zitat von günni0 (Beitrag 1395927)
Delphi-Quellcode:
inc(summe[w1+w2]);
Da hast du doch dein Histogram.

Ich weis ehrlichgesagt nicht was ich damit anfangen soll .. :(

hoika 13. Mär 2018 16:26

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).

TarantelFaser47 13. Mär 2018 18:21

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...
https://www.dropbox.com/s/ikhi9fl52g...ation.zip?dl=0

p80286 13. Mär 2018 21:31

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

TarantelFaser47 14. Mär 2018 16:42

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 21:26 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz