Přidat otázku mezi oblíbenéZasílat nové odpovědi e-mailem Delphi - jak naprogramovat hru "Hada"?

procedure DrawSnake;
var
i : integer;
Begin
if direction = dnone then
exit;
Form1.Canvas.Brush.Color := pfcolor;
Form1.Canvas.Pen.Color := pfcolor;
Form1.Canvas.Rectangle(snake[snakelength - 1].X, snake[snakelength - 1].Y,
snake[snakelength - 1].X + snakewidth, snake[snakelength - 1].Y + snakewidth);
For i := snakelength - 1 downto 1 do
snake[i] := snake[i-1];
snake[0]:= snake[1];
case direction of
dup : dec(snake[0].y, snakewidth);
ddown : inc(snake[0].y, snakewidth);
dleft : dec(snake[0].x, snakewidth);
dright : inc(snake[0].x, snakewidth);
end;
if HitFood then
begin
inc(score, 5);
inc(snakelength, snakegrow);
setlength(snake, snakelength);
for i := 1 to snakegrow do
snake[snakelength-i] := snake[(snakelength-snakegrow)-1];
PlaceFood;
end;
if HitWall then
begin
EndGame;
ResetGame;
end;
Form1.Canvas.Brush.Color := snakecolor;
Form1.Canvas.Pen.Color := snakecolor;
case direction of
dup : Form1.Canvas.Rectangle(snake[0].X+1, snake[0].Y+1,
snake[0].X + snakewidth-1, snake[0].Y + snakewidth+1);
ddown : Form1.Canvas.Rectangle(snake[0].X+1, snake[0].Y-1,
snake[0].X + snakewidth-1, snake[0].Y + snakewidth-1);
dleft : Form1.Canvas.Rectangle(snake[0].X+1, snake[0].Y+1,
snake[0].X + snakewidth+1, snake[0].Y + snakewidth-1);
dright : Form1.Canvas.Rectangle(snake[0].X-1, snake[0].Y+1,
snake[0].X + snakewidth-1, snake[0].Y + snakewidth-1);
end;
End;
// DrawPlayField: Draws the playfield (the area where the snake navigates on)
procedure DrawPlayfield;
begin
Form1.Canvas.Brush.Color := pfcolor;
Form1.Canvas.Pen.Color := pfcolor;
Form1.Canvas.Rectangle(pfposition.x, pfposition.y, pfdimention.x + pfposition.x, pfdimention.y + pfposition.y);
end;
// ResetGame: Resets the game; resets the snake and score
Procedure ResetGame;
var
i : integer;
Begin
form1.snaketimer.enabled := false;
randomize;
snake := nil;
snakelength := 10;
setlength(snake, snakelength);
snake[0].x := pfposition.x + (pfdimention.x div 2) - (snakewidth div 2);
snake[0].y := pfposition.y + (pfdimention.y div 2) - (snakewidth div 2);
while ((pfdimention.x-(snake[0].x-pfposition.x)) mod snakewidth <> 0) do
inc(snake[0].x);
while ((pfdimention.y-(snake[0].y-pfposition.y)) mod snakewidth <> 0) do
inc(snake[0].y);
for i := 1 to snakelength - 1 do
snake[i] := snake[0];
score := 0;
food.x := 0;
food.y := 0;
direction := dright;
olddirection := direction;
DrawPlayfield;
DrawSnake;
PlaceFood;
form1.snaketimer.Interval := speed;
form1.snaketimer.enabled := true;
End;
// EndGame: Stops the snake timer and free memory allocated by the snake array
Procedure EndGame;
Begin
form1.snaketimer.enabled := false;
snake := nil;
End;
// snaketimerTimer: Updates the old direction and draws the snake
procedure TForm1.snaketimerTimer(Sender: TObject);
begin
olddirection := direction;
DrawSnake;
end;
// FormKeyPress: Handles the key input (#32 = space, stops the snake movement)
procedure TForm1.FormKeyPress(Sender: TObject; var Key: Char);
begin
case key of
'w', 'W': if olddirection <> ddown then direction := dup;
's', 'S': if olddirection <> dup then direction := ddown;
'a', 'A': if olddirection <> dright then direction := dleft;
'd', 'D': if olddirection <> dleft then direction := dright;
#32: direction := dnone;
end;
end;
// FormPaint: Draws the form and resets the game
procedure TForm1.FormPaint(Sender: TObject);
begin
form1.ClientWidth := pfdimention.x + (pfposition.x * 2);
form1.ClientHeight := pfdimention.y + (pfposition.y * 2);
form1.Color := clBlack;
ResetGame;
end;
end.

Reakce na odpověď

1 Zadajte svou přezdívku:
2 Napište svou odpověď:
3 Pokud chcete dostat ban, zadejte libovolný text:

Zpět do poradny