Реферат: Создание игры
Название: Создание игры Раздел: Рефераты по информатике, программированию Тип: реферат |
Министерство образования РФ. ИжГТУ. Кафедра Радиотехники. Курсовая работапо информатике. Тема: ”Создание игры”. Проверил: Старший преподаватель Сидорина В.А. Выполнил: Студент гр.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; key:=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; |