Информатика и образование
  Мобильная версия сайта            
               
[Главная] [Новости]
[Статьи]
[Проекты]
[Ссылки]
[Автор]
               
    [Архив новостей]        
               
  [Форум] на форуме можно задать вопрос, посмотреть ответы на часто задаваемые вопросы  
       
  Здравствуйте! Вы попали на информационно-образовательный сайт посвященный информатике, информационным технологиям и компьютерным играм. Подробнее о целях и задачах сайта в разделе Главная. [English version of this page here...]    
       
  [Базовые уроки по DirectX] [Основы DirectMusic на Delphi] [Основы DirectInput8 на Delphi] [Основы DirectSound8 на Delphi]    
  [Разработка компьютерной игры] [Пример игры Donuts3D] [Delphi DirectX]    
       
  Эмулятор электронной игры Электроника ИМ-02 "Ну, Погоди!"    
       
  триал-версия, 1,34 Mb   скачайте полную версию игры, зарегистрируйтесь и получите бесплатно полный исходный код игры для компиляции в delphi 7 или 2006 и уроки delphi directx 8.1 содержащие статьи по созданию собственной 2D/3D игры в среде delphi directx    
       
  Урок 6 Игровая логика    
       
  О том, что потребуется для данного урока читайте в основном разделе - уроки delphi directx 8.1    
       
  Далее у читателя подразумевается наличие базовых знаний языка Delphi.    
       
  [назад] [страница 1] [далее] [к содержанию]    
       
 

Игровая логика - это формализованный в коде набор игровых идей, которые составляют игровой геймплей.

В игре "Ну, Погоди!" игровая логика сводится к следующему алгоритму, выраженному в словесной форме -

игрок должен управлять положением волка, располагая его в одном из 4х возможных. С лотков катятся яйца. По достижении конца лотка яйца падают, если у этого лотка не стоял волк, при этом выглядывающий из окошка заяц вызывает появление из разбитого яйца бегущего цыпленка. Отсутствие зайца приводит к полному разбиванию яйца. За пойманные яйца начисляются призовые очки, за разбитые - штрафные. Бегущему цыпленку соответствует пол-штрафного очка, полностью разбитому яйцу - 1 штрафное очко. Игра продолжается до 3 штрафных очков или до троекратного набора 999 очков. В последнем случае отображается поздравительный текст и небольшой мультфильм.

   
       
 

Теперь посмотрим на код, который должен реализовать описанную логику -

в методе TD3DGameApp.UpdateInput

изменение положения волка происходит следующим образом

{...}

if PressButton in m_DXInput.States
then begin
Area := TargetBtnArea(GetCursorPos);
//в данном случае проверяется нажатие на кнопку управления волком на игровой

//панели путем наведения на неё указателя мыши и нажатия левой кнопки мыши

{...}

if LeftUpCatch in m_DXInput.States then begin //т. к. на больших скоростях игры потребуется прямое управление
Area := 0;
//волком от клавиатуры, то это происходит таким образом
end;

{...}

Далее текущее положение волка заносится в специальную переменную -

Это происходит в реализации метода TD3DGameApp.FrameMoveGameSituation -

//положение волка
if (Area >= 0) and (Area < 4) then begin
WolfPos := 1 + Area;
WolfPosSet := WolfPosSet + [WolfPos];
end;

и далее -

//если игра не остановлена из-за разбитого яйца
if not StopGame then begin

//появление нового яйца на лотке
CreateNewEgg;

//качение яиц по лоткам
RollEggs;

//появление зайца из окошка
RabbitLookedFrom;

//счетчик изменения темпа игры
IncreaseGameSpeed;


end; {of StopGame or ResetShtraf}

CrashEggs; //разбивание яиц, бег цыплят


//мерцание, сброс штрафных очков

FlashShtraf;

   
       
 

Реализацию показанных методов Вы можете посмотреть в исходном коде игре "Ну, Погоди!".

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

   
       
  Переходим к практическим упражнениям.    
       
 

Используя код приложения из предыдущего - 5 урока - GameClasses_src попробуйте реализовать такой простейший игровой процесс:

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

   
       
  В законченном виде это уже реализовано в проекте "В плену желаний". Можете скачать и посмотреть, но обязательно попробуйте реализовать это сами в качестве практики.    
       
  плен желаний    
       
 

В ходе реализации плена желаний я разрешил одну логическую ошибку, в результате которой код, отвечающий за формирование рельефа и перемещение по нему персонажа из примера 3D-игры Scene2Game будет работать корректно. Это полноценный пример по построению сложной игровой 3d-сцены с анимированными персонажами, игровыми панелями и прочими атрибутами. Пример также способен отображать рельеф и перемещать персонажей по нему, но для этого его немного надо доработать. Можете попробовать сами.

Для компиляции примера понадобится библиотека delphi directx.

   
       
  Пример сложной игровой сцены    
       
 

Особенности примера:

- вывод 9 зон земной поверхности и объектов на ней (деревья), возможно построение сцены по данным файла - карты;

- свободная и привязанная к персонажу камера (переключение клавишей [V]);

- переключение между персонажами [пробел];

- анимированные персонажи (хотьба, прыжки, падение); управление персонажем j, k, l, i

- игровые панели - жизни, сила броска;

- падающие с неба предметы (кубики) и взаимодействие с ними - при подбегании к кубику он начинает медленно взмывать в воздух, при падении на персонажа персонаж получает повреждения;

- поиск ближайших кубиков, показ их стрелками;

- рассчет траекторий полета (не доделано);

   
       
 

В завершение данного урока хотелось бы обратить Ваше внимание на реализацию алгоритма постепенного нарастания темпа в игре "Ну, Погоди!". Для этого загляните в реализацию метода TD3DGameApp.IncreaseGameSpeed

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

   
       
       
       
  [назад] [страница 1] [далее] [к содержанию]    
       
       
       
       
       
  по всем вопросам пишите на megainformatic@mail.ru или оставьте сообщение на форуме    
       
 

 

Обновления и новости о развитии Delphi DirectX проекта
смотри на сайтах:

http://www.megainformaticsite.pochta.ru

http://www.megainformatic.boom.ru

http://www.megainformatic.narod.ru

 

   
       
     
 

Cвои пожелания, вопросы или заметки отправляйте на:

megainformatic@mail.ru или пишите на форуме

 
     
   Обмен ссылками  
     
     
             
 
 
         
(с) МЕГА ИНФОРМАТИК 2006-2009
Hosted by uCoz