Hallo Leute!
Ich habe ein kleines Ablaufproblem.
Ich baue ein kleines Spiel nach, bei dem Rennautos auf einem Spielfeld Feld für Feld sich bewegen.
Wenn das eine Auto nun eine 6 würfelt, soll es 6 Felder nach vorne, aber bei jedem Feld überprüfen, ob vor dem Auto jemand ist. Deshalb habe ich es rekursiv programmiert.
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: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53: 54: 55: 56: 57: 58: 59: 60: 61: 62: 63: 64: 65: 66: 67: 68: 69: 70: 71: 72: 73: 74: 75: 76: 77: 78: 79: 80: 81: 82: 83: 84: 85: 86: 87: 88: 89: 90: 91: 92: 93: 94: 95: 96: 97: 98: 99: 100: 101: 102: 103: 104: 105: 106: 107: 108: 109: 110: 111: 112: 113: 114: 115: 116:
| procedure TBrett.setzen(spielerid,anzahl:integer); var nochzusetzen,nextfeld,i:integer; begin nochzusetzen:=anzahl;
sleep(1000); stats; if nochzusetzen > 0 then
begin nextfeld:=Spieler[spielerid].feld+1; sleep(50); stats; if rundenfelder = Spieler[spielerid].feld then nextfeld:=1; case Feld[nextfeld].besetzt of
0: begin dec(Feld[Spieler[spielerid].feld].besetzt); inc(Spieler[spielerid].feld); if Spieler[spielerid].feld = (rundenfelder+1) then begin inc(Spieler[spielerid].runde); Spieler[Spielerid].feld:=Spieler[Spielerid].feld-rundenfelder; end; inc(Feld[Spieler[spielerid].feld].besetzt);
if Spieler[spielerid].runde > runden then begin finish(spielerid); end else setzen(spielerid,nochzusetzen-1) end; 1: begin dec(Feld[Spieler[spielerid].feld].besetzt); inc(Spieler[spielerid].feld); if Spieler[spielerid].feld > (rundenfelder) then begin inc(Spieler[spielerid].runde); Spieler[Spielerid].feld:=Spieler[Spielerid].feld-rundenfelder; end; inc(Feld[Spieler[spielerid].feld].besetzt); if Spieler[spielerid].runde > runden then begin finish(spielerid); end;
if Spieler[spielerid].outofrace = 0 then begin wurftyp:=1;verteidigerwurf:=0;angreiferwurf:=0; end;
for i:=1 to 4 do begin if (Spieler[i].feld = Spieler[spielerid].feld) and (Spieler[i].id <> Spieler[spielerid].id) then begin angreifer:=spielerid; verteidiger:=i; showmessage('DUELL * AngreiferID' + IntToStr(angreifer) + '* VerteidigerID ' + IntToStr(verteidiger)); end;
end; end; 2: begin showmessage('musst leider stehenbleiben'); setzen(spielerid,0); end;
end
end else begin case Feld[Spieler[spielerid].feld].typ of Normal: begin end; Benzin: begin showmessage('- 1x Benzin'); dec(Spieler[spielerid].benzin); if Spieler[spielerid].benzin < 1 then ausfall(spielerid); end; Benzin2: begin showmessage('- 2x Benzin'); dec(Spieler[spielerid].benzin); dec(Spieler[spielerid].benzin); if Spieler[spielerid].benzin < 1 then ausfall(spielerid); end; VIP: begin showmessage('VIP-Feld'); wurftyp:=6; VIPfahrerID:=spielerID; end; SafetyCar:begin safetycarspielerid:=spielerid; showmessage('SafetyCar? Bei 9-12'); wurftyp:=3;
end; Unfall: begin showmessage('Unfall?'); wurftyp:=5; unfallfahrerID:=spielerID; end; Kurve: begin showmessage('Hochgeschwindigkeitskurve'); kurvenfahrerID:=spielerid; wurftyp:=4; end; Regenfeld:begin regen:=1; showmessage('Regen'); end;
end; end; end; |
Bisher war es so, dass das Auto halt auf seine entsprechende Entpositon direkt sprang. Aber nun, da ich den Grafikmodus programmiere, sollte man die einzelnen Feldsprünge auch sehen.
Also hab ich ziemlich an den Anfang "sleep(100); stats" eingefügt, wobei stats die Bildpositionen der Autos aktualisiert. Jedoch ist es so, dass bei 10 Feldern z.B. das Programm nun 1 Minute wartet und dann alles auf einmal macht, so wie es ja gerade nicht sein sollte.
Wenn ich an der selben Stelle ein "showmessage" zusätzlich noch einbinde, kommt das Messagefeld und ich sehe, dass die Autos sich wirklich bewegen. Aber ohne nicht!
Ich bin ratlos und über jeden Rat erfreut
Moderiert von
Gausi: Code- durch Delphi-Tags ersetzt.