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

Автор работы: Пользователь скрыл имя, 10 Февраля 2015 в 12:14, курсовая работа

Описание работы

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

Содержание работы

Введение
PASCAL
Модули Pascal, используемые в программе
Модуль Crt
Разработка Программы
Постановка задачи
Алгоритм реализации работы
Алгоритм реализации игровой программы
Процедуры и функции программы
Описание пользовательского интерфейса
Заключение
Литература

Файлы: 1 файл

курсач по Языкам програмирования.rtf

— 2.78 Мб (Скачать файл)

Первоначально на экран выводится сообщение «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

writeln(recs,i,'.',id[i],': ',Str2Dec(zn[i]):3:0);

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;

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,Y2); TextColor(7); writeln('xx'); f:=1;

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

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

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

Информация о работе Создание игры в среде Turbo Pascal