Реферат по предмету "Информатика, программирование"


Написание игры "Змейка" средствами языка Turbo Pascal

Написание игры «Змейка»средствами языка Turbo Pascal

Оглавление
 
1. Постановка задачи
2. Ключевые слова
3. Теоретический материал
4. Структурное описание разработки
5. Функциональное описание
6. Заключение
7. Список используемой литературы
8. Приложения
Приложение 1
Приложение 2

1. Постановка задачи
 
Цель работы — написать игру «Змейка». Правила игры: на поле размером 25*80 движется змейка, состоящая изнескольких сегментов и разбросана еда. Цель игры — двигаться по полю буквами w (вверх), s(вниз), a(влево), d(вправо) и собирать еду. Каждаясобранная еда увеличивает длину змейки на один сегмент. Если змейка ударяется остену, игра заканчивается.
 
2. Ключевые слова
 
Игровоеполе, координаты еды и частей змейки, длина змейки, рисование змейки и еды, выход за пределы поля.
 
3. Теоретический материал
Данная контрольная работабыла выполнена в текстовом режиме Turbo Pascal.
При работе втекстовом режиме экран монитора разбивается на строки, строки — на позиции, вкаждую из которых можно поместить один символ. Положение символа на экранезадается двумя координатами — вертикальной X и горизонтальной Y. X — это номер позиции встроке, а Y— номер строки. Модуль CRT содержит описания констант, процедур и функций,обеспечивающих управление текстовым режимом работы монитора.
ClrScrОчищает экран или окно ипомещает курсор в верхний левый угол.
Delay(D: Word) Приостанавливает работупрограммы на указанное число D миллисекунд. Практически время задержки зависит от тактовойчастоты процессора.
GotoXY(X, Y: Byte) Перемещает курсор впозицию Xстроки Yэкрана.
TextBackGround(Color:Byte) Устанавливает цвет фона.
TextColor(Color: Byte) Устанавливает цветсимволов.
В программе используются несколько процедур дляреализации поставленной задачи.
4. Структурное описание разработки
Программа написана среде программирования Turbo Pascal. В ней создано контекстноеменю, появляющееся вначале игры, содержащее в себе подсказку по управлениюзмейкой, поле, на которое помеается компонент, содержащий в себе тело змейки и«еда».
При запуске программы выполняютсяследующие действия:
-открывается контекстное меню со справкойоб управлении передвижением тела змейки
-предлагается перейти к игре
-далее появляется появляется зеленое поле,с произвольными координатами прорисовывается еда и отображается змейка поначальным параметрам, которая начинает двигаться вправо.
Управление осуществляется клавишами:
w — осуществляет движениезмейки вверх
s — вниз
a — влево
d — вправо
Координаты каждой части змейки хранятся вматрице, при нажатии определенной клавиши они меняются и змейка движется.
При совпадении координат еды и началазмейки (поедание еды змейкой) координаты еды произвольно меняются, длина змейкиувеличивается на один сегмент.
Программа постоянно проверяет, нет липересечения змейкой границ поля. Если это случается, то выводится сообщение опроигрыше и меню с предложение вытйти из игры.
В случае, когда игрок собирает всю еду измейка достигает максимальной длины появляется сообщение о выигрыше.
5. Функциональное описание
 
В данной программе используются:
Тип данных созданный пользователем:
spoint=record; {тип данных для точки}
Консанты:
maxwidth=10; {максимальная длина змейки}
Переменные:
width:integer;{длина змейки}
e:spoint;{координаты еды}
snakebody: array [1..maxwidth] of spoint; {координаты частей тела змейки}
i{счетчик цикла}, nx, ny:integer;{координаты головызмейки}
v:byte;{вектор направленияголовы змейки}
gameover:boolean;{флаг окончания игры}
key:char;{буфер клавиши}
Процедуры и функции:
function checknext (x:integer; y:integer):boolean; {проверяет свободна ли клетка и не выходит ли она за границыполя}
procedure neweat; {создает еду на поле}
procedure movesnake(x,y:integer); {перемещает змейку}

Заключение
В ходе проделанной работы был изучен текстовый режим языкапрограммирования Turbo Pascal, рассмотрены и применены процедуры и функции.

Список используемой литературы
1. Малыхина М.П. Программирование на языке высокого уровня Turbo Pascal. –издательство«СПб: БХВ-Петербург», 2006.
2. Павловская Т.А. Паскаль. Программирование на языке высокогоуровня — издательство Питер 2008.
3. www.nesterova.ru

Приложение 1:
· Листинг программы
{
=============================================================
APPOINTMENT: Play «Snake»
AUTHOR: RyzhenkovaOlga
DATE: 11.11.2010
VERSION: 1.00
============================================================}
program zmeika;
uses crt;
type
spoint=record
x:integer;
y:integer;
end; {тип для точки}
const
maxwidth=10; {максимальная длина змейки}
var
width: integer; {длина змейки}
e:spoint;{координаты еды}
snakebody:array [1..maxwidth] of spoint; {массив с координатами частей тела змейки}
i,{счетчик цикла} nx,ny:integer{координаты головы змейки};
v:byte; {вектор направленияголовы змейки}
gameover: boolean; {флаг окончания игры}
key:char;{буфер клавиши}
{проверяет свободна ли клетка и не выходит ли она за границыполя}
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=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
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,snakebody[i].y);
{ 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.
игра змейка язык turbo pascal

Приложение 2
·  Примеры работы программы:
1)
/>
/>
/>

2)
/>
/>


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

Поделись с друзьями, за репост + 100 мильонов к студенческой карме :

Пишем реферат самостоятельно:
! Как писать рефераты
Практические рекомендации по написанию студенческих рефератов.
! План реферата Краткий список разделов, отражающий структура и порядок работы над будующим рефератом.
! Введение реферата Вводная часть работы, в которой отражается цель и обозначается список задач.
! Заключение реферата В заключении подводятся итоги, описывается была ли достигнута поставленная цель, каковы результаты.
! Оформление рефератов Методические рекомендации по грамотному оформлению работы по ГОСТ.

Читайте также:
Виды рефератов Какими бывают рефераты по своему назначению и структуре.

Сейчас смотрят :