|
#1
|
||||
|
||||
Snake на Delphi
Есть программа Snake и управляется с помощью клавишь (a,s,d,w), можно ли сделать так чтобы червяк(или линия) сама двигалась по экрану без управления, как ему хочется. Вот текст программы:
Код:
unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, struct, ExtCtrls; type TForm1 = class(TForm) Timer1: TTimer; procedure Timer1Timer(Sender: TObject); procedure FormCreate(Sender: TObject); procedure FormDestroy(Sender: TObject); procedure FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); private { Private declarations } public { Public declarations } end; var Form1: TForm1; Snake : TSnake; Buffer : TBitMap; posX: word; implementation {$R *.dfm} procedure TForm1.Timer1Timer(Sender: TObject); var i,j:integer; newx,newy:integer; begin PatBlt(Buffer.Canvas.Handle, 0, 0, Buffer.Width, Buffer.Height, BLACKNESS); for i:=1 to AMaxX do for j:=1 to AMaxY do if gameA[i,j]=-1 then begin Buffer.Canvas.Rectangle(i*5,j*5,i*5+5,j*5+5); end; case Snake.Direction of 1: Snake.Move(Snake.First.X+1,Snake.First.Y); 2: Snake.Move(Snake.First.X,Snake.First.Y+1); 3: Snake.Move(Snake.First.X-1,Snake.First.Y); 4: Snake.Move(Snake.First.X,Snake.First.Y-1); end; Snake.Draw(Buffer.Canvas); BitBlt(Form1.Canvas.Handle,0,0,Form1.Width,Form1.Height,Buffer.Canvas.Handle,0,0,SRCCOPY); end; procedure TForm1.FormCreate(Sender: TObject); var i,j:integer; begin for i:=1 to AMaxX do for j:=1 to AMaxY do GameA[i,j]:=0; Buffer:=TBitMap.Create; Buffer.Width:=Form1.Width; Buffer.Height:=Form1.Height; Snake.Create(1,5,10,10,clYellow); end; procedure TForm1.FormDestroy(Sender: TObject); begin Snake.Destroy; end; procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); begin case key of 87: Snake.SetDirection(4); 68: Snake.SetDirection(1); 65: Snake.SetDirection(3); 83: Snake.SetDirection(2); 27: close; 32: Snake.Remove; 107: Snake.Add; else Form1.Caption:=IntToStr(key); end; end; end. Последний раз редактировалось Admin, 02.01.2011 в 17:43. |
#2
|
|||
|
|||
В таймере, перед собственно перемещением:
Код:
Snake.Direction := Random(4) + 1; |
#3
|
||||
|
||||
Я поставил вашу строчку после этого кода:
Код:
case Snake.Direction of 1: Snake.Move(Snake.First.X+1,Snake.First.Y); 2: Snake.Move(Snake.First.X,Snake.First.Y+1); 3: Snake.Move(Snake.First.X-1,Snake.First.Y); 4: Snake.Move(Snake.First.X,Snake.First.Y-1); end; Snake.Draw(Buffer.Canvas); |