Hallo allerseits,
ich bin neu hier und habe ein problem bei einem Array, bin noch ein blutiger Anfänger.
Ich entwickle gerade ein Spiel bei dem man seine Einheiten rundenbasiert steuert. Die Einheiten können Minen legen. Sobald ein Gegner in einen Bereich um die Mine mit dem Abstand 24 kommt, soll die Mine explodieren und alle Gegner darin Schaden erhalten.
Danach soll logischerweise die Mine verschwinden und das Array soll entsprechend gekürzt werden.
Ich habe folgenden Code dafür.
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:
| procedure MineActive (); var i, j, a: integer; begin a:=0; for i:= 0 To High(ShapePlayerMines) do begin if (ShapePlayerMines[i].Visible = false) then begin a:=a+1; ShapePlayerMines[i].Free; for j:= i to (High(ShapePlayerMines)-1) do begin ShapePlayerMines[j]:=ShapePlayerMines[j+1]; end; end; end; SetLength(ShapePlayerMines,(Length(ShapePlayerMines)-a)); end; |
Die procedure, in der das Betreten der Mine überprüft wird.
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: 26: 27: 28: 29: 30:
| procedure CheckCPUandLifeOfPlayerUnits (); var i, a, Amount: integer; begin
for i:= 0 To High(ShapePlayerMines) do begin for a:= 0 To High(ShapeEnemies) do begin if ((ShapeEnemies[a].Left > ShapePlayerMines[i].Left - 24) AND (ShapeEnemies[a].Left < ShapePlayerMines[i].Left + 26) AND (ShapeEnemies[a].Top > ShapePlayerMines[i].Top - 24) AND (ShapeEnemies[a].Top < ShapePlayerMines[i].Top + 26)) then begin ShapePlayerMines[i].Visible:=false; EnemyBots[a, 2]:=EnemyBots[a, 2] - 1; CheckEnemyAlive (StrToInt(ShapePlayerMines[i].Hint)); end; end; end; MineActive (); end; |
Das Spiel funktioniert sehr lange gut. Irgendwann mal nachdem etwa 12 oder 13 Minen explodiert sind kommt plötzlich folgende Fehlermeldung:
'Access Violation at 00007469'
Danke im voraus.
