Программирывание на ЯВУ

Автор работы: Пользователь скрыл имя, 21 Декабря 2011 в 12:10, курсовая работа

Краткое описание

Для курсовой работы я выбрала игру Pac-Man. Меня заинтересовала история создания этой игры. Pac-Man — культовая компьютерная игра в жанре аркады, впервые вышедшая в 1979 г. в Японии. Игра была разработана в основном работником компании Namco Тору Иватани в течение восемнадцати месяцев. Сначала это творение называлось pakku-man [пакку-ман]., что на расово японском означает «поедать, откусывать, многократно широко раскрывая рот и захлопывая его». Часто упоминается, что идея игры к Иватани пришла, когда он увидел пиццу без одного кусочка пиццы. В интервью 1986 года он отметил, что это было наполовину правдой: Иватани округлил иероглиф кути (яп. рот) как символ поедания и придал ему подобие рта.
Иватани попытался сделать игру интересной для более широких слоёв населения, п

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

Основные данные о работе 1
Содержание 2
Основная часть 5
1 Разработка эскизного и технического проектов программы 5
2 Разработка рабочего проекта 6
Заключение 42
Глоссарий 45
Список использованных источников 46
Приложения 47

Содержимое работы - 1 файл

КР, Программирование на ЯВУ.doc

— 543.00 Кб (Скачать файл)

   ImMap.Canvas.FillRect(rect(0,0,575,575));

   ImLogo.Picture.LoadFromFile('.\Data\Logo.bmp');

   State:=stMenu;

   Fmain.DoubleBuffered:=true;

   ShowPanel:=TCanvasPanel.Create(self);

   ShowPanel.Left:=12;

   ShowPanel.Top:=12;

   ShowPanel.Width:=575;

   ShowPanel.Height:=575;

   SHowPanel.Color:=0;

   ShowPanel.Parent:=self;

   ShowPanel.BorderStyle:=bsNone;

   ShowPanel.BevelInner:=bvNone;

   ShowPanel.BevelOuter:=bvNone;

   ShowPanel.Canvas.Font.Size:=20;

   ShowPanel.Canvas.Font.Name:='Areal';

   ShowPanel.Canvas.Font.Style:=ShowPanel.Canvas.Font.Style+[fsBold];

   LMSG:=TLabel.Create(Self);

   LMSG.Font.Color:=$0048C2FF;

   LMSG.Font.Size:=20;

   LMSG.Font.Name:='Arial';

   LMSG.Font.Style:=LMSG.Font.Style+[fsBold];

   LMSG.Transparent:=True;

   LMSG.Alignment:=taCenter;

   LMSG.Visible:=false;

   LMSG.Parent:=ShowPanel;

   LMSG.Top:=200;

   // Для звуклв, которые могут проигрываться  одновременно используются разные  проигрыватели.

   // Для звуков, вроде завершения  уровня, смерти, проигрыша и выигрыша, используется один проигрыватель.

   for a:=0 to 7 do

      begin

         pl[a]:=TMediaPlayer.Create(self);

         pl[a].Visible:=false;

         pl[a].Parent:=self;

      end;

   pl[plPacman].FileName:='.\Data\pacman.wav';

   pl[plSeed].FileName:='.\Data\seed.wav';

   pl[plBigseed].FileName:='.\Data\bigseed.wav';

   pl[plBonusShow].FileName:='.\Data\bonusshow.wav';

   pl[plBonusEated].FileName:='.\Data\bonuseated.wav';

   pl[plGhostEated].FileName:='.\Data\ghosteated.wav';

   pl[plGhostRespawn].FileName:='.\Data\ghostrespawn.wav';

   for a:=0 to 6 do

      pl[a].Open;

end;

//-----------------------------------------------------------------------------------------------------------

function TFmain.CheckDir(x,y:integer; dir:byte; Collide: TCollide):boolean;

var mx,my:integer;

begin

   result:=false;

   mx:=x div 23;

   my:=y div 23;

   case dir of

      dUp: my:=my-1;

      dRight: mx:=mx+1;

      dDown: my:=my+1;

      dLeft: mx:=mx-1;

   end;

   if (not (map[my+level*25,mx] and 15 in Collide)) and (x mod 23 <3) and (y mod 23 <3) then result:=true;

end;

//-----------------------------------------------------------------------------------------------------------

procedure TFmain.FormKeyDown(Sender:TObject; var Key:Word; Shift:TShiftState);

begin

   case State of

      stMenu:  case Key of

                  VK_ESCAPE:FMain.Close;

                  VK_RETURN: begin pl[plseed].Play;loadlevels; NewLevel(level); Prepare(level); end;

               end;

      stGame:  begin

                  case Key of

                     VK_LEFT: begin Player.newdir:=dLeft; Player.AgeNewDir:=DirAge; end;

                     VK_UP  : begin Player.newdir:=dUp; Player.AgeNewDir:=DirAge; end;

                     VK_RIGHT:begin Player.newdir:=dRight; Player.AgeNewDir:=DirAge; end;

                     VK_DOWN: begin Player.newdir:=dDown; Player.AgeNewDir:=DirAge; end;

                  end;

               end;

   end;

end;

//-----------------------------------------------------------------------------------------------------------

procedure TFmain.UpdateScore;

begin

   LCountSeed.Caption:=inttostr(Score.Seed); LScoreSeed.Caption:=inttostr(Score.Seed*10);

   LCountTomato.Caption:=inttostr(Score.Tomato); LScoreTomato.Caption:=inttostr(Score.Tomato*100);

   LCountCarrot.Caption:=inttostr(Score.Carrot); LScoreCarrot.Caption:=inttostr(Score.Carrot*150);

   LCountGrape.Caption:=inttostr(Score.Grape); LScoreGrape.Caption:=inttostr(Score.Grape*200);

   LCountCherry.Caption:=inttostr(Score.Cherry); LScoreCherry.Caption:=inttostr(Score.Cherry*250);

   LCountGhost.Caption:=inttostr(Score.Ghost); LScoreGhost.Caption:=inttostr(Score.Ghost*400);

   Score.Total:=Score.Seed*10+Score.Tomato*100+Score.Carrot*150+Score.Grape*200+Score.Cherry*250+Score.Ghost*400;

   LScoreTotal.caption:=Inttostr(Score.Total);

end;

//-----------------------------------------------------------------------------------------------------------

procedure TFmain.Teleport(dir:byte; var x,y:integer);

var nx,ny,prt:integer;

begin

   nx:=0; ny:=0;

   case dir of

      dUp:ny:=-23;

      dRight:nx:=23;

      dDown:ny:=23;

      dLeft:nx:=-23

   end;

   if  (x div 23 = port[0].x) and (y div 23 = port[0].y) then

      prt:=1

      else

      prt:=0;

   x:=port[prt].x*23+nx;

   y:=port[prt].y*23+ny;

end;

//-----------------------------------------------------------------------------------------------------------

procedure TFmain.AI;

var   a,temp:byte;

      newDir:TstringList;

begin

   newDir:=TstringList.Create;

   for a:=0 to level+1 do

      begin

         temp:=0;

         newDir.Clear;

         if Enemy[a].ndCount>0 then dec(Enemy[a].ndCount);

         if Enemy[a].State<>esEyes then

            if (Enemy[a].x mod 23 <3) and (Enemy[a].y mod 23 <3) and (Enemy[a].ndCount=0) then

            begin

               if checkDir(Enemy[a].x,Enemy[a].y,dUp, [mpWall]) then temp:=temp+1;     // W 1 W

               if checkDir(Enemy[a].x,Enemy[a].y,dRight, [mpWall]) then temp:=temp+2;  // 8 + 2

               if checkDir(Enemy[a].x,Enemy[a].y,dDown, [mpWall]) then temp:=temp+4;   // W 4 W

               if checkDir(Enemy[a].x,Enemy[a].y,dLeft, [mpWall]) then temp:=temp+8;

               // Существует 16 теоретически возможных вариантов расположения проходов, практисечки же - 11.

               // На основе текущей матрицы  возможных решений, призрак выбирает  приоритетное направление.

               // После AI v2.0:Artificial Idiots™ была сделана система AI v3.0:Actually Insane™, которая

               // позволяла призракам целенаправлено  преследовать игрока. Но была  удалена -

               // играть становится просто невозможно, особенно на высоких уровнях,  где много врагов.

               case temp of

                  3: case Enemy[a].direction of

                        dUp,dLeft: NewDir.Add('1');

                        dRight,dDown: NewDir.Add('2');

                     end;

                  5: case Enemy[a].direction of

                        dUp,dLeft: NewDir.Add('1');

                        dRight,dDown: NewDir.Add('3');

                     end;

                  6: case Enemy[a].direction of

                        dUp,dRight: NewDir.Add('2');

                        dLeft,dDown: NewDir.Add('3');

                     end;

                  7: case Enemy[a].direction of

                        dUp: begin NewDir.Add('1'); NewDir.Add('2'); end;

                        dRight: NewDir.Add('2');

                        dDown: begin NewDir.Add('3'); NewDir.Add('2'); end;

                        dLeft: begin NewDir.Add('3'); NewDir.Add('1'); end;                       

                     end;

                  9: case Enemy[a].direction of

                        dUp,dRight: newDir.Add('1');

                        dLeft,dDown: NewDir.Add('4');

                     end;

                 10: case Enemy[a].direction of

                        dUp,dRight: NewDir.Add('2');

                        dLeft,dDown: NewDir.Add('4');

                     end;

                 11: case Enemy[a].direction of

                        dUp: NewDir.Add('1');

                        dRight: begin NewDir.Add('1'); NewDir.Add('2'); end;

                        dDown: begin NewDir.Add('4'); NewDir.Add('2'); end;

                        dLeft: begin NewDir.Add('1'); NewDir.Add('4'); end;

                     end;

                 12: case Enemy[a].direction of

                        dUp,dLeft: NewDir.Add('4');

                        dRight,dDown: NewDir.Add('3');

                     end;

                 13: case Enemy[a].direction of

                        dUp: begin NewDir.Add('1'); NewDir.Add('4'); end;

                        dRight: begin NewDir.Add('1'); NewDir.Add('3'); end;

                        dDown: begin NewDir.Add('4'); NewDir.Add('3'); end;

                        dLeft: NewDir.Add('4');

                     end;

                 14: case Enemy[a].direction of

                        dUp: begin NewDir.Add('4'); NewDir.Add('2'); end;

                        dRight: begin NewDir.Add('2'); NewDir.Add('3'); end;

                        dDown: NewDir.Add('3');

                        dLeft: begin NewDir.Add('4'); NewDir.Add('3'); end;

                     end;

                 15: case Enemy[a].direction of

                        dUp: begin NewDir.Add('4'); NewDir.Add('1'); NewDir.Add('2'); end;

                        dRight: begin NewDir.Add('1'); NewDir.Add('2'); NewDir.Add('3'); end;

                        dDown: begin  NewDir.Add('2'); NewDir.Add('3'); NewDir.Add('4'); end;

Информация о работе Программирывание на ЯВУ