Hallo Leute!
Ich bin momentan die Türme von Hanoi am programieren, und zwar eine grafische Umsetzung (mit Labels). Die Standardversion, von wegen rekursives Denken und bla, läuft einwandfrei.
Da ich jetzt erst seit ca. einem Jahr mit Delphi (schulbedingt Lazarus) arbeite, hatte ich noch nichts mit Arrays zu tun. Ergo habe ich mich erstmal informiert und habe auch so weit alles verstanden.
Nun zum eigentlichen Problem: Bei den Türmen von Hanoi gibt es eine variable Anzahl an Scheiben.
Hier meine Umsetzung mit dynamischen Arrays:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10:
| var Form1: TForm1; scheibe: array of string; ... procedure TForm1.Button1Click(Sender: TObject); begin n:=strtoint(form1.edit1.text); runde:=0; setlength(scheibe, n); ... |
Die maximal mögliche Anzahl an Scheiben beträgt bei mir 7, also werden Arrays von scheibe[0] bis scheibe[7] "erstellt".
Die grafische Umsetzung sieht dann so aus:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9:
| ... scheibe[7]:='========'; scheibe[6]:='======='; scheibe[5]:='======'; scheibe[4]:='====='; scheibe[3]:='===='; scheibe[2]:='==='; scheibe[1]:='=='; ... |
Somit ist die oberste Scheibe scheibe[1].
Wenn Diese (oder die darauf folgenden Scheiben) auf ein anderes Feld gelegt wird, soll der vorherige Platz zu 'II' werden (klappt), und eben der neue Platz statt 'II' zu '==' werden.
Umsetzung:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10:
| procedure movetower (n: integer; afromfield, atofield, ausingfield: integer); begin if n > 1 then movetower (n - 1, afromfield, ausingfield, atofield); ... if atofield = 1 then begin inc(belA); tlabel(form1.findcomponent('A' + inttostr(belA))).caption := scheibe[n]; ... |
Jetzt wird aber das neu besetzte Feld statt '==' zu '========', also dem Wert von scheibe[7].
Ich habe bereits jegliche Kombinationen der Zahlen und Werte ausprobiert, doch es bleibt immer gleich.
Die darauf folgenden Scheiben werden übrigens immer um ein '=' kleiner; das ganz Spiel wird quasi umgekehrt gespielt.
Woran liegt das?