Автор работы: Пользователь скрыл имя, 28 Января 2013 в 18:43, курсовая работа
Цель работы - Изучить язык программирования Турбо Паскаль. Написать игру "Змейка". Правила игры: на поле размером 25*80 движется змейка, состоящая из нескольких сегментов и разбросана еда. Цель игры - двигаться по полю буквами w (вверх), s(вниз), a(влево), d(вправо) и собирать еду. Каждая собранная еда увеличивает длину змейки на один сегмент. Если змейка ударяется о стену, игра заканчивается.
Введение
3
1 Язык программирования Turbo Pascal
5
1.1 Процедуры и функции
8
1.2 Операторы. Выражения
10
2 Лексические основы языка Pascal
12
2.1 Структура программы на языке Pascal
14
2.2 Типы данных, используемые в Pascal
18
2.3 Стандартные функции языка Pascal
23
2.4 Построение арифметических выражений
25
2.5 Встроенные константы. Элементы структурного программирования
26
3 Описание алгоритма программы
28
3.1 Структурное описание разработки
28
3.2 Функциональное описание
29
Заключение
31
Список литературы
32
Приложение
function checknext(x:integer; y:integer):boolean;
var
isset:boolean; {флаг проверки занятости клетки или ее выхода за границы поля}
i:integer;
begin
isset:=true;
for i:=1 to width do
begin {проверяем нет ли на месте клетки змейки}
if (x=snakebody[i].x) and (y=snakebody[i].y) then
isset:=false;
end;
if isset then
begin {проверяем не вышла ли голова змейки за границы поля}
if (x<=0) or (y<=0) or (x>=80) or (y>=25) then isset:=false;
end;
checknext:=isset;
end;
{создает еду на поле}
procedure neweat;
begin
e.x:=random(78)+2;
e.y:=random(23)+2; {генерируем координаты еды}
{если место занято, генерируем еще раз, и так пока не найдем свободное}
while (not checknext(e.x , e.y)) do
begin
e.x:=random(78)+2;
e.y:=random(23)+2;
end;
end;
{перемещает змейку
procedure movesnake (x,y:integer);
var
i:integer; {счетчик цикла}
begin
for i:=1 to width do
begin
snakebody[i]:=snakebody[i+1];
end;{перемещаем все составляющие змейки на место соседней}
snakebody[width].x:=x;
snakebody[width].y:=y; {голове змейки присваиваем новые координаты}
if (x=e.x) and (y=e.y) then {если голова нашла еду}
begin
width:=width+1; {увеличиваем длину змейки на 1}
snakebody[width].x:=x;
snakebody[width].y:=y;
neweat; {создаем новую еду}
end;
end;
{******** main program ************}
BEGIN
textbackground(2);
clrscr;
textcolor(5);
gotoxy(33,10);
write ('**** SNAKE ****');
gotoxy(20,12);
write('press W to go up');
gotoxy(20,14);
write('pres A to go left');
gotoxy(20,16);
write('press D to go right');
gotoxy(20,18);
write('press S to go down');
gotoxy(27,22);
write ('**** PRESS ENTER TO START ****');
readln;
clrscr;
gameover:=false;
{выстраиваем начальное тело змеки}
width:=4;
snakebody[1].x:=1;
snakebody[1].y:=1;
snakebody[2].x:=2;
snakebody[2].y:=1;
snakebody[3].x:=3;
snakebody[3].y:=1;
snakebody[4].x:=4;
snakebody[4].y:=1;
clrscr;
v:=1;
randomize;
neweat; {создаем еду}
while (width<maxwidth) do {пока длина змейки меньше заданной}
begin
if (keypressed) then {если была нажата клавиша}
begin
key:=readkey; {считываем клавишу}
case key of
'w': begin if v=4 then continue; v:=3; end; {up}
's': begin if v=3 then continue; v:=4; end; {down}
'a': begin if v=1 then continue; v:=2; end; {left}
'd': begin if v=2 then continue; v:=1; end; {rigth}
#27: break; {exit}
end;
end;
clrscr;
{определение направления движения головы змейки}
case v of
1: begin nx:=snakebody[width].x+1;
ny:=snakebody[width].y; end; {rigth}
2: begin nx:=snakebody[width].x-1;
ny:=snakebody[width].y; end; {left}
3: begin nx:=snakebody[width].x;
ny:=snakebody[width].y-1; end; {up}
4: begin nx:=snakebody[width].x;
ny:=snakebody[width].y+1; end; {down}
end;
{если впереди граница или препятствие}
if (not checknext(nx,ny)) then
begin
gameover:=true; {заканчиваем игру с поражением пользователя}
break;
end;
movesnake(nx,ny); {перемещаем змейку}
gotoxy(e.x,e.y);
write('o'); {отображаем еду}
for i:=1 to width-1 do
begin {отображаем тело змейки}
gotoxy(snakebody[i].x,
{ textbackground(2);}
textcolor(15);
write('o');
end;
gotoxy (snakebody[width].x, snakebody[width].y);
textcolor(7);
write('o'); {отображение головы змейки}
gotoxy(80,25); {уводим курсор чтобы не мешал}
delay(20000)
end;
clrscr;
if (gameover) then {сообщение о выигрыше или проигрыше}
begin
textcolor(4);
gotoxy(30,12);
writeln('**** GAME OVER ! ****')
end
else
begin
textcolor(11);
gotoxy(35,12);
writeln ('**** YOU WIN ! ****');
end;
textcolor (15);
gotoxy(25,20);
writeln('**** Press enter for exit ! ****');
readln;
END.