unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ExtCtrls,xpMan;
type
TForm1 = class(TForm)
Timer1: TTimer;
GameBoard: TPaintBox;
Button1: TButton;
Button2: TButton;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Timer1Timer(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
private
procedure OnHotKey(var Msg: TWMHotKey); message WM_HOTKEY;
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
len, wid, speed, bX, bY, frX, frY : integer;
SnakeDirR, SnakeDirD, SnakeDirL, SnakeDirU : boolean;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
begin
wid := 10;
len := 90;
bX := 200;
bY := 50;
frX := bX + len;
frY := bY + wid;
speed := 10;
GameBoard.Canvas.Brush.Color := rgb(0,0,0);
GameBoard.Canvas.Rectangle(0,0,GameBoard.Width,GameBoard.Height);
GameBoard.Canvas.Brush.Color := rgb(0,255,8);
GameBoard.Canvas.Rectangle(bX,bY,frX,frY);
Form1.SetFocus;
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
if Timer1.Enabled then Timer1.Enabled := false else Timer1.Enabled := true;
Form1.SetFocus;
end;
procedure TForm1.Timer1Timer(Sender: TObject);
begin
if SnakeDirR then
begin
GameBoard.Canvas.Brush.Color := rgb(0,0,0);
GameBoard.Canvas.Rectangle(0,0,GameBoard.Width,GameBoard.Height);
GameBoard.Canvas.Brush.Color := rgb(0,255,8);
GameBoard.Canvas.Rectangle(bX,bY,frX,frY);
GameBoard.Canvas.Rectangle(bX-1,bY,bX,frY);
bX := bX + speed;
frX := bX + len;
frY := bY + wid;
end;
if SnakeDirD then
begin
GameBoard.Canvas.Brush.Color := rgb(0,0,0);
GameBoard.Canvas.Rectangle(0,0,GameBoard.Width,GameBoard.Height);
GameBoard.Canvas.Brush.Color := rgb(0,255,8);
GameBoard.Canvas.Rectangle(bX,bY,frX,frY);
GameBoard.Canvas.Rectangle(bX-1,bY,bX,frY);
bY := bY + speed;
frX := bX + len;
frY := bY + wid;
end;
if SnakeDirL then
begin
GameBoard.Canvas.Brush.Color := rgb(0,0,0);
GameBoard.Canvas.Rectangle(0,0,GameBoard.Width,GameBoard.Height);
GameBoard.Canvas.Brush.Color := rgb(0,255,8);
GameBoard.Canvas.Rectangle(bX,bY,frX,frY);
GameBoard.Canvas.Rectangle(bX-1,bY,bX,frY);
bX := bX - speed;
frX := bX + len;
frY := bY + wid;
end;
if SnakeDirU then
begin
GameBoard.Canvas.Brush.Color := rgb(0,0,0);
GameBoard.Canvas.Rectangle(0,0,GameBoard.Width,GameBoard.Height);
GameBoard.Canvas.Brush.Color := rgb(0,255,8);
GameBoard.Canvas.Rectangle(bX,bY,frX,frY);
GameBoard.Canvas.Rectangle(bX-1,bY,bX,frY);
bY := bY - speed;
frX := bX + len;
frY := bY + wid;
end;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
RegisterHotKey(Handle,39, 0,39);
RegisterHotKey(Handle,40, 0,40);
RegisterHotKey(Handle,37, 0,37);
RegisterHotKey(Handle,38, 0,38);
end;
procedure TForm1.OnHotKey(var Msg: TWMHotKey);
begin
case msg.HotKey of
39 : begin SnakeDirR:=true; SnakeDirD:=false; SnakeDirL:=false; SnakeDirU:=false; end;
40 : begin SnakeDirD:=true; SnakeDirL:=false; SnakeDirU:=false; SnakeDirR:=false; end;
37 : begin SnakeDirL:=true; SnakeDirD:=false; SnakeDirR:=false; SnakeDirU:=false; end;
38 : begin SnakeDirU:=true; SnakeDirD:=false; SnakeDirL:=false; SnakeDirR:=false; end;
end;
end;
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
UnregisterHotKey(Handle,37);
UnregisterHotKey(Handle,38);
UnregisterHotKey(Handle,39);
UnregisterHotKey(Handle,40);
end;
end.