| Autor |
Beitrag |
ChillerNWA
Hält's aus hier
Beiträge: 5
|
Verfasst: Sa 07.11.09 16:21
Guten Tag Volk,
nachdem ich schon einige kleinere Sachen gewagt habe, will ich mal etwas größeres probieren. Ich habe mir fest vorgenommen, ein Kniffel zu programmieren. Ich habe hier schon einige exemplare runtergeladen + code, jedoch blick ich da nicht sonderlich viel durch.
Mein Problem ist das abkürzen des Codes. Das Spiel zu programmieren ist nicht sonderlich schwierig, jedoch an Zeilen zu sparen schon. Ich könnte jedes Ereignis einzeln auftreten ( z.b. bei einer großen straße könnte ich so machen, dass wenn eine Zahl 1 ist, eine zweite 2 sein muss, eine dritte 3 und so weiter bzw. wenn einer Zahl 2 ist, die 2. eine 3 und so weiter), jedoch kriege ich das nicht richtig gebacken, als Code aufzuschreiben. Meine Idee wäre gewesen, dass ich ein Prozedur habe, die diese Zahlen von klein auf groß speichert, dann könnte ich einfach mit dem kleinsten anfangen und gucken, ob die nächst größere +1 ist. und wenn das 4mal geklappt hab hab ich eine große Straße
Außerdem weiß ich nicht wie ich das mit den Würfeln machen soll. Ich kann das im internen mit einem "for x := 1 to 5 do x := random(6)+1" machen, aber wenn ich das als Text in einem Editfeld rausgeben will, krieg ich das nicht gebacken, da ich dieses zahl to zahl bei namen nicht benutzen kann. Meine Textfelder heißen sowas wie: wuerfel1, wuerfel2 und so. Könnte man das auch noch machen, dass ich mit einem "for z := 1 to 5 do wuerfel(z).text := inttostr(random(6)+1)" oder ähnlichem?
Ich hoffe ihr helft mir bei diesem Projekt bis zum Ende, danke 
|
|
koegi
      
Beiträge: 18
Win 7 64 bit
Delphi 2009 Professional
|
Verfasst: Sa 07.11.09 17:42
ChillerNWA hat folgendes geschrieben : | Guten Tag Volk,
nachdem ich schon einige kleinere Sachen gewagt habe, will ich mal etwas größeres probieren. Ich habe mir fest vorgenommen, ein Kniffel zu programmieren. Ich habe hier schon einige exemplare runtergeladen + code, jedoch blick ich da nicht sonderlich viel durch.
Mein Problem ist das abkürzen des Codes. Das Spiel zu programmieren ist nicht sonderlich schwierig, jedoch an Zeilen zu sparen schon. Ich könnte jedes Ereignis einzeln auftreten ( z.b. bei einer großen straße könnte ich so machen, dass wenn eine Zahl 1 ist, eine zweite 2 sein muss, eine dritte 3 und so weiter bzw. wenn einer Zahl 2 ist, die 2. eine 3 und so weiter), jedoch kriege ich das nicht richtig gebacken, als Code aufzuschreiben. Meine Idee wäre gewesen, dass ich ein Prozedur habe, die diese Zahlen von klein auf groß speichert, dann könnte ich einfach mit dem kleinsten anfangen und gucken, ob die nächst größere +1 ist. und wenn das 4mal geklappt hab hab ich eine große Straße
Außerdem weiß ich nicht wie ich das mit den Würfeln machen soll. Ich kann das im internen mit einem "for x := 1 to 5 do x := random(6)+1" machen, aber wenn ich das als Text in einem Editfeld rausgeben will, krieg ich das nicht gebacken, da ich dieses zahl to zahl bei namen nicht benutzen kann. Meine Textfelder heißen sowas wie: wuerfel1, wuerfel2 und so. Könnte man das auch noch machen, dass ich mit einem "for z := 1 to 5 do wuerfel(z).text := inttostr(random(6)+1)" oder ähnlichem?
Ich hoffe ihr helft mi[url]r bei diesem Projekt bis zum Ende, danke  |
Hallo, ChillerNWA!
Ich habe auch schon mal ein Kniffel-Programm geschrieben. Kannst Du Dir sogar runterladen (ohne Quelltext):
www.thkoegler.de/ unter Programmierung
Die Würfel, die ich da verwende (Delphi 3, Rx-Libs), sind auch als Feld angelegt. So, wie Du das oben beschreibst.
Delphi-Quelltext 1:
| var Wuerfel: array[1..5] if TRxDice; |
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25:
| for i:=1 to 5 do begin Wuerfel[i] := TRxDice.Create(frmKniffel); with Wuerfel[i] do begin Parent := frmKniffel;
Tag := 1;
top := 8; left := 104 * (i-1) + 8;
OnClick := RxDice1Click; OnStop := RxDice1Stop;
AutoStopInterval := 1000; end; end; |
In gleicher Weise sollte es mit Textfeldern oder Labeln funktionieren.
Zur Auswertung:
Ich habe eine Prozudur geschrieben, die mit case auf die gewählte Zeile prüft und die entsprechende Auswertung vornimmt. Dabei werden die Zeilen 1-6, 7 und 8 sowie 10 und 11 zusammengefasst ausgewertet. Mehr kürzen ist, glaube ich, nicht drin.
Wenn Du weitere Fragen hast, melde Dich gerne noch mal!
Viele Grüße
Thomas
|
|
ChillerNWA 
Hält's aus hier
Beiträge: 5
|
Verfasst: So 08.11.09 12:12
Das ist echt lieb von dir, ich werde mir das mal anschauen und weiterverfolgen
Super, echt nett, dass hier nicht wie bei manchen anderen Foren erstmal genörgelt wird vonwegen "Fang doch was anderes erstmal an" oder sowas  Irgendwie hat mich das jetzt total motiviert Informatik weiter zu machen
Gruß
Edit:
Könnte ich das nicht so machen:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7:
| procedure TForm1.Button1Click(Sender: TObject); var wuerfel : array[1..5] of TEdit; z : integer; begin for z := 1 to 5 do wuerfel[z].Text := inttostr(random(6)+1); end; |
Bei var hast du if TRxDice, bei mir hat er nur of angenommen.
Oder hab ich das komplett falsch verstanden?
Hmm, ich denke mal, es liegt dadran, dass z ein integer ist und der name ein string?
|
|
Lannes
      
Beiträge: 2352
Erhaltene Danke: 4
Win XP, 95, 3.11, IE6
D3 Prof, D4 Standard, D2005 PE, TurboDelphi, Lazarus, D2010
|
Verfasst: So 08.11.09 14:57
Hallo,
ChillerNWA hat folgendes geschrieben : | ...Irgendwie hat mich das jetzt total motiviert Informatik weiter zu machen
|
RxDice ist eine Fremd-Komponente aus der RX-Library: Link
Da Du sie nicht installiert hast, hat Delphi gemeckert.
ChillerNWA hat folgendes geschrieben : | | Hmm, ich denke mal, es liegt dadran, dass z ein integer ist und der name ein string? |
nein, es liegt daran das dem Array keine Edits zugeordnet sind. Zum Thema Komponenten in Arrays verwalten hat Christian S. eine Beitrag in der Delphi-Library hinterlegt( Link). Da wird ein dynamisches Array benutzt, aber für ein Kniffel-Spiel reicht ein statisches Array, die Anzahl der Würfel verändert sich ja nicht.
Die Variable z ist der Schleifenzähler, dieser wird genutzt zum Zugriff auf das Array über den Index.
Ich kann Dir mal den Delphi-Crashkurs empfehlen, den auch Christian S. erstellt hat.
_________________ MfG Lannes
(Nichts ist nicht Nichts) and ('' <> nil ) and (Pointer('') = nil ) and (@('') <> nil )
|
|
|