Entwickler-Ecke
Sonstiges (Delphi) - Ein Anfänger wagt sich an Kniffel
ChillerNWA - Sa 07.11.09 16:21
Titel: Ein Anfänger wagt sich an Kniffel
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 :D
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 - 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 :D
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):
http://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 - 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 :D 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 - So 08.11.09 14:57
Hallo,
ChillerNWA hat folgendes geschrieben : |
...Irgendwie hat mich das jetzt total motiviert Informatik weiter zu machen :)
|
:zustimm:
RxDice ist eine Fremd-Komponente aus der RX-Library:
Link [
http://www.picsoft.de/compon.htm]
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 [
http://www.delphi-library.de/topic_Komponenten+dynamisch+im+Array+verwalten_43052.html]). 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 [
http://www.christian-stelzmann.de/index_tutorials_crashkurs.html] empfehlen, den auch
Christian S. erstellt hat.
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!