Разработка компьютерной игры "Змейка"
Курсовой проект - Компьютеры, программирование
Другие курсовые по предмету Компьютеры, программирование
°"
При выборе вкладки "Правила игры" на экране появляется соответствующая информация (Рис. 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;