![]() |
Das große Lotto-Spiel - Bet and Win
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo Leutz,
und zwar muss ich für die Schule als Hausaufgabe in Info mein eigenes LottoSpiel programmieren... Ich habe noch nicht allzu lange Info und bin daher noch ziemlich neu in der Materie...wundert euch daher nicht, wenn ich alles noch bissl umständlicher mache, als es vllt. sein müsste, aber bisher klappt alles ganz gut! Zu meinem Problem: Ich habe jetzt 6 Listboxen erstellt und in jeder Listbox findet eine der sechs Ziehung für die Lottozahlen statt. Das Spiel soll am Ende für 4 Spieler sein, sodass im unteren Bereich jeder Spieler 6 EditFelder hat, wo er seine Tipps abgeben kann, die dann mit den Listbox-Ziehungen oben verglichen werden müssen. Ich wollte jetzt für jeden Spieler noch einen "Auswerten" Button erstellen, wo das Ergebnis dann getestet wird, aber ich habe wie gesagt absolut keine Ahnung, wie man die Ziehungen mit den abgegebenen Tipps vergleichen kann! Mein zweites Problem besteht darin, dass ich nicht weiß, wie ich eine Speichern/Laden Funktion hinkriege. Ich habe es mit einem einfach SaveDialog bzw. OpenDialog versucht, aber er speichert dann irgendwie immer nur die Zahl von der sechsten und letzten Ziehung ab und mein laden, füllt er alle Listboxen mit der selben (der sechsten) Zahl. Es muss natürlich später dann auch noch möglich sein, dass in diesem File, die aktuellen Geldbeträge der Spieler usw gespeichert werden. Zitat:
Mir macht Info aber einen riesen Spaß und außerdem hat unser Lehrer gesagt, dass alle die es schaffen 15 Punkte (also eine 1+) aufgeschrieben bekommen! :) Freue mich über jegliche Antworten! Im Anhang befindet sich der aktuelle Stand des Programms! Ihr könnt mir natürlich auch Anhand dessen etwas erklären oder selber schon schreiben! :) Vielen Dank schonmal für alles! :) MfG Jay |
Re: Das große Lotto-Spiel - Bet and Win
Hai Jay,
ich habe mir den Code nur kurz angesehen. Nach deiner IF-Then Abfrage solltest Du einen Begin - End Block einbauen ;-) |
Re: Das große Lotto-Spiel - Bet and Win
Hey Sharky,
danke für die schnelle Antwort! Wie meinst du das genau? Zum Beispiel hier soetwas klappt nicht: Zitat:
Kannst du mir es vllt als Beispiel für die ersten zwei Listboxen vormachen? Dann dürfte ich es selber hinkriegen... Nocheinmal Entschuldigung für meine Doofheit, aber bin erst neu dabei =) MfG Jay |
Re: Das große Lotto-Spiel - Bet and Win
Delphi-Quellcode:
Da aber die Dateiname immer gleich ist, müsste da nicht die Datei einfach überschrieben werden sodass am Ende in der Datei nur die Items von Listbox6 stehen?
if SaveDialog1.Execute then
begin Listbox1.Items.SaveToFile(SaveDialog1.FileName); Listbox2.Items.SaveToFile(SaveDialog1.FileName); Listbox3.Items.SaveToFile(SaveDialog1.FileName); Listbox4.Items.SaveToFile(SaveDialog1.FileName); Listbox5.Items.SaveToFile(SaveDialog1.FileName); Listbox6.Items.SaveToFile(SaveDialog1.FileName); end; |
Re: Das große Lotto-Spiel - Bet and Win
So ist es leider...
Er speichert nur den Wert der ListBox6 ab und dementsprechend lädt er beim "Spiel laden" in alle 6 Listboxen nur diesen einen Wert. Wir könnte man das Problem denn lösen? Ich möchte natürlich, dass er alle Werte in dieser einen Datei abspeichert und auch dementsprechend lädt. Freue mich über jede Idee ;) Mfg Jay |
Re: Das große Lotto-Spiel - Bet and Win
Gucke dir mal
![]() Mittels dieser speicherst du die Daten jeder Listbox in einer eigenen Section und speicherst alle Daten in einer Datei ab. Beim Programmlauf lädst du dann die spezifischen Daten in die jeweiligen Listboxen. Tausende Beispiele und viele Anleitungen findest du über die Forensuche. ;) |
Re: Das große Lotto-Spiel - Bet and Win
Habe mir gerade zwei Tutorials durchgelesen und weiß nun wie .ini Dateien funktionieren und was man mit ihnen machen kann! Allerdings ist mir nicht so ganz klar, wie ich sie als Code in mein Programm einbinden soll...Kannst du mir da vllt. noch einen kleinen Anstoß geben? Kann ich meine schöne SaveDialog Oberfläche trotzdem behalten, wenn ich es mit der ini Funktion mache? :)
MfG Jay |
Re: Das große Lotto-Spiel - Bet and Win
Delphi-Quellcode:
Hier werden alle Items zu einer Stringlist zsuammengefügt und diese Stringlist wird dann gespeichert. Ist es das, was du willst?
procedure TForm1.Spielspeichern1Click(Sender: TObject);
var stringlist: TStringlist; begin SaveDialog1.Title := 'Spiel speichern unter: '; SaveDialog1.FileName := 'Savegame.sav'; SaveDialog1.Filter := '.sav'; if SaveDialog1.Execute then begin stringlist := TStringlist.create; stringlist.addStrings(listbox1.items); stringlist.addStrings(listbox2.items); stringlist.addStrings(listbox3.items); stringlist.addStrings(listbox4.items); stringlist.addStrings(listbox5.items); stringlist.addStrings(listbox6.items); stringlist.SaveToFile(SaveDialog1.FileName); stringlist.free; end; end; |
Re: Das große Lotto-Spiel - Bet and Win
Liste der Anhänge anzeigen (Anzahl: 1)
Hey NamenLozer,
habe es soeben ausprobiert und ich würde sagen, dass es mich aufjedenfall weitergebracht hat nur gibt es da immernoch ein Problem. Und zwar habe ich ja 6 ListBoxen und in jeder findet eine Ziehung statt. Wenn ich es nun mit diesem Code speichere und wieder lade, hat er im Vergleich zu vorhin noch alle Werte gespeichert, aber er lädt alle Werte in jede ListBox. Es soll ja in jede ListBox nur ein Wert geladen werden, nämlich der davor durch Zufall gezogene! Im Anhang habe ich mal die .exe Datei inkl. diesem neuen Code...da könnt ihr es schnell ausprobieren, damit ihr besser versteht wie ich das meine ;) Danke MfG Jay |
Re: Das große Lotto-Spiel - Bet and Win
Mit der exe kann ich nicht viel anfangen. Wie lädst du die Daten denn?
Außerdem verstehe ich nicht, wieso du listboxen verwendest, würde denn nicht ein ganz normales label reichen? oder habe ich da was falsch verstanden :?: |
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 :) |
Re: Das große Lotto-Spiel - Bet and Win
Sorry, aber das ist doch absoluter Schwachsinn:
Delphi-Quellcode:
Weißt Du wie ein array funktioniert?
type
TLottozahlen=array[1..1] of Integer; Weißt Du für was das [1..1] steht? //Edit: Mein Vorschlag für eine Typendeklaration von Lottozahlen sähe so aus:
Delphi-Quellcode:
type
TLottozahl = 1..49; TLottozahlen = array[1..6] of TLottozahl; |
Re: Das große Lotto-Spiel - Bet and Win
Ein array mit einem element?! sry, aber hääää?
Und wa sich einfach wissen möchte ist: Steht bei den Listboxen jeweils eine Listbox für eine Ziehung, oder jede Listbox für eine [b]Zahl aus einer Ziehung[b], und die reihen untereinander jeweils für eine neue zeihung? Wenn letzteres der Fall ist, und dich einfach nur stört, dass die Zahlen dann zu klein sind, und nicht im Gleichen abstand, kannst du auch EINE listbox benutzen, und das ereignis ondrawitem (oder so ähnlich) benutzen, und den inhalt der listbox selber zeichnen. edit: also, wenn du mich fragst, ist das projekt verkorxt. vielleicht wäre es besser noch mal völlig neu anzufangen, arrays zu verstehen und das bedienkonzept zu überdenken... |
Re: Das große Lotto-Spiel - Bet and Win
Ähm was war nochmal die eigentliche Frage in diesem Thread? :stupid:
Wenn es ums Speichern geht könntest du ganz einfach sowas machen:
Delphi-Quellcode:
Ich habe den Code schnell getippt und nicht getestet, eigentlich sollte es aber in dieser Form gehen.
var
ini : TIniFile; i, g: Integer; begin try ini := TIniFile.Create(ExtractFilePath(ParamStr(0)) + 'data.ini'); for i := 1 to 6 do begin for g := 0 to (FindComponent('Listbox' + IntToStr(i)) as TListbox).Items.Count-1 do ini.WriteInteger('Listbox' + IntToStr(i), IntToStr(g), (FindComponent('Listbox' + IntToStr(i)) as TListbox).Items[g]); end; finally ini.Free; end; |
Re: Das große Lotto-Spiel - Bet and Win
Die Prozedur für eine Lottoziehung sähe mit meiner Typendeklaration dann so aus:
Delphi-Quellcode:
Zurück zum Thema (da hat Balu der Bär wohl recht :oops: ), dies ist eigentlich eine noch bessere Lösung für das speichern, zumal man dann alles in EINE INI-Datei speichern kann, also das von den Listboxen und von den Edits.
Procedure Zahlen_ermitteln(var Lottozahlen: TLottozahlen);
var i,j: Integer; zahl: TLottozahl; ok: boolean; begin for i := 1 to 6 do 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; |
Re: Das große Lotto-Spiel - Bet and Win
@Martin:
Klar ist das Schwachsinn und in der Schule hatten wir auch 1....6 aber ich habe es umgeändert, damit er pro Fenster eine Zahl ausgibt...und das war so am leichtesten, da ich wie gesagt nicht wirklich viel Ahnung habe nach 3 Monaten Info-Unterricht :( Daher brauch ich auch immer so ausführliche Hilfen bzw am besten Beispiele, damit ich was von euren guten Ideen umsetzen kann! Werde deine Prozedur direkt ausprobieren :) @NamenLozer: Ja ganz genau! Ich meine zweiteres! Wenn das auch so geht, wäre das optimal! Geht dabei wie gesagt vorallem um die Optik...auch hier wäre ein Beispiel gut! @Balu: Kann ich dann mit deinem ini Code trotzdem meinen normalen SaveDialog behalten? @Ihr Drei: Ihr habt jetzt von mir die offizielle Erlaubnis mich auszulachen! ;) Danke für eure Hilfe! Durch eure Ideen und Wissen könnte das am Ende sogar was geben :) |
Re: Das große Lotto-Spiel - Bet and Win
Zitat:
Delphi-Quellcode:
einfach
ini := TIniFile.Create(ExtractFilePath(ParamStr(0)) + 'data.ini');
Delphi-Quellcode:
//Edit: Niemand wird dich auslachen, ich kann dir nur raten es selbst zu versuchen und nicht deinem Lehrer den fertigen Code abzugeben, könnte sonst Probleme wenn du nicht genau weißt wie/was funktioniert. ;)
if SaveDialog1.Execute then
begin ini := TIniFile.Create(SaveDialog1.Filename); //... der restliche Code end; |
Re: Das große Lotto-Spiel - Bet and Win
Hallo,
Delphi-Quellcode:
bei einer Lottoziehung spielt das Glück zwar eine große Rolle, aber nicht initialisierte Feldelemente sollte man immer außen vor lassen.
Procedure Zahlen_ermitteln(var Lottozahlen: TLottozahlen);
var i,j: Integer; zahl: TLottozahl; ok: boolean; begin for i := 1 to 6 do begin ok := true; repeat zahl := random(49)+1; // for j := 1 to i do // Element i ist noch nicht initialisiert! for j := 1 to i - 1 do ok := ok and (lottozahlen[j] <> zahl); until ok; Lottozahlen[i] := zahl; end; end; Einen anderen Ansatz für eine Lottoziehung (mit Erklärung) findet man ![]() //Edit Noch eine Frage: wenn die Variable "ok" einmal den Wert False hatte, kann sie dann jemals wieder den Wert True erhalten? Gruß Hawkeye |
Re: Das große Lotto-Spiel - Bet and Win
ja, hab auch gerade gemerkt, dass "ok := true" UNTER "repeat" muss.
|
Re: Das große Lotto-Spiel - Bet and Win
Liste der Anhänge anzeigen (Anzahl: 1)
Ich hab mal ein beispiel für dich geproggt.
Ich hab einige stellen offen gelassen, die musst du selbst proggen. (speichern+laden) Es sollte aber mit dieser neuen Struktur einfacher sein, einen Speicher- u. Lademechanismus einzubauen. (TPlayers kannst du ähnlich wie TZiehungen programmieren, falls du diese Struktur übernehmen willst!) Außerdem wäre es gut, eine Sortier-Funktion mit einzubauen, aber das überlasse ich dir. (oder du nimmst diese methode: ![]() |
Re: Das große Lotto-Spiel - Bet and Win
Vielen Dank NamenLozer für das Beispiel! Gefällt mir sehr gut und ich werde in der Tat daran weiterproggen!
Ebenfalls vielen Dank an alle anderen für die hilfreichen Tipps! Werde eine Menge berücksichtigen! Aber trotzdem glaube ich nicht, dass ich jetzt alles bis zum Ende alleine hinkriegen werde, sodass ich heute abend oder morgen wieder hier rein posten werde! Würde mich freuen, wenn ihr hin und wieder reinschaut und mir weiterhin so tatkräftig zur Seite steht! Danke an alle!! :kiss: MfG Jay |
Re: Das große Lotto-Spiel - Bet and Win
Liste der Anhänge anzeigen (Anzahl: 1)
Gibt es eine Möglichkeit ein Edit-Feld so zu gestalten, dass die eingegebenen Tipps im Editfeld so angeordnet sind wie dadrüber in der ListBox?
Im Anhang befindet sich ein Bild wie es aussehen sollte! Dass nach jedem Tipp der Cursor soweit springt, dass das nächste auch wieder untereinander angeordnet wird! Freue mich auch hier über jede Hilfe! Am allerbesten wäre es natürlich mit einem Beispielcode oder einem, den ich direkt verwenden kann, wie es NamenLozer eben freundlicherweise gemacht hat! :) Danke MfG Jay |
Re: Das große Lotto-Spiel - Bet and Win
Wie wäre es, ein TPanel zu nehmen, dessen borderstyle auf bssingle zu setzen, und bevelouter auf bvnone zu setzen? Color könntest du auf clwindow setzen. darauf kommen dann 6 gleichmäßig angeordnete edits mit dem borderstyle bsnone. Maxlength auf 2.
Das dürfte deiner Darstellung recht nahe kommen. |
Re: Das große Lotto-Spiel - Bet and Win
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo,
Vielen Dank für diese gute Idee! Es stimmt genau mit meinen Vorstellungen überein und ich habe es bereits in die Tat umgesetzt! Im Anhang könnt ihr den aktuellen Status meines Programms sehen! Dennoch stellen sich drei mehr oder weniger große weitere Probleme: 1. Die Ziehungen sind irgendwie immer dieselben. Wenn ich jetzt 5 Ziehungen hintereinander mache und dann diese aus der Listbox lösche um neue Ziehungen durchzuführen, sind es wieder genau dieselben. Da geht natürlich relativ schnell der Spielwitz verloren! 2. Hätte ich gerne bei allen 4 Spielern jeweils zwei Checkboxen mit den Funktionen Enable und Disable um einzustellen, wie viel Spieler mitspielen! 3. Der wohl entscheidende Punkt: Über einen "Auswerten"-Button muss es möglich sein, die 6 Edit Felder mit je einer Zahl eines Spielers mit einer Ziehung in der Listbox zu vergleichen, um die "Richtigen" zu ermitteln! Freue mich über jede Art von Ideen und Hilfen! Drittens ist natürlich am wichtigesten! Bin gespannt auf eure tollen Beiträge...ohne das Forum würde ich es sowieso niemals schaffen :) MfG Jay |
Re: Das große Lotto-Spiel - Bet and Win
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:
Abgesehen davon habe ich gerade bemerkt, dass im onCreate des Formulars noch ein "randomize;" fehlt. "OpenDialog1.Filter := '.tip';" solltest du weglassen, weil der Filter so nicht funktioniert. Wenn, dann so: "Lotto-Tip (*.tip)|*.tip" beim savedialog ebenso. edit: beispiel angehängt |
Re: Das große Lotto-Spiel - Bet and Win
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo,
Vielen Dank! Das Spiel ist soweit lauffähig! :cheers: Eine Sache gefällt mir trotzdem noch nicht so ganz! Und zwar würde ich gerne eine Speicher/Ladefunktion per iniFile einbauen, um in einer Datei die Ziehungen, die Tipps der Spieler und die Treffer bzw Punkte der Spieler zu speichern! Allerdings habe ich noch gar keine Ahnung, wie das mit der iniFile klappen könnte! Meine momentane Speicher/Lade Funktion hat auch einen schweren Bug! Sobald man etwas gespeichertes laden will, kommt eine Fehlermeldung, ausser wenn man zb. drei Ziehungen durchführt, diese drei abspeichert, dann die Listbox leert und vier neue Ziehungen erstellt! Erst dann kan man die davor gespeicherte Datei mit den drei Ziehungen laden und sie wird dann auch erfolgreich geladen! Sollte das mit der iniFile machbar sein, wäre mir es natürlich viel lieber und dann wäre das zweite Problem natürlich überflüssig! Vielen Dank schoneinmal - So wie es aussieht, wird das Projekt erfolgreich fertig werden :) PS: Im Anhang ist die aktuellste Version des Programms, um Fehler bei Laden/Speichern zu sehen! MfG Jay |
Re: Das große Lotto-Spiel - Bet and Win
ich würde mir eine eigene schreibweise für die lottozahlen ausdenken.
Z.b. könnte man die einzelnen ziffern durch ein komma voneinander trennen und die ziehungen jeweils mit einer Raute. etwa so:
Code:
natürlich wäre es auch möglich, beispielsweise so zu speichern:
[ziehungen]
zahlen = 12,14,21,32,42,48#1,34,35,36,40,41#3,4,5,6,7,8# etc... [spieler] spieler1 = Philip#1,25,33,34,41,43 spieler2 = Markus#12,14,22,33,43,49# spieler3 = ...
Code:
das könnte man z.b. realisieren, indem man alle values der section "[ziehungen]" durchscannt.
[ziehungen]
zahlen1 = 12,14,21,32,42,48 zahlen2 = 1,34,35,36,40,41 zahlen3 = 3,4,5,6,7,8 |
Re: Das große Lotto-Spiel - Bet and Win
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo,
ich bin mit meinem fast fertigen Spiel soweit sehr zufrieden! Lediglich die Speicher/Ladefunktion ist noch nicht 100% lauffähig! Ich muss das Spiel heute abend irgendwann bei uns im Info-Forum hochladen, sodass ich ein wenig unter Zeitdruck stehe! Würde mich freuen, wenn mir jemand so helfen könnte, dass ich das schnell hinbekomme! Ich würde mich auch freuen, wenn einer rausfinden würde, wieso die Speicherfunktion bei mir nicht funktioniert!! Ich habe jetzt viele Stunden dieses Wochenende an diesem Projekt verbracht und auch viele von euch aufgehalten, sodass ich mich freuen würde, wenn sich das letzte Problem auch noch klären würde und das ganze einen runden Abschluss geben würde :) Danke MfG Jay |
Re: Das große Lotto-Spiel - Bet and Win
Hmm, so ganz verstehe ich die av auch nicht, aber eigentlich hatte ich mir gedacht, dass du in tziehungen.loadfromfile und tziehungen.savetofile die entsprechenden funktionen reinschreibst. sonst macht es eigentlich wenig sinn, das zeug in einer klasse zu kapseln...
ich hatte mir auch gedacht, dass du eine klasse tplayers und einen record tplayer einführen würdest. @speichern/laden: das kann nicht gehen, weil in der listbox selber gar nichts drinsteht! stattdessen wird die listbox nur zur anzeige benutzt, die eigentlichen daten stehen in "ziehungen", daher ist in der klasse tziehungen ja auch schon loadfromfile und savetofile deklariert (wenn auch auskommentiert). Wie ich bereits gesagt habe, bei dem format kannst du ja kreativ sein.
Delphi-Quellcode:
Ungetestet! Speicher-Methode kannst du ja selbst schreiben (wenns funktioniert :wink: )
procedure TZiehungen.LoadFromfile(filename: string);
var ini: tinifile; stringlist: tstringlist; lottozahlen: tlottozahlen; i,j,offset: integer; s: string; begin { Inidatei laden } ini := tinifile.Create(filename); stringlist := tstringlist.Create; { alte tipps löschen } clear; { alle Keys aus der section "tipps" in stringlist einlesen } ini.ReadSection('tipps',stringlist); for i := 0 to stringlist.count-1 do begin j := 0; offset := 1; for j := 1 to 6 do begin { value-abschnitt zwischen zwei kommas extrahieren } s := copy(stringlist[i],offset,posex(',',stringlist[i],offset)-offset); { neuen offset setzen (nach position des nächsten kommas) } offset := posex(',',stringlist[i],offset)+1; { extrahierten wert als integer in lottozahlen einfügen } lottozahlen[j] := strtoint(s); end; { Aus value geladene lottozahlen zur liste hinzufügen } add(lottozahlen); end; stringlist.free; ini.free; end; (Die speicher-methode entspricht hier meiner zweiten variante aus meinem letzten post. (es werden aber nur zahlen gespeichert, keine spieler!)) |
Re: Das große Lotto-Spiel - Bet and Win
Hallo,
auch wenn man eigentlich wissen müsste, dass Lotto 6 aus 49 heißt sollte die Eingabe des Tipps auch nur Zahlen bis 49 zulassen. |
Re: Das große Lotto-Spiel - Bet and Win
Hallo,
@NamenLozer: Vielen Dank für den Laden-Code! Ich weiß, dass es langsam etwas dreist ist, was ich hier alles frage und verlange, aber könntest du mir dasselbe vllt. auch schnell für Speichern machen? Würde mich auch selber ranwagen, nur muss ich das gesamte Projekt innerhalb der nächsten paar Stunden fertig und hochgeladen haben, sodass ich das auf die schnelle alleine nicht mehr schaffe! Wäre echt super nett!! Danke MfG Jay |
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:09 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