Разработка компьютерной игры "Змейка"

Курсовой проект - Компьютеры, программирование

Другие курсовые по предмету Компьютеры, программирование

°"

 

При выборе вкладки "Правила игры" на экране появляется соответствующая информация (Рис. 8.4).

 

Рис. 8.4 - Правила игры

 

После нажатия любой клавиши мы вернулись обратно в меню "Справка". При выборе вкладки "Разработчик", выводится соответствующая информация построчно с некоторой задержкой (Рис. 8.5).

 

Рис. 8.5 - Информация о разработчике

 

После нажатия любой клавиши мы вернулись опять же в меню "Справка". После выбора вкладки "Назад" мы возвращаемся в главное меню. Выбираем вкладку "Играть". Появляется меню выбора уровня сложности (Рис.8.6).

 

Рис. 8.6 - Выбор уровня сложности

 

После того, как мы выберем уровень, появится игровое поле и после нажатия клавиш управления начнется сам игровой процесс (Рис. 8.7).

 

Рис.8.7 - Игровой процесс

 

После того как игрок проиграет (столкнется со границей игрового поля или с "собственным хвостом") появится соответствующее сообщение (Рис.8.8).

 

Рис.8.8 - Конец игры

 

Далее, в случае того, если был набран результат выше результата, который занимал 10 место в списке рейтинга, вам предложат ввести своё имя (Рис.8.9).

 

Рис.8.9 - Ввод имени для сохранения результатов

 

Ваше имя можно будет увидеть в списке рейтинга при переходе по вкладке "Рекорды" главного меню. Ваше имя будет стоять на соответствующей, занятой вами, позиции (Рис. 8.10).

 

Рис. 8.10 - Вкладка "Рекорды" (После сохранения нового результата)

 

Выход из программы осуществляется кнопкой главного меню "Выход".

Заключение

 

В ходе выполнения курсовой работы были изучены основы программирования на языке Pascal. Написание программы способствовало закреплению теоретического материала на практике.

Игра "Змейка" является логически завершенной игрой. Также возможны изменения и добавления некоторых моментов в геймплей, такие как мультиплеер и добавление на игровом поле препятствий.

 

Текст программы

 

Program Sme;

uses crt;

type

reca=record

name:string[10];

resultat:integer;

end;

var

aa:reca;

Xz,Yz:array [1..40] of byte;

us:array [1..11] of reca;

i,j,a,k,k2,kk,och,z:integer;

H,W,hl,hr,Ww,Wn,PlayE,Play:ShortInt;

X1,Y1,x,y,d:byte;

Kno,onk:Char;

SL,Schot:Word;

Ax,Ay,Bx,By,Ex,Ey,as,sa:Byte;

f1:text;

f2:file of integer;

f3:text;

f4:text;

namen:string[10];

resul:string[20];

prav:string;

q,wq,qq,qw:string[15];

 

Procedure stolknovenie;

begin

for i:=2 to d-2 do

begin

if (Xz[i]=Xz[i+2]) and (Yz[i]=Yz[i+2]) then

as:=0 else as:=1;

sa:=sa*as;

end;

for i:=1 to d-3 do

begin

if (sa<>0) and (xz[1]=xz[i+3]) and (yz[1]=yz[i+3]) then Play:=0;

end;

if (Xz[1]=3) or (Xz[1]=57) or (Yz[1]=3) or (Yz[1]=22) Then Play:=0;

end;

 

Procedure Ramka(Xr,Yr:Byte; tt: string; c:byte);

begin

TextColor(c);

GotoXY (Xr,Yr+1);

write (tt);

For i:=Xr to Xr+20 do

begin

GotoXY (i,Yr);

write (*);

GotoXY (i,Yr+2);

write (*);

end;

For i:=Yr to Yr+2 do

begin

GotoXY (Xr,i);

write (*);

GotoXY (Xr+20,i);

write (*);

end;

end;

 

Procedure Izm(vv:byte);

Begin

Ax:=Bx; Ay:=By;

Bx:=Xz[vv]; By:=Yz[vv];

Xz[vv]:=Ax; Yz[vv]:=Ay;

End;

 

Procedure menu2 (q,qq,wq,qw:string);

begin

Clrscr;

TextBackground (0);

TextColor (15);

For X1:=25 to 55 do

Begin

GotoXY (X1,4);

Write (*);

GotoXY (X1,22);

Write (*);

end;

For Y1:=4 to 22 do

begin

GotoXY (25,Y1);

Write (*);

GotoXY (55,Y1);

Write (*);

end;

GotoXY (31,7);

Write (q);

K2:=0;

repeat

K2:=k2+kk;

kk:=0;

If k2=0 Then Ramka (30,10,qq,128) else

Ramka (30,10,qq,15);

If k2=1 then Ramka (30,14,wq,128) else

Ramka (30,14,wq,15);

IF K2=2 Then Ramka (30,18,qw,128) else

Ramka (30,18,qw,15);

Kno:=ReadKey;

If Kno=#80 then Begin if k2<2 then kk:=1 else kk:=0; end else

if Kno=#72 then Begin if k2>0 then kk:=-1 else kk:=0; end;

until Kno=chr(13);

end;

 

Procedure Spravka;

begin

menu2( СПРАВКА, ПРАВИЛА ИГРЫ , РАЗРАБОТЧИК , НАЗАД );

if k2=0 then

begin

clrscr;

assign(f4,d:\kkk\pravila.pas);

reset(f4);

i:=3;

While not EOF(f4) do

begin

GotoXY(3,i);

i:=i+2;

readln(f4,prav);

writeln(prav);

end;

readln;

end;

if k2=1 then

begin

clrscr;

TextBackground(0);

TextColor (4);

For X1:=3 to 77 do

Begin

GotoXY (x1,2);

Write (*);

GotoXY (X1,23);

write (*);

end;

For Y1:=2 to 23 do

Begin

GotoXY (3,Y1);

Write (*);

GotoXY (77,y1);

Write (*);

end;

assign(f4,d:\kkk\avtor.pas);

reset(f4);

d:=7;

While not EOF (f4) do

begin

textcolor(10);

readln(f4,prav);

GotoXY (19,d);

Write (prav);

d:=d+2;

for i:=1 to 4 do

Delay (59000);

end;

close(f4);

readln;

end;

if k2=2 then

TextBackground (0);

textcolor(15);

end;

 

Procedure Resultat;

begin

clrscr;

reset(f1);

for i:=1 to 10 do

begin

readln(f1,us[i].name);

end;

close(f1);

reset(f2);

for i:=1 to 10 do

read(f2,us[i].resultat);

close(f2);

gotoXy(25,12);

If schot>us[10].resultat then

begin

writeln(Ваш результат составил: , schot);

gotoxy(30,13);

writeln(Введите ваше имя...);

gotoxy(36,14);

read(namen);

end

else

begin

GotoXY(23,13);

writeln(Вы не побили самый худший результат!!! :();

GotoXY(13,14);

writeln(Но не огорчайтесь!!! Вы можете просто написать ваше имя!!!))));

GotoXY(36,15);

readln(namen);

end;

us[11].name:=namen;

us[11].resultat:=schot;

for i:=1 to 11 do

for j:=2 to 11 do

begin

if us[j].resultat>us[j-1].resultat then

begin

aa:=us[j-1];

us[j-1]:=us[j];

us[j]:=aa;

end;

end;

rewrite(f1);

for i:=1 to 10 do

begin

write(f1,us[i].name);

writeln(f1, );

end;

close(f1);

rewrite(f2);

for i:=1 to 10 do

write(f2,us[i].resultat);

close(f2);

rewrite(f3);

for i:=1 to 10 do

writeln(f3,i,: ,us[i].resultat, ,us[i].name);

close(f3);

end;

 

begin

assign (f3,d:\kkk\itog.txt);

assign (f1,d:\kkk\imena.txt);

assign (f2,d:\kkk\rec.dat);

repeat

repeat

Clrscr;

TextBackground (0);

TextColor (15);

For X1:=25 to 55 do

Begin

GotoXY (X1,4);

Write (*);

GotoXY (X1,22);

Write (*);

end;