Создание игры

Министерство образования РФ.


ИжГТУ.


Кафедра Радиотехники.


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

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


Тема: ”Создание игры”.


Проверил:


Старший преподаватель


Сидорина В.А.


Выполнил:


Студент гр.2-29-1


Скворцов Я.А.


Ижевск.2003.


Содержание Стр.


Введение--------------------------------------------------------------------------------3


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


2 Алгоритмы и блок-схемы---------------------------------------------------------5


3 Программа на языке Pascal с комментариями--------------------------------6


4 Руководство пользователя для работы в программе-----------------------16


Заключение----------------------------------------------------------------------------17


Список использованной литературы---------------------------------------------18


ВВЕДЕНИЕ:


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


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


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


Требуется создать игру, основным смыслом которой является то, что в одной части экрана перемещаются объект-(объекты) одного типа(«Самолёты»), а в другой части экрана находится объект другого типа(«Средство противовоздушной обороны»), и «Средство ПВО» должно сбивать «Самолёты».


а) Выбор, обоснование и изложение метода решения задачи.


Я предпочёл использование динамической памяти, прорисовку текстур в отдельной процедуре и звуковое сопровождение.


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


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


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


б) Построение алгоритма задачи.


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


Далее в зависимости от нажатых клавиш динамические объекты двигаются так или иначе.


в) Создание и отладка программы.


Создание программы состояло из трёх этапов: создание меню, создание основного тела игры в виде отдельной процедуры без прорисовки текстур и окончательная прорисовка текстур.


г) Оформление пояснительной записки и защита курсового проекта.


2 Блок-схема.























3 Программа на языке
Pascal
c комментариями.



program jim;


uses crt,graph;


label 1,3;


var a:char;


b:integer;


procedure beep;{Выдача звука}


begin


sound(300);delay(6000);nosound;delay(700);


end;


procedure zemlya;{прорисовка нижней части экрана}


begin


setcolor(3);


line(0,55,640,55);


line(0,479,0,430);


line(0,430,639,430);


line(639,430,639,479);


line(639,479,0,479);


setfillstyle(7,5);


floodfill(10,470,3);


end;


procedure PVO;{Прорисовка средства ПВО}


begin


setcolor(6);


line(5,37,45,37);line(45,37,47,39);


line(47,40,37,50);line(37,50,7,50);


line(7,50,3,39);line(3,38,5,37);


circle(15,43,6);circle(30,43,6);


circle(6,39,2);circle(44,39,2);


setfillstyle(1,6);


floodfill(41,43,6);floodfill(22,49,6);


floodfill(7,43,6);floodfill(10,39,6);


setcolor(2);


line(3,39,3,34);line(3,34,20,34);


line(21,34,21,23);line(21,23,33,23);


line(33,23,47,36);line(47,36,47,36);


line(47,36,3,36);


line(36,26,29,26);line(29,27,30,30);


line(31,31,42,31);


setfillstyle(1,2);floodfill(26,32,2);


setcolor(9);


line(8,33,8,23);line(9,24,9,13);


line(9,13,11,12);line(11,12,11,9);line(11,12,13,13);


line(13,13,13,24);line(14,23,14,33);


line(8,28,3,33);line(3,33,19,33);


line(19,33,14,28);


setfillstyle(1,9);floodfill(11,28,9);


line(21,24,24,24); line(21,25,24,25);


setcolor(4);line(21,26,25,26);line(21,27,25,27);


setcolor(15);line(21,28,26,28);line(21,29,26,29);


end;


procedure NLO; {прорисовка летающей тарелки}


var l:integer;


begin randomize;l:=random(256);


setcolor(l);


line(9,8,7,8);line(7,9,5,9);


line(5,10,3,10);line(3,11,1,11);


line(1,11,1,13);line(2,14,4,14);


line(3,15,5,15); line(5,16,8,16);


line(7,17,10,17);line(10,18,16,18);


line(16,19,35,19);line(35,18,41,18);


line(41,17,44,17);line(44,16,46,16);


line(46,15,48,15);line(48,14,49,14);


line(49,14,49,11);line(49,11,48,11);


line(48,10,46,10);line(46,9,44,9);


line(44,8,41,8);line(41,7,41,9);


line(41,9,40,9);line(40,10,37,10);


line(37,11,33,11);line(33,12,17,12);


line(17,11,13,11);line(13,10,10,10);


line(10,9,9,8);


setfillstyle(1,l);floodfill(24,15,l);


putpixel(31,16,0);putpixel(42,12,0);


putpixel(18,16,0);putpixel(7,13,0);


setcolor(11);


line(18,11,32,11);line(32,10,36,10);


line(36,9,39,9);line(40,8,40,5);


line(39,4,36,4);line(36,3,32,3);


line(32,2,18,2);line(18,3,14,3);


line(14,4,11,4);line(10,5,10,8);


line(11,9,14,9);line(14,10,18,10);


setfillstyle(1,11);floodfill(25,7,11);


end;


procedure pulka;{Прорисовка снаряда}


begin


setcolor(5);


line(2,6,2,3);line(3,6,3,0);line(4,6,4,3);


setcolor(13);


line(3,8,3,7);


setcolor(14);


line(1,5,1,7);line(2,7,2,9);


putpixel(3,9,14);line(4,7,4,9);line(5,5,5,7);


end;


procedure gameover(b,v:integer);{предписания при выигрыше одной


var u,o:integer; из сторон}


i:^integer;


siz:word;


begin


siz:=imagesize(0,100,1,100);


getmem(i,siz);


getimage(0,100,1,100,i^);


if v>500 then begin


outtextxy(300,240,'Y');beep;


outtextxy(308,240,'o');beep;


outtextxy(316,240,'u');beep;


outtextxy(324,240,'_');beep;


outtextxy(332,240,'W');beep;


outtextxy(340,240,'I');beep;


outtextxy(348,240,'N');beep;


end;


if b>500 then begin


outtextxy(300,240,'G');beep;


outtextxy(308,240,'a');beep;


outtextxy(316,240,'m');beep;


outtextxy(324,240,'e');beep;


outtextxy(332,240,'_');beep;


outtextxy(340,240,'O');beep;


outtextxy(348,240,'v');beep;


outtextxy(356,240,'e');beep;


outtextxy(364,240,'r');beep;


delay(45000);outtextxy(330,260,':');beep;


outtextxy(338,260,'-');beep;


outtextxy(346,260,'>');beep;


end;


delay(64500);delay(64500);


delay(64500);


for u:=0 to 640 do


for o:=0 to 480 do begin


putimage(u,o,i^,copyput);


end;


end;


procedure jim; {Непосредственно игра}


label 2,3;


var i,j,x,y,m,n,v,b:integer;


key:boolean;


s,ss,s1,s2,s3:word;p,pp,p1,p2,p3:pointer;{рр-пустой квадрат;р-ПВО...;р1-пулька}


begin i:=9;j:=2;initgraph(i,j,'');


3: ss:=imagesize(0,430,50,480);a:='y';


getmem(pp,ss);


getimage(0,430,50,480,pp^);


s:=imagesize(0,0,50,50);


getmem(p,s);


PVO;


getimage(0,0,50,50,p^);


putimage(0,0,pp^,copyput);


s1:=imagesize(0,0,5,10);


getmem(p1,s1);


pulka;


getimage(0,0,5,10,p1^);


putimage(0,0,pp^,copyput);


s2:=imagesize(0,0,5,10);{р2-маленький квадратик пульки}


getmem(p2,s2);


getimage(0,0,5,10,p2^);


s3:=imagesize(0,0,50,20);


getmem(p3,s3);


NLO;


getimage(0,0,50,20,p3^); putimage(0,0,pp^,copyput);


zemlya;


x:=200;y:=379;putimage(x,y,p^,copyput);


v:=0;b:=0;delay(45000);delay(45000);


repeat {Начало самого процесса игры}


for n:=1 to 1770 do begin


putimage(round(n/3),60,p3^,copyput);


if n>1760 then begin


putimage(round(n/3),60,pp^,copyput);


sound(300);delay(100);nosound;


end;


ke

y:=keypressed;


if key=false then goto 2;


a:=readkey;


if a=chr(77) then begin


x:=x+3;


if x>580 then begin


putimage(x,y,pp^,copyput);


x:=10;


end;


putimage(x,y,p^,copyput);


end;


if a=chr(75) then begin


x:=x-3;


if x<10 then begin


putimage(x,y,pp^,copyput);


x:=580;


end;


putimage(x,y,p^,copyput);


end;


if a=chr(32) then begin for m:=y-2 downto 56 do begin


putimage(x+8,m,p1^,copyput);


delay(5);


end;


if m<90 then


if round(n/3)>(x-50) then


if round(n/3)<(x+10) then begin


sound(800);delay(2000);


nosound;putimage(round(n/3),60,pp^,copyput);


putimage(v,10,p1^,copyput);n:=1;


v:=v+15;if v>500 then begin gameover(b,v);goto 3;end;end;


putimage(x+8,56,p2^,copyput);


end;


2: end;putimage(b,24,p3^,copyput);b:=b+50;


if b>500 then begin gameover(b,v);goto 3;end;


if a=chr(113) then begin


v:=550;gameover(b,v);goto 3;


end;


until a=chr(27);


end;


begin{Основная программа}


1: clrscr;


gotoxy(30,10);


write('Введение');


gotoxy(30,11);


write('Постановка задачи');


gotoxy(30,12);


write('Математические методы...');


gotoxy(30,13);


write('Описание данных');


gotoxy(30,14);


write('Алгоритмы и блок-схемы');


gotoxy(30,15);


write('ПРОГРАММА');


gotoxy(30,16);


write('Текстовые примеры');


gotoxy(30,17);


write('Руководство пользователю');


gotoxy(30,18);


write('Заключение');


gotoxy(30,19);


write('Список литературы');{Это всё менюшка}


gotoxy(26,10);


write('>>>');


gotoxy(25,10);


repeat


a:=readkey;


if a=chr(80) then begin{движение курсора вниз}


b:=wherey;


gotoxy(26,b);


write(' ');


if b>=19 then b:=9;


gotoxy(26,b+1);


write('>>>');


gotoxy(25,b+1);


sound(3000);


delay(1000);


nosound;


end;


if a=chr(72) then begin{движение курсора вверх}


b:=wherey;


gotoxy(26,b);


write(' ');


if b<=10 then b:=20;


gotoxy(26,b-1);


write('>>>');


gotoxy(25,b-1);


sound(4000);


delay(1000);


nosound;


end;


if a=chr(13) then begin {Опрос клавиши ENTER}


b:=wherey;


if b=19 then begin {Список литературы}


sound(3000);


delay(1000);


nosound;


clrscr;


gotoxy(30,b);


write('Книжка по Турбо-Паскалю');


repeat


a:=readkey;


until a=chr(13);


sound(4000);


delay(1000);


nosound;


goto 1;


end;


if b=10 then begin {Введение}


sound(3000);


delay(1000);


nosound;


clrscr;


gotoxy(30,b);


writeln('Основной целью данного курсового проекта');


gotoxy(30,b+1);


writeln('является закрепление и демонстрация знаний,');


gotoxy(30,b+2);


writeln('полученых при изучении курса информатики');


repeat


a:=readkey;


until a=chr(13);


sound(4000);


delay(1000);


nosound;


goto 1;


end;


if b=11 then begin {Постановка задачи}


sound(3000);


delay(1000);


nosound;


clrscr;


gotoxy(30,b);


write('Сделать игру: леталку-стрелялку');


repeat


a:=readkey;


until a=chr(13);


sound(4000);


delay(1000);


nosound;


goto 1;


end;


if b=18 then begin {Заключение}


sound(3000);


delay(1000);


nosound;


clrscr;


gotoxy(30,b);


write('Мне понравилась моя прога :-)');


repeat


a:=readkey;


until a=chr(13);


sound(4000);


delay(1000);


nosound;


goto 1;


end;


if b=17 then begin {руководство пользователю}


sound(3000);


delay(1000);


nosound;


clrscr;


gotoxy(30,b);


write('Если Вы в этой проге ничего не поменяете');


gotoxy(30,b+1);


write('она будет работать ВЕЧНО...');


repeat


a:=readkey;


until a=chr(13);


sound(4000);


delay(1000);


nosound;


goto 1;


end;


if b=12 then begin {математические методы}


sound(3000);


delay(1000);


nosound;


clrscr;


gotoxy(30,b);


write('Задача сама по себе не математическая,');


gotoxy(30,b+1);


write('значит и математических методов никаких нет');


repeat


a:=readkey;


until a=chr(13);


sound(4000);


delay(1000);


nosound;


goto 1;


end;


if b=13 then begin {Описание данных}


sound(3000);


delay(1000);


nosound;


clrscr;


gotoxy(30,b);


write('Данных нет...');


repeat


a:=readkey;


until a=chr(13);


sound(4000);


delay(1000);


nosound;


goto 1;


end;


if b=14 then begin {Алгоритм.блок-схема}


sound(3000);


delay(1000);


nosound;


clrscr;


gotoxy(30,b);


write('Смотри Пояснителную записку');


repeat


a:=readkey;


until a=chr(13);


sound(4000);


delay(1000);


nosound;


goto 1;


end;


if b=16 then begin {Текстовые примеры}


sound(3000);


delay(1000);


nosound;


clrscr;


gotoxy(30,b);


write('Текстовых примеров у меня тоже нет');


repeat


a:=readkey;


until a=chr(13);


sound(4000);


delay(1000);


nosound;


goto 1;


end;


if b=15 then begin


sound(3000);


delay(1000);


nosound;


jim;


closegraph;


goto 1;


end;


end;


until a=chr(27);


end.



4 Руководство пользователя для работы в программе.


При запуске программы появляется меню, предлагающее широкий выбор пунктов.


Курсор перемещается при помощи клавиш курсора, выбор осуществляется клавишей ENTER .


При выборе какого-либо пункта меню появляется соответствующее сообщение, однако же, при выборе пункта «Программа» запускается непосредственно сама игра.


Суть игры заключается в сбивании летающих тарелок средством ПВО.


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


Игрок проигрывает в случае достижения числа не сбитых тарелок правого края экрана.


Игрок выигрывает в случае достижения числа сбитых тарелок правого края экрана.


После проигрыша либо выигрыша игра повторяется.

























Заключение.


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


Длителен также процесс детальной прорисовки графики.


Необходимо, чтобы в той папке, где лежит данная программа, находился файл egavga.bgi . Этот файл имеется во многих версиях ТР в папке bin, он отвечает за инициализацию графики.





































Список использованной литературы.



1 Меженный О.А. «Turbo Pascal-учитесь программировать»;Москва-С.Петербург-Киев; «Диалектика»;2001;448с.


2 Бабушкин И.А.; «Практикум по ТР»-учебное пособие по курсам ИВТ; Москва, 1998.


3 http://www.freepascal.org;


4 http://www.geocities.com/~franzglaser/tp.htm;


5 http://www.garbo.uwasa.fi/pc/turboobj.html;

Сохранить в соц. сетях:
Обсуждение:
comments powered by Disqus

Название реферата: Создание игры

Слов:1840
Символов:21740
Размер:42.46 Кб.