Курсовая работа: Разработка компьютерной игры "Змейка"
Именно этими принципами я руководствовался при разработке меню
и самого процесса игры.
Также в моей программе я использовал типизированные файлы. Так
информация о разработчике хранится в файле под названием Avtor.
pas, правила игры хранятся в файле Pravila.
pas. Таблица рекордов хранится в файле Itog. txt. Для того чтобы работать с рекордами
(сравнивать результаты и сортировать таблицу результатов) мне потребовалось отдельный
файл в котором хранятся только рекорды (Rec. dat), и файл в котором хранятся имена пользователей (Imena. txt).
В программе широко использовались такие функции как 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:\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;
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
Страницы: 1, 2, 3 |