![]() |
Re: Das große Lotto-Spiel - Bet and Win
Oben im ersten Post ist der gesamte Quellcode.
Wir haben halt in der Schule gelernt, wie man in einer ListBox per Zufall irgendwelche Zahlen ausgibt. An diesem Beispiel hat er uns den array erklärt, falls ich das richtig in Erinnerung habe. Und nun ist mein Lehrer auf die glorreiche Idee gekommen uns eine Woche Zeit zu geben, in der wir jetzt basierend auf der Listbox und den Zufallszahlen ein Lottospiel programmieren sollen. Vllt. verstehst du das ganze ja besser, wenn du dir den Quellcode ansiehst. Da ich Delphi-Neuling bin, weiß ich auch nicht genau, welche Alternative zur ListBox in diesem Fall sinnvoll wären! P.S: Laden tue ich die Daten über einen OpenDialog: Zitat:
MfG Jay |
Re: Das große Lotto-Spiel - Bet and Win
Wie wäre es denn, wenn Du jede ListBox in eine extra Datei speicherst?
Zum Beispiel so: Speichern:
Delphi-Quellcode:
Laden:
procedure TForm1.Spielspeichern1Click(Sender: TObject);
begin if SaveDialog1.Execute then begin Listbox1.Items.SaveToFile(ChangeFileExt(SaveDialog1.FileName,'.list1')); Listbox2.Items.SaveToFile(ChangeFileExt(SaveDialog1.FileName,'.list2')); Listbox3.Items.SaveToFile(ChangeFileExt(SaveDialog1.FileName,'.list3')); Listbox4.Items.SaveToFile(ChangeFileExt(SaveDialog1.FileName,'.list4')); Listbox5.Items.SaveToFile(ChangeFileExt(SaveDialog1.FileName,'.list5')); Listbox6.Items.SaveToFile(ChangeFileExt(SaveDialog1.FileName,'.list6')); end; end;
Delphi-Quellcode:
Anmerkung:
procedure TForm1.Spielladen1Click(Sender: TObject);
begin if OpenDialog1.Execute then begin Listbox1.Items.LoadFromFile(ChangeFileExt(OpenDialog1.FileName,'.list1')); Listbox2.Items.LoadFromFile(ChangeFileExt(OpenDialog1.FileName,'.list2')); Listbox3.Items.LoadFromFile(ChangeFileExt(OpenDialog1.FileName,'.list3')); Listbox4.Items.LoadFromFile(ChangeFileExt(OpenDialog1.FileName,'.list4')); Listbox5.Items.LoadFromFile(ChangeFileExt(OpenDialog1.FileName,'.list5')); Listbox6.Items.LoadFromFile(ChangeFileExt(OpenDialog1.FileName,'.list6')); end; end; Hier wird für jede Datei eine eigene Endung verwendet, *.list1 usw. ![]() P.S.: Wenn Du den Code einrückst (so wie in meinen Beispielen) wird es übersichtlicher. Wenn mehrere Befehle zu einer IF-Abfrage gehören, musst Du diese in einen begin/end-Block schreiben. //Edit: Klammern korrigiert |
Re: Das große Lotto-Spiel - Bet and Win
Bist du sicher, dass dein info-Lehrer nicht eher EINE listbox gemeint hat, bei der in jeder zeile eine Ziehung steht?
So etwa... Zitat:
|
Re: Das große Lotto-Spiel - Bet and Win
@Martin K.
Vielen Dank! Es funktioniert einwandfrei! Du hattest in deinem Code hinten in jeder Zeile noch eine ")" vergessen, aber das war dann das kleinste Problem und sogar für einen Noob wie mich zu lösen! Besten Dank schonmal! Später muss ich ja noch mehr Dinge speichern. Zum Beispiel die abgegebenen Tipps der einzelnen Spieler. Sollte ich das genauso machen oder hast du da eine Idee? die Tipps werden über Edit-Felder abgegeben. Vielen Dank! :dancer: :kiss: @NamenLozer: Ja wir hatten es ursprünglich nur in einer ListBox, wobei es mir so optisch viel besser gefällt und es auch übersichtlicher und benutzerfreundlicher ist! Ich habe oben ja noch ein zweites Problem beschrieben. Sollte einer von euch dazu was sagen können, würde ich mich sehr freuen! Wie ich die abgegebenen Tipps in den Edit Feldern mit den Werten aus den Listboxen vergleichen kann! Wie im Lotto halt... Was mir auch noch einfällt: Wie könnte ich hinkriegen, dass bei den sechs Listbox-Ziehungen keine Zahl doppelt gezogen werden kann? Anders wäre das etwas unreal ;)
Delphi-Quellcode:
Tut mir jetzt schon Leid, dass ich euch hier mit meine Unfähigkeit aufhalte, aber es geht hier um 15 Punkte in Info :tongue:
procedure TForm1.Button1Click(Sender: TObject);
Var Lottozahlen:TLottozahlen; Procedure Zahlen_ermitteln(var Lottozahlen:TLottozahlen); var i:integer; begin randomize; for i:=1 to 1 do Lottozahlen[i]:=random(49)+1; end; procedure Zahlen_ausgeben(Lottozahlen:TLottozahlen); var i:integer; begin for i:=1 to 1 do ListBox1.Items.Add(IntToStr(Lottozahlen[i])); end; begin Zahlen_ermitteln(Lottozahlen); Zahlen_ausgeben(Lottozahlen); end; procedure TForm1.Button2Click(Sender: TObject); Var Lottozahlen:TLottozahlen; Procedure Zahlen_ermitteln(var Lottozahlen:TLottozahlen); var i:integer; begin randomize; for i:=1 to 1 do Lottozahlen[i]:=random(49)+1; end; procedure Zahlen_ausgeben(Lottozahlen:TLottozahlen); var i:integer; begin for i:=1 to 1 do ListBox2.Items.Add(IntToStr(Lottozahlen[i])); end; begin Zahlen_ermitteln(Lottozahlen); Zahlen_ausgeben(Lottozahlen); end; procedure TForm1.Button3Click(Sender: TObject); Var Lottozahlen:TLottozahlen; Procedure Zahlen_ermitteln(var Lottozahlen:TLottozahlen); var i:integer; begin randomize; for i:=1 to 1 do Lottozahlen[i]:=random(49)+1; end; procedure Zahlen_ausgeben(Lottozahlen:TLottozahlen); var i:integer; begin for i:=1 to 1 do ListBox3.Items.Add(IntToStr(Lottozahlen[i])); end; begin Zahlen_ermitteln(Lottozahlen); Zahlen_ausgeben(Lottozahlen); end; procedure TForm1.Button4Click(Sender: TObject); Var Lottozahlen:TLottozahlen; Procedure Zahlen_ermitteln(var Lottozahlen:TLottozahlen); var i:integer; begin randomize; for i:=1 to 1 do Lottozahlen[i]:=random(49)+1; end; procedure Zahlen_ausgeben(Lottozahlen:TLottozahlen); var i:integer; begin for i:=1 to 1 do ListBox4.Items.Add(IntToStr(Lottozahlen[i])); end; begin Zahlen_ermitteln(Lottozahlen); Zahlen_ausgeben(Lottozahlen); end; procedure TForm1.Button5Click(Sender: TObject); Var Lottozahlen:TLottozahlen; Procedure Zahlen_ermitteln(var Lottozahlen:TLottozahlen); var i:integer; begin randomize; for i:=1 to 1 do Lottozahlen[i]:=random(49)+1; end; procedure Zahlen_ausgeben(Lottozahlen:TLottozahlen); var i:integer; begin for i:=1 to 1 do ListBox5.Items.Add(IntToStr(Lottozahlen[i])); end; begin Zahlen_ermitteln(Lottozahlen); Zahlen_ausgeben(Lottozahlen); end; procedure TForm1.Button6Click(Sender: TObject); Var Lottozahlen:TLottozahlen; Procedure Zahlen_ermitteln(var Lottozahlen:TLottozahlen); var i:integer; begin randomize; for i:=1 to 1 do Lottozahlen[i]:=random(49)+1; end; procedure Zahlen_ausgeben(Lottozahlen:TLottozahlen); var i:integer; begin for i:=1 to 1 do ListBox6.Items.Add(IntToStr(Lottozahlen[i])); end; begin Zahlen_ermitteln(Lottozahlen); Zahlen_ausgeben(Lottozahlen); end; |
Re: Das große Lotto-Spiel - Bet and Win
Zitat:
Zitat:
![]() Such doch mal nach ein paar Beispielen (entweder hier im Forum oder in der Delphi-Hilfe oder auch sonst wo im Netz), wie man einen String mit einer IniFile speichert. Zitat:
Es wird dann so oft eine neue Zufallszahl generiert bis eine Zufallszahl gefunden wurde, die noch nicht im array steht. Dann erst wird die neue Zufallszahl ins array geschrieben. P.S.: Verwende anstatt dem Zitat-Button den Delphi-Code-Button für Deinen Delphi-Quelltext, dann sieht es schon gleich besser formatiert aus :wink: //Edit: ich sehe gerade, das hast Du ja schon geändert! |
Re: Das große Lotto-Spiel - Bet and Win
Könntest du mir das mit dem iniFile genauer erklären? Habe mir schon etwas angelesen im Netz und hier im Forum, aber den totalen Geistesblitz habe ich leider nicht! Die Delphi-Hilfe klappt bei mir nicht, da ich Windows Vista verwendet und die Hilfe-Datei nicht kompatibel ist!
Und auch für den array bzw. die Zufallszahl, die nicht doppelt vorkommen darf, könnte ich ein Beispiel sehr gut gebrauchen... Wie gesagt...tut mir echt Leid, dass ich mich so blöd anstelle, aber habe noch nich soviel Ahnung und muss es morgen Abend fertig haben und bei uns im Info Forum hochladen. Danke schonmal! :) |
Re: Das große Lotto-Spiel - Bet and Win
Mal abgesehen von dem ini-file war ich mal so frei, deinen code etwas zu vereinfachen:
Delphi-Quellcode:
Mir ist abe rimmernoch nicht ganz klar, wozu du 6 listboxen brauchst, in die du eine zahl reinschreibst. Vllt. bin ich ja zu doof, aber ich kapier nicht, wie das gemeint ist :oops: (so viel zum thema benutzerfreundlich *g*)
Procedure Zahlen_ermitteln(var Lottozahlen: TLottozahlen);
var i,j,zahl: integer; ok: boolean; begin for i := 1 to 1 do // for i := 1 to 6 do würde für mich mehr sinn machen o.ô begin ok := true; repeat zahl := random(49)+1; for j := 1 to i do ok := ok and (lottozahlen[j] <> zahl); until ok; Lottozahlen[i] := zahl; end; end; procedure Zahlen_ausgeben(Lottozahlen: TLottozahlen; Listbox: TListbox); var i: integer; begin for i := 1 to 1 do ListBox.Items.Add(IntToStr(Lottozahlen[i])); end; procedure TForm1.Button1Click(Sender: TObject); Var Lottozahlen:TLottozahlen; begin Zahlen_ermitteln(Lottozahlen); Zahlen_ausgeben(Lottozahlen, listbox1); end; procedure TForm1.Button2Click(Sender: TObject); Var Lottozahlen:TLottozahlen; begin Zahlen_ermitteln(Lottozahlen); Zahlen_ausgeben(Lottozahlen, listbox2); end; procedure TForm1.Button3Click(Sender: TObject); Var Lottozahlen:TLottozahlen; begin Zahlen_ermitteln(Lottozahlen); Zahlen_ausgeben(Lottozahlen, listbox3); end; procedure TForm1.Button4Click(Sender: TObject); Var Lottozahlen:TLottozahlen; begin Zahlen_ermitteln(Lottozahlen); Zahlen_ausgeben(Lottozahlen, listbox4); end; procedure TForm1.Button5Click(Sender: TObject); Var Lottozahlen:TLottozahlen; begin Zahlen_ermitteln(Lottozahlen); Zahlen_ausgeben(Lottozahlen, listbox5); end; procedure TForm1.Button6Click(Sender: TObject); Var Lottozahlen:TLottozahlen; begin Zahlen_ermitteln(Lottozahlen); Zahlen_ausgeben(Lottozahlen, listbox6); end; initialization randomize; edit: achja, das wichtigste hätt ich fast vergessen: es sollte keine zahl mehr doppelt vorkommen^^ |
Re: Das große Lotto-Spiel - Bet and Win
Mir fällt grad auf, dass Du die Schleife mit den Lottozahlen immer so durchläufst:
Delphi-Quellcode:
1. Was für einen Sinn hat eine Schleife, die von 1 bis 1 läuft? :gruebel:
for i:=1 to 1 do
2. Wie hast Du denn genau TLottozahlen definiert, zeig mal Deine Typendeklaration! TIniFile geht so:
Delphi-Quellcode:
uses
{...,} IniFiles; {...} var ini: TIniFile; {...} ini := TIniFile.Create( {Dateiname} ); //Datei erzeugen try //hier machst Du was mit ini //einen String, der in Edit1.Text steht, speichern: ini.WriteString('Sektor', 'Wert', Edit1.Text); //am besten schaust Du Dir jetzt die erzeugte Datei mal an, dann weißt Du was mit Sektor und Wert gemeint ist //einen String aus der ini-Datei auslesen und in Edit1.Text schreiben: Edit1.Text := ini.ReadString('Sektor', 'Wert', ''); //im letzten Parameter (wo '' steht) wird der Default-Wert angegeben, d.h. der String der in Edit1.Text geschrieben wird, wenn ein Eintrag mit dem Namen 'Wert' in der Datei nicht vorhanden ist. finally ini.Free; //Datei freigeben end; |
Re: Das große Lotto-Spiel - Bet and Win
Zitat:
|
Re: Das große Lotto-Spiel - Bet and Win
Liste der Anhänge anzeigen (Anzahl: 1)
@NamenLozer:
Vielen Dank für die Mühe! Werde es gleich sofort ausprobieren! Stell dir mal vor, ich hätte eine einzige ListBox und in jeder Zeile würden 6 Zahlen für eine Ziehung stehen. Das sähe doch ersten relativ unübersichtlich, sowie viel zu klein aus! Ich finde das optisch recht gut wie es ist. Wobei mir da eine Idee kommt! Es müsste doch bestimmt irgendwie möglich sein, dass man die 6 Zahlen in den ListBoxen zieht und die Ziehung dann in einer weiteren großen ListBox ausgibt, wo die 6 Zahlen dann in einer Reihe stehen. Dann würde sich das speichern auch um einiges vereinfachen und man könnte die 6 Listboxen sozusagen als Lotto-Zahlen-Generator nehmen! Ich weiß, klingt alles bescheuert...aber für 15 Punkte muss man ja auch mal bissl innovativ sein :P ;) Also für weitere Anregungen, Hilfen sowie Ideen liebe ich euch :P :-D @Martin:
Delphi-Quellcode:
type
TLottozahlen=array[1..1] of Integer; TForm1 = class(TForm) ListBox1: TListBox; Button1: TButton; ListBox2: TListBox; Button2: TButton; ListBox3: TListBox; Button3: TButton; ListBox4: TListBox; Button4: TButton; ListBox5: TListBox; Button5: TButton; ListBox6: TListBox; Button6: TButton; Label1: TLabel; MainMenu1: TMainMenu; Datei1: TMenuItem; NeuesSpiel1: TMenuItem; Label2: TLabel; Label3: TLabel; Label4: TLabel; Label5: TLabel; Label6: TLabel; ExitGame1: TMenuItem; Edit1: TEdit; Edit2: TEdit; Edit3: TEdit; Edit4: TEdit; Edit5: TEdit; Edit6: TEdit; Spielspeichern1: TMenuItem; SaveDialog1: TSaveDialog; Spielladen1: TMenuItem; OpenDialog1: TOpenDialog; procedure Button1Click(Sender: TObject); procedure Button2Click(Sender: TObject); procedure Button3Click(Sender: TObject); procedure Button4Click(Sender: TObject); procedure Button5Click(Sender: TObject); procedure Button6Click(Sender: TObject); procedure NeuesSpiel1Click(Sender: TObject); procedure ExitGame1Click(Sender: TObject); procedure Spielspeichern1Click(Sender: TObject); procedure Spielladen1Click(Sender: TObject); Hoffe, dass du damit was anfangen kannst! Habe auch nocheinmal das gesamte Projket im Anhang hochgeladen :) |
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:38 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