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

Автор работы: Пользователь скрыл имя, 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 Кб (Скачать файл)

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

                     end;

               end;

               if newdir.Count<>0 then

               begin

               Enemy[a].direction:=strtoint(newDir.Strings[random(newdir.Count)]);

               Enemy[a].x:=Enemy[a].x div 23 * 23;

               Enemy[a].y:=Enemy[a].y div 23 * 23;

               Enemy[a].ndCount:=23;

               end;

            end;

      end;

end;

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

procedure TFmain.GameTimerTimer(Sender: TObject);

var   a:byte;

begin

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

   ImBack.Canvas.CopyRect(rect(0,0,575,575),ImMap.Canvas,rect(0,0,575,575));

   if bonus.Kind=0 then

      begin

         Case Random(10) of     // Чем круче  бонус, тем, по идее, реже должен  появляться

            0..3: Bonus.Kind:=1;   // 40%

            4..6: Bonus.Kind:=2;   // 30%

             7,8: Bonus.Kind:=3;   // 20%

               9: Bonus.Kind:=4;   // 10%

         end;

         Bonus.Time:=random(500)+500;

      end

      else

      dec(Bonus.Time);

   if (bonus.Kind<>0) and (Bonus.Time=0) then

      begin

         pl[plbonusshow].Play;

         Bonus.Life:=BonusLife;

      end;

   if Bonus.Life<>0 then

      begin

         Imlist.Draw(ImBack.Canvas,Player.StartPos.x,Player.StartPos.y,Bonus.Kind+21);

         dec(Bonus.Life);

         if Bonus.Life=0 then Bonus.Kind:=0;

      end;

   if Player.direction <> Player.newdir then

      If CheckDir(Player.x,Player.y,Player.newdir, [mpWall, mpGate]) then

         begin

            if not(Player.direction+Player.newdir in [4,6]) then // Если  направление движения меняется  не на

               begin                                             // противоположное, то помещаем pacman в

                  Player.x:=(Player.x div 23)*23;                // точные координаты клетки.

                  Player.y:=(Player.y div 23)*23;                // Чтобы PacMan не срезал углы.

               end;

            Player.direction:=Player.newdir;

         end

         else if Player.AgeNewDir<>0 then dec(Player.AgeNewDir) else Player.newdir:=Player.direction; 

   for a:=0 to level+1 do // Обрабатываем вражин

      begin

         if Enemy[a].Delay<>0 then

            begin

               dec(Enemy[a].Delay);

               if Enemy[a].Delay=0 then Enemy[a].Speed:=2; // Исключение лишней проверки в цикле.

            end;

         if Enemy[a].ShyCount<>0 then

            begin

               dec(Enemy[a].ShyCount);

               // Предупреждаем, что время скромности призраков подходит к концу и они скоро озвереют.

               if Enemy[a].ShyCount<200 then if (Enemy[a].ShyCount mod 20 >10) then Enemy[a].State:=esAttention else Enemy[a].State:=esShy;

               if Enemy[a].ShyCount=0 then begin Enemy[a].Speed:=2; Enemy[a].State:=esNormal; end; // Исключение лишней проверки в цикле.

            end;

         if abs(Enemy[a].x-Player.x)<hit then // Высокоинтелектуальный детектор столкновений PacMan с призраками.

            if abs(Enemy[a].y-Player.y)<hit then

               begin

                  if Enemy[a].State in [esShy, esAttention] then  // Вчера тореодор - быка...

                     begin

                        pl[plghosteated].Play;

                        inc(Score.Ghost);

                        UpdateScore;

                        Enemy[a].State:=esEyes;

                        Enemy[a].ShyCount:=0;

                        Enemy[a].Speed:=3;

                        Enemy[a].direction:=(map[Enemy[a].y div 23+level*25,Enemy[a].x div 23] shr 4)-3;

                        Enemy[a].x:=Enemy[a].x div 23 * 23;

                        Enemy[a].y:=Enemy[a].y div 23 * 23;

                    end;

                  if Enemy[a].State=esNormal then // А сегодня бык - тореодора (анекдот)

                     begin

                        pl[plother].FileName:='.\Data\die.wav';

                        pl[plother].open;

                        pl[plother].play;

                        GameTimer.Enabled:=false;

                        dec(Player.Lives);

                        if Player.Lives<>0 then

                           begin

                              LLife.Caption:=inttostr(Player.Lives);

                              LMSG.Caption:=msgDie;

                              LMSG.Left:=(575-ShowPanel.Canvas.textwidth(msgDie)) div 2;

                              LMSG.Visible:=true;

                              DelayTimer.Enabled:=true;

                           end

                           else

                           begin

                              pl[plother].FileName:='.\Data\loose.wav';

                              pl[plother].open;

                              pl[plother].play;

                              LLife.Caption:=inttostr(Player.Lives);

                              LMSG.Caption:=msgLoose;

                              LMSG.Left:=(575-ShowPanel.Canvas.textwidth(msgLoose)) div 2;

                              LMSG.Visible:=true;

                              State:=stMenu;

                              ImStart.Visible:=true;

                              ImLeave.Visible:=true;

                              LStart.Visible:=true;

                              LLEave.Visible:=true;

                           end;

                     end;

               end;

         AI; // Внутри процедуры еще один  перебор по врагам. Это позволяет им вести себя более энергично.

         if Enemy[a].State=esEyes then

            begin // Если это глазки, то ведём их к месту старта.

               if (Enemy[a].x mod 23 <3) and (Enemy[a].y mod 23 <3) and (map[Enemy[a].y div 23+level*25,Enemy[a].x div 23] and 15 = mpEnemyStart) then

                  begin // Глазки добрались - приводим призрака в злобный вид.

                     pl[plghostrespawn].Play;

                     Enemy[a].x:=Enemy[a].x div 23 * 23;

                     Enemy[a].y:=Enemy[a].y div 23 * 23;

                     Enemy[a].State:=esNormal;

                     Enemy[a].direction:=dUp;

                     Enemy[a].ShyCount:=0;

                     Enemy[a].Speed:=0;

                     Enemy[a].Delay:=100; // Инкубационный период :)

                  end

                  else

                  begin

                  if Enemy[a].direction<>(map[Enemy[a].y div 23+level*25,Enemy[a].x div 23] shr 4)-3 then

                     begin

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

                           begin

                              Enemy[a].x:=Enemy[a].x div 23 * 23;

                              Enemy[a].y:=Enemy[a].y div 23 * 23;

                              Enemy[a].direction:=(map[Enemy[a].y div 23+level*25,Enemy[a].x div 23] shr 4)-3;

                           end;

                     end;

                     case Enemy[a].direction of

                        dUp:     Enemy[a].y:=Enemy[a].y-Enemy[a].Speed;

                        dRight:  Enemy[a].x:=Enemy[a].x+Enemy[a].Speed;

                        dDown :  Enemy[a].y:=Enemy[a].y+Enemy[a].Speed;

                        dLeft:   Enemy[a].x:=Enemy[a].x-Enemy[a].Speed;

                     end;

                  end;

            end

            else

            case Enemy[a].direction of

               dUp:     if Enemy[a].y mod 23>2 then Enemy[a].y:=Enemy[a].y-Enemy[a].Speed

                        else

                           if CheckDir(Enemy[a].x,Enemy[a].y,dUp, [mpWall]) then Enemy[a].y:=Enemy[a].y-Enemy[a].Speed else Enemy[a].y:=Enemy[a].y div 23*23;

               dRight:  if Enemy[a].x mod 23>2 then Enemy[a].x:=Enemy[a].x+Enemy[a].Speed

                        else

                           if CheckDir(Enemy[a].x,Enemy[a].y,dRight, [mpWall]) then Enemy[a].x:=Enemy[a].x+Enemy[a].Speed else Enemy[a].x:=Enemy[a].x div 23*23;

               dDown:   if Enemy[a].y mod 23>2 then Enemy[a].y:=Enemy[a].y+Enemy[a].Speed

                        else

                           if CheckDir(Enemy[a].x,Enemy[a].y,dDown, [mpWall]) then Enemy[a].y:=Enemy[a].y+Enemy[a].Speed else Enemy[a].y:=Enemy[a].y div 23*23;

               dLeft:   if Enemy[a].x mod 23>2 then Enemy[a].x:=Enemy[a].x-Enemy[a].Speed

                        else

                           if CheckDir(Enemy[a].x,Enemy[a].y,dLeft, [mpWall]) then Enemy[a].x:=Enemy[a].x-Enemy[a].Speed else Enemy[a].x:=Enemy[a].x div 23*23;

            end;

         if map[Enemy[a].y div 23+level*25,Enemy[a].x div 23] and 15 = mpPort then Teleport(Enemy[a].direction, Enemy[a].x, Enemy[a].y);

         if Enemy[a].State=esShy then Imlist.Draw(ImBack.Canvas,Enemy[a].x,Enemy[a].y,62+Enemy[a].Frame div 10)

            else if Enemy[a].State<>esEyes then Imlist.Draw(ImBack.Canvas,Enemy[a].x,Enemy[a].y,48+Enemy[a].ColorIndex*2+Enemy[a].Frame div 10);

         Imlist.Draw(ImBack.Canvas,Enemy[a].x,Enemy[a].y,15+Enemy[a].direction); // Наклеиваем глазки

         inc(Enemy[a].Frame); if Enemy[a].Frame>19 then

            begin

               Enemy[a].Frame:=0;

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