Программирование и комп-ры

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


                        Министерство образования РФ.
                                   ИжГТУ.
                            Кафедра Радиотехники.



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

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



                                  Проверил:
                                                       Старший преподаватель
                                                               Сидорина В.А.



                                  Выполнил:
                                                           Студент гр.2-29-1
                                                               Скворцов Я.А.



                                Ижевск.2003.

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

       Введение-------------------------------------------------------------
    -------------------3
       1 Постановка задачи--------------------------------------------------
    ----------------4
       2 Алгоритмы и блок-схемы---------------------------------------------
    ------------5
       3 Программа на языке Pascal с комментариями--------------------------
    ------6
       4 Руководство пользователя для работы в программе--------------------
    ---16
       Заключение-----------------------------------------------------------
    -----------------17
       Список использованной литературы-------------------------------------
    --------18



       ВВЕДЕНИЕ:

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



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



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

       [pic]



       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;





смотреть на рефераты похожие на "Создание игры "