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

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

ИжГТУ.

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

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

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

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

                                                               Проверил:          

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

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

                                                                 Выполнил:

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

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

Ижевск.2003.

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

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

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

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

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

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

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

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

ВВЕДЕНИЕ:

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

<img src="/cache/referats/14162/image002.jpg" v:shapes="_x0000_i1025">

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

program jim;

uses crt,graph;

label 1,3;

var a:char;

   b:integer;

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

   begin

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

   end;

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

     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;

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

    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;

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

    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;

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

  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;

                                     ifx>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<10then begin

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

                                                    x:=580;

                                                  end;

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

                                    end;

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

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

                                                       delay(5);

                                                                 end;

                                                       if m<90 then

                                                        ifround(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);goto3;end;

                            if a=chr(113) thenbegin

                                 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>=19then 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<=10then 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 thenbegin  {Списоклитературы}

                                          sound(3000);

                                          delay(1000);

                                           nosound;

                                          clrscr;

                                          gotoxy(30,b);

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

                                           repeat

                                                a:=readkey;

                                          until a=chr(13);

                                          sound(4000);

                                          delay(1000);

                                          nosound;

                                           goto1;

                                           end;

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

                                          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 thenbegin  {Постановказадачи}

                                          sound(3000);

                                          delay(1000);

                                          nosound;

                                          clrscr;

                                           gotoxy(30,b);

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

                                           repeat

                                                a:=readkey;

                                           until a=chr(13);

                                          sound(4000);

                                          delay(1000);

                                          nosound;

                                           goto1;

                                          end;

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

                                          sound(3000);

                                          delay(1000);

                                          nosound;

                                          clrscr;

                                           gotoxy(30,b);

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

                                           repeat

                                                a:=readkey;

                                           until a=chr(13);

                                          sound(4000);

                                          delay(1000);

                                          nosound;

                                           goto1;

                                           end;

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

                                          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;

                                           goto1;

                                           end;

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

                                           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;

                                           goto1;

                                           end;

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

                                          sound(3000);

                                          delay(1000);

                                          nosound;

                                          clrscr;

                                           gotoxy(30,b);

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

                                           repeat

                                                a:=readkey;

                                          until a=chr(13);

                                          sound(4000);

                                          delay(1000);

                                          nosound;

                                           goto1;

                                           end;

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

                                          sound(3000);

                                          delay(1000);

                                          nosound;

                                          clrscr;

                                           gotoxy(30,b);

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

                                           repeat

                                                a:=readkey;

                                           until a=chr(13);

                                          sound(4000);

                                          delay(1000);

                                          nosound;

                                           goto1;

                                           end;

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

                                           sound(3000);

                                          delay(1000);

                                          nosound;

                                          clrscr;

                                           gotoxy(30,b);

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

                                           repeat

                                                a:=readkey;

                                           until a=chr(13);

                                          sound(4000);

                                          delay(1000);

                                          nosound;

                                           goto1;

                                          end;

                                  if b=15 thenbegin

                                          sound(3000);

                                          delay(1000);

                                           nosound;

                                           jim;

                                          closegraph;

                                           goto1;

                                           end;

                              end;

    until a=chr(27);

end.

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

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

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

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

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

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

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

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

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

Заключение.

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

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

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

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

1 МеженныйО.А. «TurboPascal-учитесьпрограммировать»; Москва-С.Петербург-Киев; «Диалектика»;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;

еще рефераты
Еще работы по программированию, базе данных