Создание игры в среде Turbo Pascal

  • Вид работы:
    Курсовая работа (т)
  • Предмет:
    Информационное обеспечение, программирование
  • Язык:
    Русский
    ,
    Формат файла:
    MS Word
    57,55 Кб
  • Опубликовано:
    2014-03-26
Вы можете узнать стоимость помощи в написании студенческой работы.
Помощь в написании работы, которую точно примут!

Создание игры в среде Turbo Pascal

ФГБОУ ВПО

Чувашский государственный университет им. И. Н. Ульянова

Кафедра информатики и вычислительной техники

Факультет информатики и вычислительной техники







Курсовая работа

по информатике

Тема: «Создание игры в среде Turbo Pascal»


Выполнил: студент факультета

ИВТ-21-13

Зиновьев П.А.

Руководитель:

Ильин Д.В.





Чебоксары 2013

Содержание

Введение

PASCAL

Модули Pascal, используемые в программе

Модуль Crt

Разработка Программы

Постановка задачи

Алгоритм реализации работы

Алгоритм реализации игровой программы

Процедуры и функции программы       

Описание пользовательского интерфейса       

Заключение

Литература        

Приложение 1

Приложение 2

Введение

На современном рынке программного обеспечения довольно много различных программ для выполнения задач самых разных планов. Но кроме подобного «софта» существует такой тип программ как компьютерные игры. Причем эти творения человеческого гения занимают не малую долю рынка развлечений.

Еще в детстве, играя на приставках типа Dendy или Sega, многие, наверное, как и я, поражались фантазии разработчиков и технике исполнения игры. Но с популяризацией компьютеров наступила новая эра в области подобных игр. Качество графического и звукового оформления растет по экспоненте, а игровой процесс усложняется и становится все более интересным с каждым днем. Те, кто уже совсем наигрался, почти наигрался или еще не наигрался, но в процессе общения с компьютером уже начал совмещать игры с чем-нибудь более полезным, возможно, хотели бы придумать какие-нибудь свои, непохожие ни на какие другие игры.

Разработка игры является очень интересным и захватывающим процессом. Ведь данное искусство заключает в себе и совмещает множество других видов искусств. Так как для создания игры нужно: написать сценарий со связным сюжетом (если это не казуальная аркада), придумать совершенно новый и необычный игровой процесс, подобрать или написать соответствующую музыку, нарисовать красивые графические файлы или же придумать совершенно новое графическое оформление и, в конце концов, написать связывающий все это в единое целое алгоритм и запрограммировать его на определенном языке программирования.

В данной курсовой работе речь пойдет о создании несложной игровой программы «Турбозмей», которая и будет являться объектом исследования.

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

Во второй главе приведены этапы разработки программы, такие как постановка задачи, алгоритм реализации и описание пользовательского интерфейса.

В заключении приведены выводы по курсовой работе, достоинства и недостатки полученного программного продукта и методов его реализации.

Список использованных источников содержит полный перечень технической литературы, использованной для написания данной курсовой работы.

Приложения содержат блок-схемы всех процедур программы и текст самой программы.

игра pascal программный интерфейс

PASCAL

Целью моей курсовой работы является программирование с помощью Turbo Pascal 7.1. Прежде чем начать выполнять свое задание рассмотрим эту систему программирования, в общем.

Язык назван в честь французского математика, физика, литератора и философа Блеза Паскаля, который создал первую в мире механическую машину, складывающую два числа. И этим именем был назван новый программный продукт с феноменальными характеристиками.

Turbo Pascal - это среда разработки для языка программирования Паскаль. Используемый в Turbo Pascal диалект базировался на более раннем UCSD Pascal, получившем распространение, в первую очередь, на компьютерах серии Apple II <#"724772.files/image001.gif">


Игра не начинается сразу же после запуска программы, т. е. работа программы начинается сразу после запуска, а игра устанавливается в положение паузы(См. приложение). (процедура Pausing)

Все игровое поле представляет собой двумерный массив размером 78 на 20 и пространство, занимаемое символами на экране, в частности, «след» от игрока и «искусственные препятствия», хранится в массиве в виде единиц, где индексный адрес элемента массива является координатами занимаемого пространства. В то же время игровое поле - это экран со строками из различных символов различных цветов, которые изменяются при том или ином действии.

Расстановка «искусственных препятствий», «еды» и «игрока» происходит произвольным образом, в зависимости от зерна генератора псевдослучайных чисел и размера игрового поля.

Координаты «игрока» выбираются случайно (переменная X и переменная Y) лишь с условием того, чтобы он был расположен как можно ближе к центру игрового поля, а исходное направление при этом выбирается в 0 градусов (переменная d). В то же время координаты игрока помечаются цифрой «1» в матрице.

Образцы объекта «еда» расставляются примерно таким же образом, как и «игрок», но здесь имеется дополнительная проверка на то, чтобы «еда» не выходила за границы игрового поля.

«Искусственные препятствия» создаются по схожему алгоритму с «едой» (с проверкой на выход за границы игрового поля), с той лишь разницей, что их количество варьируется от 1 до 300 и зависит от уровня сложности. После нескольких тестов было решено кроме проверки на принадлежность игровому полю ввести проверку на расстояние между игроком и вновь создаваемым «искусственным препятствием», чтобы исключить случаи мгновенного проигрыша при обновлении игрового поля.

Первоначально на экран выводится сообщение «Game paused», это означает что игроку следует снять игру с паузы (клавиша P) перед началом игры.

Каждый четвертый подобранный объект «еда» вызывает очистку игрового поля и создание новых «искусственных препятствий» в случайных точках игрового поля.


С течением времени «игрок» визуально растет и занимает все большее место на игровом поле, тем самым усложняя доступ к «еде» (рис.2)


При столкновении игрока с «искусственным препятствием» или со своим «следом» текущий сеанс игры завершается с сообщением «You loosed with score: количество_набранных_очков» Далее выводится точность игрока, запрос имени текущего игрока и предыдущий наилучший результат с именем игрока из таблицы рекордов. (Рис.3)

Процедуры и функции программы

Функция Str2Dec

Используется для перевода целого числа из строкового представления (string) в числовое представление (real), для удобства последующей обработки. А именно при сравнении результатов из текстового файла таблицы рекордов.

Процедура SortW

Перебирает элементы массива со значениями результатов игроков и сортирует в массиве (методом перестановок) данные результаты в порядке убывания, при этом для сравнения количества набранных очков используется функция Str2Dec. После сортировки результатов записывает их в файл records.txt в формате «место.имя_игрока: результат»

Процедура FindWord

Посимвольно считывает информацию из файла таблицы рекордов records.txt. Это происходит следующим образом: символы считанные до знака точки отбрасываются, далее каждый символ записывается в строковую переменную до достижения знака двоеточия и результат сохраняется в массиве строк (имя игрока) под определенным номером (индексом). После достижения знака двоеточия происходит чтение количества набранных очков до знака перевода строки. Считанное количество очков записывается в другой массив строк, но с тем же индексом, что и имя игрока. В конце работы процедуры в переменную nrec заносится текущее количество результатов, которое требуется при следующей обработке таблицы.

Процедура Rec

Цель работы процедуры - проверка наличия файла с таблицей рекордов records.txt. Далее в зависимости от наличия или отсутствия происходит следующая последовательность действий: если файла нет, то создается новый файл records.txt в той же директории, где находится сам запускаемый файл игры. Если файл с таблицей существует, то начинается его обработка процедурами FindWord и SortW. Таким образом к началу игры программа уже будет иметь данные о предыдущих результатах игрока.

Процедура Clear

Задача процедуры - очистка экрана и игрового поля. Причем очистка происходит не только в том плане, что удаляются все символы с экрана (ClrScr), но и очищается (путем обнуления всех элементов) массив игрового поля, в котором хранится информация о «занятости» определенной позиции экрана произвольным символом. Кроме того данная процедура рисует верхнюю и нижнюю границы игрового поля, путем цикличного печатания символа нижнего подчеркивания до границ экрана.

Процедура Labgen

Вызов процедуры перегенерации зерна псевдослучайных чисел.

Определение количества вновь создаваемых препятствий по формуле случайное число от (0 до 7) + сотая часть коэффициента сложности, который определяется текущим количеством набранных очков.

Определение координат создаваемого препятствия случайным образом пока элемент массива игрового поля с индексами вновь подобранных соответствующих координат не будет равен 0 и проверка расстояния между игроком и создаваемым препятствием.

Заполнение элемента массива игрового поля с индексами координаты созданного препятствия единицей, и рисование препятствия на игровом поле как символ #.

Процедура Mor

Заключает в себе всю систему передвижения игрока по игровому полю с проверками на столкновения с препятствиями всех видов и перемещением игрока в противоположный конец игрового поля при пересечении границ. При столкновении игрока с препятствием происходит очистка экрана функцией Clear и в центре экрана печатается с сообщением о проигрыше (со звуковым сопровождением, если оно включено) и результатом и пересортировка таблицы рекордов. В противном случае игра продолжается и определяется следующая координата игрока в зависимости от направления, единицами заполняется массив игрового поля и печатается символ «о» в определяемом положении игрока.

Процедура Scoring

Проверяет положение «игрока» относительно «еды» и если расстояние между ними меньше 1, то удаляет существующую «еду» и прибавляет +1 к счетчику очков (score), +100 к счетчику коэффициента сложности (h) и +1 к счетчику обновления игрового поля (rs). Причем все это сопровождается соответствующим звуком.

Процедура Fset

При отсутствии объекта «еда» на игровом поле создает его в случайной точке игрового поля, проверяя координаты относительно границ поля и сверяясь с матрицей игрового поля, создает «еду» в свободной точке. Причем не исключается возможность создания «еды» в непосредственной близости к игроку или в замкнутом и недоступном игроку месте. Последнее создает дополнительное «правило» игры, которое приучает игрока не создавать замкнутых пространств.

Процедура Pausing

Проверяет состояние переменной pause, которая определяется нажатием клавиши P и в зависимости от состояния снимает или ставит игру на паузу, в то же время выводит в нижнюю часть экрана информацию по управлению и по основным горячим клавишам. Пауза реализована в виде бесконечного цикла, условием выхода из которого является нажатие на клавишу P.

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

Описание пользовательского интерфейса - поставить игру на паузу или возобновить ее, вывести в низ экрана информацию по горячим клавишам программы.- мгновенный выход из игры, без сохранения результатов., A, S, D - управление направлением игрока, вверх, влево, вниз, вправо соответственно.- включить или выключить звуковое сопровождение (включено по умолчанию)

Заключение

В результате выполнения данной курсовой работы был получен игровой программный продукт, названный «Турбозмей». Было проведено исследование компонентов программной среды Turbo Pascal 7.1, которые использовались при создании игры.

В результате исследования были выявлены следующие недостатки полученного программного продукта:

Отсутствие полноценной графики

Высокая сложность игрового процесса для рядового пользователя

Работоспособность приложения только в среде Windows

Фиксированный размер экрана

Однако, помимо недостатков, есть и достоинства у этого программного продукта:

Небольшой размер исполняемого файла за счет отсутствия графики

Совершенно новый игровой процесс, хоть и основан на классической версии «змейки»

Возрастающая сложность игры

Автоматизированная таблица рекордов

Программный продукт малотребователен к системным ресурсам компьютера. Минимальная конфигурация: процессор - не ниже Pentium, оперативная память - не ниже 16 Mb, операционная система - Windows 95 / 98/ Me / NT / 2000 / XP

В результате учета всех сделанных выше замечаний возможно улучшение созданного программного продукта, на которое потребуется минимум изменений исходного кода программы.

Литература

Эхерн, Люк Создание компьютерных игр М.: ДМК Пресс - Москва, 2001. - 304 c.

Фаронов В.В. Турбо Паскаль 7.0. Начальный курс. Учебное пособие.

М.:Нолидж, 1997. -616с.

Павловская, Т.А. Паскаль. Программирование на языке высокого уровня; СПб: Питер - Москва, 2003. - 393

Приложение 1

Исходный текстtsnake;

uses crt;

Xs=78;

Ys=20;

Dig:set of char = ['0'..'9'];

Let:set of char = ['A'..'Z'];

X0,Y0,X,Y,X2,Y2,n,i,k,d,f,h,score,nrec,rs:integer;

xy:array [0..Xs+2, 0..Ys+2] of integer;

recs:text;

c:char;

t:real;

rest,quit,pause,snd:byte;

zn,id:array[0..100] of string;Str2Dec(s:string): real;

val,k:real;

i,ch:longint;

Str2Dec:=0;ch:=0;

s:='*'+s;

i:=length(s);k:=1;val:=0;

while (s[i]<>'*') and (s[i] in ['0'..'9']) do

begin

ch:=ord(s[i])-ord('0');

val:=(ch*k+val);

k:=k*10;

i:=i-1;

end;

Str2Dec:=val;;SortW;

var tstr:string[10];

i,n:integer;

begin

for i:=2 to nrec do

if Str2Dec(zn[i])>=Str2Dec(zn[i-1]) then begin

tstr:=zn[i-1];zn[i-1]:=zn[i];zn[i]:=tstr;

tstr:=id[i-1];id[i-1]:=id[i];id[i]:=tstr;

end;

rewrite(recs);

for i:=1 to nrec do begin

end;

close(recs);

end;FindWord;

var

tstr:string[10];

ch:char;

ex:byte;

begin

i:=1;

while not Eof(recs) do begin

while not Eoln(recs) do begin

ch:='0';ex:=0;

id[i]:='';zn[i]:='';

while (ch in Dig+Let) or (ch='.') or (ch=' ')do begin

read(recs,ch);

ch:=upcase(ch);

if (ch in Dig+Let) or (ch='.') or (ch=' ') then id[i]:=id[i]+ch;

Delete(id[i],1,Pos('.',id[i]));

end;

if (ch=' ') then read(recs,ch);

if ch=':' then begin

while not(Eoln(recs)) do begin

read(recs,ch);

zn[i]:=zn[i]+ch;

end;

i:=i+1;

end;

end;

readln(recs);

end;

nrec:=i-1;

end;Rec;{score record}

begin

assign(recs,'records.txt');

{$I-}

reset(recs);{}

{$I+}

if (IOresult <> 0) then begin

rewrite(recs);

writeln(recs,'1.SZ: 80');

writeln(recs,'1.SZ: 80');

close(recs);

end

else

Findword;

SortW;

end;Clear;

begin

ClrScr;

for n:=0 to Xs do begin

gotoXY(n+1,Ys+1);textcolor(3);write('_');

gotoXY(n+1,1);write('_');

for i:=0 to Ys do

xy[n,i]:=0;

end;

end;Labgen;

var

N:0..100;

I,wx,wy:integer;

begin

randomize; N:=random(7)+h div 100;

for I:=1 to N do begin

repeat

wx:=random(Xs-8)+2;

wy:=random(Ys-5)+2;

until (xy[wx,wy]=0) and (sqrt((X-wx)*(X-wx)+(Y-wy)*(Y-wy))>=3);

xy[wx,wy]:=1;

gotoXY(wx,wy);

textcolor(3);

write('#');

end;Mor;{move or restart}

begin

if xy[X,Y]=1

then begin

rest:=1;

if snd=1 then begin

sound(700);

delay(40000);

sound(400);

delay(30000);

sound(380);

delay(30000);

nosound;

end;

Clear;

GotoXY((Xs div 2)-10,Ys div 2);

textcolor(3);

writeln(' You loosed with score: ',score:3);

GotoXY(Xs div 2-9,(Ys div 2)+2);

writeln(' Accuracy: ',score/t*0.1:4:3,' ');

GotoXY(Xs div 2-9,(Ys div 2)+5);

write(' Highscore: ',zn[1],' - ',id[1]);

nrec:=nrec+1;

str(round(score+score/t*0.1),zn[nrec]);

GotoXY(Xs div 2-7,(Ys div 2)+4);write('Name: ');

readln(id[nrec]);

SortW;

end;

xy[X,Y]:=1;{array filling}

case d of

0: Y:=Y-1;

1: X:=X+1;

2: Y:=Y+1;

3: X:=X-1;

end;

X0:=X;Y0:=Y;

if X>Xs then X:=1;

if X<1 then X:=Xs;

if Y>Ys then Y:=2;

if Y<2 then Y:=Ys;

GotoXY(X,Y); TextColor(2);

writeln('o');{Snake drawing}

end;Scoring;

begin

{Eating and Scoring}

if sqrt((X-X2)*(X-X2)+(Y-Y2)*(Y-Y2))<=1 then begin

GotoXY(X2,Y2); writeln(' ');

GotoXY(X2-1,Y2);writeln(' ');

GotoXY(X2,Y2-1);writeln(' ');

GotoXY(X2,Y2+1);writeln(' ');

xy[X0,Y0]:=0;

textcolor(7);

GotoXY(X0,Y0);writeln('o');

f:=0; score:=score+1;h:=h+100; rs:=rs+1;

if snd=1 then begin

sound(600);

delay(10000);

sound(900);

delay(10000);

nosound;

end;

end;

end;Fset;

begin

{Food setting}

if f=0 then begin

repeat

X2:=random(Xs-8)+2;

Y2:=random(Ys-8)+4;

until xy[X2,Y2]=0;

GotoXY(X2-1,Y2);writeln('x');

GotoXY(X2,Y2-1);writeln('x');

GotoXY(X2,Y2+1);writeln('x');

end; {Food draw}

end;Pausing;

begin

{Pause}

if pause=1 then

repeat

textcolor(7);

GotoXY(Xs div 2,Ys+3);

writeln('Game Paused');

GotoXY(1,Ys+4);

writeln(' Help: P - start/pause; Q - quit; W,A,S,D - moving;M - mute;');

c:=readkey;c:=upcase(c);

if c='Q' then pause:=0;

if c='M' then if snd=0 then snd:=1 else snd:=0;

{UnPause}

if c='P' then begin

pause:=0;

gotoXY(1,Ys+3); ClrEol;

gotoXY(1,Ys+4); ClrEol;

gotoXY(Xs div 2,Ys+3); write('Score: ',score:3);

end;

until (pause=0);

end;

Rec;{record read}

quit:=0;

snd:=1;

while quit=0 do begin

randomize;t:=0;rest:=0;

Clear;

X:=30+random(10);

Y:=5+random(10);

d:=1; f:=0; {Direction=1 and no food}

score:=0;

h:=0;

Labgen;

rs:=1; {restart screen}

pause:=1;

repeat {until restart}

repeat {until keypress}

randomize;

gotoXY(Xs div 2,Ys+3); write('Score: ',score:3);

t:=t+0.001;

if rs >= 5 then begin

Clear;

rs:=1;

Labgen;

end;

Mor;

Fset;

Scoring;

Pausing;

if h<30000 then delay(30000-h); {Speed of game}

until (keypressed) or (rest=1);

c:=readkey; c:=upcase(c);

case c of

'W': if d<>2 then d:=0;

'D': if d<>3 then d:=1;

'S': if d<>0 then d:=2;

'A': if d<>1 then d:=3;

'P': pause:=1;

'Q': quit:=1;

'M': if snd=0 then snd:=1 else snd:=0;

end;

until (rest=1) or (quit=1);

for n:=1 to nrec do

Rec;{Recordsfix}

end;{Quit from game}


Приложение 2

Блок схема














Похожие работы на - Создание игры в среде Turbo Pascal

 

Не нашли материал для своей работы?
Поможем написать уникальную работу
Без плагиата!