Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
11
Добавлен:
01.05.2014
Размер:
9.02 Кб
Скачать
unit Core;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ExtCtrls, StdCtrls, ComCtrls, CustomizeDlg, Menus;

type
TForm1 = class(TForm) //объявление типов и процедур
Timer1: TTimer;
OpenDialog1: TOpenDialog;
MainMenu1: TMainMenu;
N1: TMenuItem;
N2: TMenuItem;
N3: TMenuItem;
N4: TMenuItem;
N5: TMenuItem;
N6: TMenuItem;
N7: TMenuItem;
N8: TMenuItem;
procedure FormCreate(Sender: TObject);
procedure draw (x,y:integer);
procedure resset;

procedure Timer1Timer(Sender: TObject);
procedure load(Sender: TObject);
procedure save(Sender: TObject);
procedure FormKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
procedure Newgame(Sender: TObject);
procedure N7Click(Sender: TObject);
procedure N8Click(Sender: TObject);
procedure N5Click(Sender: TObject); private

public

end;

var //объявление глобальных переменных
Form1: TForm1;
spd,rot,stop,xod:boolean;
key1,bomtime,speed,x,y,maxx,maxy:integer;
s:string;
f:textfile;
massiv:array [0..50,1..2]of integer;
spider_cord,del,bom: array [1..4] of integer;
bodyend,bodyend2,bodyend3,bodyend1,body,head4,head1,head2,head3,spider,head12,head22,head32,head42:tbitmap;


implementation

uses Unit2;



{$R *.dfm}
{$R snake.res}

procedure TForm1.draw(x, y: integer); // процедура прорисовки экрана
var
i,z,z1,x1,y1,s:integer;
begin

if x=-20 then x:=maxx-20;
if x=maxx then x:=0;


if y=-20 then y:=maxy-60;
if y= maxy-40 then y:=0;

if spider_cord[2]=-20 then
spider_cord[2]:=maxy-60;
if spider_cord[2]=maxx -40 then spider_cord[2]:=0;

if spider_cord[1]=-20 then spider_cord[1]:=maxx-20;
if spider_cord[1]= maxx then spider_cord[1]:=0;


for i:=2 to massiv[0,1]-1 do if (massiv[i,1]=x)and(massiv[i,2]=y) then begin
Timer1.Interval:=10000;
showmessage('Игра закончена вы набрали: '+inttostr(speed)+' очков');
resset;

end;
i:=massiv[0,1];


if spd then begin
canvas.Rectangle(spider_cord[1],spider_cord[2],spider_cord[1]+20,spider_cord[2]+20);
s:=random(maxx-10);
spider_cord[1]:=s-s mod 20;
s:=random(maxy-70);
spider_cord[2]:=s-s mod 20;
spd:=false;
end;
del[1]:=massiv[massiv[0,1]-1,1];
del[2]:=massiv[massiv[0,1]-1,2];
del[3]:=massiv[massiv[0,1],1];
del[4]:=massiv[massiv[0,1],2];
repeat
massiv[i,1]:=massiv[i-1,1];
massiv[i,2]:=massiv[i-1,2];
dec(i);
until i=1;
massiv[1,1]:=x;
massiv[1,2]:=y;
if (x=spider_cord[1])and(spider_cord[2]=y) then begin
spd:=true;
inc(massiv[0,1]);
Timer1.Interval:=Timer1.Interval-2;
inc(speed);
i:=random(maxx-10);

i:=random(maxy-70);
end;
canvas.Draw(spider_cord[1],spider_cord[2],spider);

if massiv[1,1]=massiv[2,1]+20 then z:=1;
if massiv[1,1]=massiv[2,1]-20 then z:=2;
if massiv[1,2]=massiv[2,2]+20 then z:=3;
if massiv[1,2]=massiv[2,2]-20 then z:=4;
if massiv[massiv[0,1],1]=massiv[massiv[0,1]-1,1]+20 then z1:=1;
if massiv[massiv[0,1],1]=massiv[massiv[0,1]-1,1]-20 then z1:=2;
if massiv[massiv[0,1],2]=massiv[massiv[0,1]-1,2]-20 then z1:=3;
if massiv[massiv[0,1],2]=massiv[massiv[0,1]-1,2]+20 then z1:=4;
for i:=1 to massiv[0,1] do begin
if i=1 then begin
case z of
1: if rot then canvas.Draw(massiv[i,1],massiv[i,2],head3) else canvas.Draw(massiv[i,1],massiv[i,2],head32);
2: if rot then canvas.Draw(massiv[i,1],massiv[i,2],head1) else canvas.Draw(massiv[i,1],massiv[i,2],head12);
3: if rot then canvas.Draw(massiv[i,1],massiv[i,2],head4) else canvas.Draw(massiv[i,1],massiv[i,2],head42);
4: if rot then canvas.Draw(massiv[i,1],massiv[i,2],head2) else canvas.Draw(massiv[i,1],massiv[i,2],head22);
end;
end;
if (i<>1)and(i<>massiv[0,1]) then canvas.Draw(massiv[i,1],massiv[i,2],body);
if i=massiv[0,1]then begin
canvas.Rectangle(del[1],del[2],del[1]+20,del[2]+20);
case z1 of
1: canvas.Draw(massiv[i,1],massiv[i,2],bodyend);
2: canvas.Draw(massiv[i,1],massiv[i,2],bodyend2);
3: canvas.Draw(massiv[i,1],massiv[i,2],bodyend3);
4: canvas.Draw(massiv[i,1],massiv[i,2],bodyend1);
end;
end;
end;





if rot then rot:=false else rot:=true;
canvas.Rectangle(del[3],del[4],del[3]+20,del[4]+20);




end;

procedure TForm1.FormCreate(Sender: TObject); //инициализация, загрузка ресурсов
var
i:integer;
begin
randomize;

form1.width:=Screen.Width;
form1.Height:=Screen.Height;

spd:=true;
rot:=true;
speed:=0;
fillchar(massiv,sizeof(massiv),-10);
massiv[0,1]:=3;
massiv[1,1]:=200;
massiv[1,2]:=100;
massiv[2,1]:=220;
massiv[2,2]:=100;
massiv[3,1]:=240;
massiv[3,2]:=100;
canvas.Pen.Color:=color;
body:=tbitmap.Create;
body.LoadFromResourceName(hinstance,'body');
body.Transparent:=true;
head1:=tbitmap.Create;
head1.LoadFromResourceName(hinstance,'head1');
head1.Transparent:=true;
head2:=tbitmap.Create;
head2.LoadFromResourceName(hinstance,'head2');
head2.Transparent:=true;
head3:=tbitmap.Create;
head3.LoadFromResourceName(hinstance,'head3');
head3.Transparent:=true;
head4:=tbitmap.Create;
head4.LoadFromResourceName(hinstance,'head4');
head4.Transparent:=true;
bodyend:=tbitmap.Create;
bodyend.LoadFromResourceName(hinstance,'bodyend4');
bodyend.Transparent:=true;
bodyend1:=tbitmap.Create;
bodyend1.LoadFromResourceName(hinstance,'bodyend1');
bodyend1.Transparent:=true;
bodyend2:=tbitmap.Create;
bodyend2.LoadFromResourceName(hinstance,'bodyend2');
bodyend2.Transparent:=true;
bodyend3:=tbitmap.Create;
bodyend3.LoadFromResourceName(hinstance,'bodyend3');
bodyend3.Transparent:=true;
spider:=tbitmap.Create;
spider.LoadFromResourceName(hinstance,'spider');
spider.Transparent:=true;
head12:=tbitmap.Create;
head12.LoadFromResourceName(hinstance,'head12');
head12.Transparent:=true;
head22:=tbitmap.Create;
head22.LoadFromResourceName(hinstance,'head22');
head22.Transparent:=true;
head42:=tbitmap.Create;
head42.LoadFromResourceName(hinstance,'head42');
head42.Transparent:=true;
head32:=tbitmap.Create;
head32.LoadFromResourceName(hinstance,'head32');
head32.Transparent:=true;

n4.Enabled:=false;
n5.Enabled:=false;
maxx:=screen.Width- screen.Width mod 20 ;
maxy:=screen.Height-screen.Height mod 20;


end;



procedure TForm1.resset; //процедура сброса параметров
var
i:integer;
begin
timer1.Interval:=100;
key1:=2;
canvas.Rectangle(0,0,screen.Width,screen.Height);
massiv[0,1]:=3;
massiv[1,1]:=200;
massiv[1,2]:=100;
massiv[2,1]:=220;
massiv[2,2]:=100;
massiv[3,1]:=240;
massiv[3,2]:=100;
draw(180,100);
for i:=4 to 50 do begin
massiv[i,1]:=0;
massiv[i,2]:=0;
end;
draw(180,100);
end;

procedure TForm1.Timer1Timer(Sender: TObject); // Процедура таймера
begin

case key1 of
1: draw(massiv[1,1],massiv[1,2]-20);
2: draw(massiv[1,1]-20,massiv[1,2]);
3: draw(massiv[1,1],massiv[1,2]+20);
4: draw(massiv[1,1]+20,massiv[1,2]);
end;
end;
procedure TForm1.load(Sender: TObject); //Загрузка
var
log1:string;
i:integer;
begin
for i:=4 to 50 do begin
massiv[i,1]:=0;
massiv[i,2]:=0;
end;
Timer1.Enabled:=false;
openDialog1.Execute;
if openDialog1.FileName<>'' then
begin
assignfile(f,openDialog1.FileName);
reset(f);
readln(f,speed);
readln(f,massiv[0,1]);
for i:=1 to massiv[0,1] do begin
readln(f,massiv[i,1]);
readln(f,massiv[i,2]);
end;
readln(f,key1);
closefile(f);
canvas.Rectangle(0,0,2500,2000);
timer1.Interval:=100-speed*2;
end;
timer1.Enabled:=true;
end;

procedure TForm1.save(Sender: TObject); // Сохранение
var
i,i1: integer;

begin
timer1.Enabled:=false;
OpenDialog1.Execute;
if OpenDialog1.FileName<>'' then
begin
assignfile(f,OpenDialog1.FileName);
rewrite(f);
writeln(f,speed);
writeln(f,massiv[0,1]);
for i:=1 to massiv[0,1] do begin
writeln(f,massiv[i,1]);
writeln(f,massiv[i,2]);
end;
writeln(f,key1);
closefile(f);
end;
timer1.Enabled:=true;
end;

procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word; //метод обработки нажатия клавиш
Shift: TShiftState);
begin
case key of
38: if key1<>3 then key1:=1;
37: if key1<>4 then key1:=2;
40: if key1<>1 then key1:=3;
39: if key1<>2 then key1:=4;
32: if stop then begin
timer1.Enabled:=true; stop:=false; end
else begin Timer1.Enabled:=false; stop:=true;
end;
end;
end;

procedure TForm1.Newgame(Sender: TObject); //Новая игра
begin
Timer1.Enabled:=true;
resset;
n4.Enabled:=true;
n5.Enabled:=true;

end;

procedure TForm1.N7Click(Sender: TObject); //Справка
begin
form2.Show;
end;

procedure TForm1.N8Click(Sender: TObject); //Выход
begin
Application.Terminate;
end;

procedure TForm1.N5Click(Sender: TObject);
begin
if stop then begin
timer1.Enabled:=true;
stop:=false;
N5.Caption:='Пауза' end
else begin
Timer1.Enabled:=false;
stop:=true;
n5.Caption:='Продолжить';
end;

end;


end.


Соседние файлы в папке Игра змейка Delphi