Смекни!
smekni.com

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

В программе широко использовались такие функции как Readkey (), GotoXY, а также циклы и оператор условия.

8. Тестирование и анализ результатов

При тестировании программы был произведен подробный анализ каждой подпрограммы.

При запуске программы появилось главное меню со вкладками "Играть", "Рекорды", "Справка", "Выход" (Рис.8.1).

Рис. 8.1 - Главное меню

Выбираем меню "Рекорды". Перед нами появляется 10 лучших игроков с набранным ими результатом (Рис.8.2).

Рис. 8.2 - Вкладка "Рекорды"

После нажатия любой кнопки мы возвращаемся в главное меню. Выбираем меню "Справка". Перед нами появляется Меню 2-го уровня - "Справка" со вкладками "Правила игры", "Разработчик" и "Назад" (Рис.8.3).

Рис. 8.3 - Меню "Справка"

При выборе вкладки "Правила игры" на экране появляется соответствующая информация (Рис. 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:&bsol;kkk&bsol;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:&bsol;kkk&bsol;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:&bsol;kkk&bsol;itog.txt');

assign (f1,'d:&bsol;kkk&bsol;imena.txt');

assign (f2,'d:&bsol;kkk&bsol;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;

For Y1:=4 to 22 do

begin

GotoXY (25,Y1);

Write ('*');

GotoXY (55,Y1);

Write ('*');

end;

K:=0;

Repeat

k:=k+kk;

kk:=0;

If k=0 Then Ramka (30,6,' ИГРАТЬ ',128) else

Ramka (30,6,' ИГРАТЬ ',15);

If k=1 Then Ramka (30,10,' РЕКОРДЫ ',128) else

Ramka (30,10,' РЕКОРДЫ ',15);

If k=2 then Ramka (30,14,' СПРАВКА ',128) else

Ramka (30,14,' СПРАВКА ',15);

If k=3 then Ramka (30,18,' ВЫХОД ',128) else

Ramka (30,18,' ВЫХОД ',15);

Kno:=ReadKey;

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

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

until Kno=chr(13);

If k=1 then

begin

Clrscr;

GotoXy(36,5);

writeln('РЕКОРДЫ');

reset (f3);

for i:=1 to 10 do

begin

readln(f3,resul);

GotoXY (32,7+i);

Write(resul);

end;

close(f3);

Readln;

end;

If k=2 then

repeat

spravka;

until k2=2;

If k=3 then

exit;

until (k=3) or (k=0);

If k=0 then begin

menu2 (' УРОВЕНЬ СЛОЖНОСТИ',' ГЛИСТ ',' ЗМЕЯ ',' АНАКОНДА ');

end;

If K2=0 then begin Sl:=40000; och:=25; d:=5 end else if k2=1 then begin

Sl:=30000; och:=50; d:=10 end else begin Sl:=20000; och:=100; d:=15 end;

TextBackground (1);

Textcolor (5);

clrscr;

schot:=0; playE:=1;

Xz[1]:=30;

Yz[1]:=13;

For i:=2 to 40 do

begin

Xz[i]:=Xz[1];

Yz[i]:=Yz[1];

end;

For X1:=3 to 57 do

Begin

GotoXY (x1,2);

Write ('*');

GotoXY (X1,23);

write ('*');

end;

For Y1:=2 to 23 do

Begin

GotoXY (3,Y1);

Write ('*');

GotoXY (57,y1);

Write ('*');

end;

Play:=1;

GotoXY(60,4);

write('СЧЕТ: ');

GotoXY(60,6);

write('Рост змеи: ');

gotoXY(60,8);

write('Лучшие результаты:');

reset(f3);

for i:=1 to 3 do

begin

readln(f3,resul);

GotoXY (60,9+i);

Write(resul);

end;

close(f3);

Repeat

If play=1 then begin

TextColor (4);

Ax:=xz[1]; Ay:=Yz[1];

Xz[1]:=Xz[1]+H; Yz[1]:=Yz[1]+W;

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

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

For i:=3 to 40 do

izm(i);

GotoXY (Xz[1],Yz[1]);

write(chr(1));

For i:=2 to d do

begin

GotoXY (Xz[i],Yz[i]);

Write(chr(4));

end;

Delay(SL);

Textcolor (1);

GotoXY (Xz[1],Yz[1]);

write(chr(1));

For i:=2 to 40 do

begin

GotoXY (Xz[i],Yz[i]);

Write(chr(4));

end;

randomize;

if PlayE=1 then

begin

Ex:=Random(54)+4;

Ey:=random(18)+4;

If (K2=0) and (schot<>0) and ((schot mod 75)=0) then

d:=d+1;

if (k2=0) and (schot<>0) and ((schot mod 150)=0) then

Sl:=Sl-500;

If (K2=1) and (schot<>0) and ((schot mod 150)=0) then

d:=d+1;

if (k2=1) and (schot<>0) and ((schot mod 500)=0) then

Sl:=Sl-500;

If (K2=2) and (schot<>0) and ((schot mod 500)=0) then

d:=d+1;

if (k2=2) and (schot<>0) and ((schot mod 1000)=0) then

Sl:=Sl-500;

PlayE:=0; end;

Textcolor (6);

GotoXY(Ex,Ey);

write(chr(6));

if (Xz[1]=Ex) and (Yz[1]=Ey) then

begin

schot:=schot+och;

PlayE:=1;

Textcolor (1);

GotoXy(Ex,Ey);

write (' ');

end;

Case Kno of

#72: Begin W:=-1; H:=0; end;

#80: Begin W:=1; H:=0; end;

#77: Begin W:=0; H:=1; end;

#75: Begin W:=0; h:=-1; end;

end;

If Keypressed=true then begin onk:=readkey;Kno:=Readkey; end;

end;

GotoXY(66,4);

write(Schot);

GotoXY(70,6);

write(d);

sa:=10;

stolknovenie;

until Play=0;

If play=0 then begin

TextBackground (0);

Textcolor (15);

clrscr;

GotoXY(6,8);

write(' ***** ***** * * ******* ***** ** ** ******* ****** ');

GotoXY(6,9);

write('******* ******* ** ** ******* ******* ** ** ******* *******');

GotoXY(6,10);

write('** ** ** *** *** ** ** ** ** ** ** ** **');

GotoXY(6,11);

write('** ** ** **** **** ** ** ** ** ** ** ** **');

GotoXY(6,12);

write('** ** ** ** *** ** **** ** ** ** ** **** ** **');

GotoXY(6,13);

write('** ** ******* ** * ** **** ** ** ** ** **** ****** ');

GotoXY(6,14);

write('** *** ******* ** ** ** ** ** ** ** ** **** ');

GotoXY(6,15);

write('** ** ** ** ** ** ** ** ** ** ** ** ** ** ');

GotoXY(6,16);

write('******* ** ** ** ** ******* ******* *** ******* ** ** ');

GotoXY(6,17);

write(' ***** ** ** ** ** ******* ***** * ******* ** **');

GotoXY(25,23);

Write('Для продолжения нажмите ENTER');

repeat

kno:=readkey;

until Kno=chr(13);

end;

resultat;

H:=0; w:=0; k:=0; kk:=0;

until k=3; end.