Компьютерный форум
Правила
Вернуться   Компьютерный форум > Форум программистов > Языки программирования > Вопросы начинающих программистов
Перезагрузить страницу Написание игры мортал комбат на С++
Ответ
 
Опции темы Опции просмотра
  (#1 (permalink)) Старый
[GANQ] QWERTY [GANQ] QWERTY вне форума
Member
 
Сообщений: 55
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 30.12.2005
По умолчанию Написание игры мортал комбат на С++ - 02.08.2006, 05:57

Задумал написать пробную игрульку на С++ - пока без всякой графики и сложностей. Наверное, народ и до меня такое на форуме пробовал, если да, отошлите меня туды. Ну вот, суть в чем: все играли в MortalCombat на Sega? Сильно упрощенная версия этого. Е
Есть 2 бойца. Ограничимся минимумом их возможностей - они могут перемещаться по оси Х, бить, получать по башне, ну и умирать. Соответственно эти бойцы имеют кол-во жизней (100 в начале игры, 0 - когда помирают) и координату Х. Вот что я насоображал:
Есть класс TБоец.
Свойства:
health, x;//жизни и координаты

Методы:
Идти,
Бить,
Получать урон,
Умирать.

Тут слегка озадачился - а как же бойцы будут, например, бить друг друга, ведь метод Бить примененный бойцом№1 вызывает метод Получать по мордам у бойца№2 только если расстояние между ними меньше какой-нибудь дельты. А кто сие будет проверять? Я подумал, так может завести такого последника между ними? Тогда, например, метод Бить быдет описан так:
Боец посылает сообщение посреднику, что он сделал удар. Посредник проверяет расстояние между бойцами и если оно меньше дельты, говорит бойду№2: "получи урон". Тогда боец№2 применяет метод "Получить урон" и уменьшает свою жизнь. Ну и так далее. Я не знаю, по-моему это называется "взаимодействие клиентов с управляющим сервером", так?
Ответить с цитированием
  (#2 (permalink)) Старый
c++ c++ вне форума
Member
 
Сообщений: 962
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 31.12.2003
По умолчанию 04.08.2006, 01:44

Думаю, что идея верная. И в качастве такого "посредника" может выступать сама модель сцены. Крутится цикл, в котором эта сцена обсчитывается: анализируются состояния всех объектов (например, первый ударил туда-то), дальше смотрится с учетом расстояния, состояния другого бойца, может ли быть нанесен удар. Короче, изменяется состояние другого объекта.
Также совершенно верно, что объекты на сцене напрямую не могут воздействовать друг на друга (т.е. нельзя вызывать из функции "удар" одного "разбить нос" другого.), иначе при увеличении количества объектов может все стать слишком запутанным и неоптимальным. Менять состояние объектов может только сцена.
Если игра задумывается сетевой, то обсчет сцены может находиться на сервере, а клиенты просто отсылают серверу состояние объектов, принимают измененные и рендерят сцену.
Ответить с цитированием
  (#3 (permalink)) Старый
[GANQ] QWERTY [GANQ] QWERTY вне форума
Member
 
Сообщений: 55
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 30.12.2005
По умолчанию 05.08.2006, 21:16

Цитата:
И в качастве такого "посредника" может выступать сама модель сцены
А чего это за модыль? Реализовать её как класс Сцена, с данными-членами - моими бойцами?
Цитата:
Крутится цикл
Такой примерно цикл?
Код:
Цикл пока (ИГРА_НЕ_ЗАКОНЧИЛАСЬ)
{ набор реакций на действия участников
}
А еще, как вы думаете, все это частье будет поддаваться разного рода апдейтам и наворотам - добавлению разного вида бойцов, добавление ударов, таймера и пр.?
Как бы то ни было, начинаю кодить!
Послезавтра все выложу, если кому интересно.
Ответить с цитированием
  (#4 (permalink)) Старый
c++ c++ вне форума
Member
 
Сообщений: 962
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 31.12.2003
По умолчанию 06.08.2006, 22:06

Цитата:
А чего это за модыль? Реализовать её как класс Сцена, с данными-членами - моими бойцами?
Класс или другая сущность языка програмирования, на котором ты это реализовываешь - неважно. Идея просто состоит в том, что сцена - контейнер для объектов (пол, бойцы, стены и т.п.). Правда, эти объекты в свою очередь могут быть тоже контейнерами, например, боец содержит в себе руку, нос и т.п.
Цитата:
Такой примерно цикл?
Ну да, т.е. в теле цикла могут выбираться пользовательские сообщения, анализироваться состояния игроков, изменяться их состояние.
Цитата:
А еще, как вы думаете, все это частье будет поддаваться разного рода апдейтам и наворотам - добавлению разного вида бойцов, добавление ударов, таймера и пр.?
Будет, потому что здесь никакой архитектуры пока не заложено. Это просто мысли о том, как работают большинство игр.
Ответить с цитированием
  (#5 (permalink)) Старый
[GANQ] QWERTY [GANQ] QWERTY вне форума
Member
 
Сообщений: 55
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 30.12.2005
По умолчанию 09.08.2006, 05:17

М-да, я оказался тупее, чем я он себя ожидал...
Как-то удивительно дурацки продвигается дело.
Дошел я до класса боец, метод "удар рукой в корпус". Начинаю размышлять. Так, нехай мой будущий интерфейс проделывает следующий оператион: когда юзер нажиает кнопочку, допустим, F на клавиатуре, интерфейс приказывает Бойцу1 махнуть рукой параллельно земле. Это по-любому. Но, вот незадача - появляется слово "рука, махающая в воздухе". Это ж как ее реализовать, булинкой в приватном разделе описания класса боец??



Или не страдать фигней и сдеаль бойца чем-то получше материальной точки, с жизнью? А чем?
В идеале, бойца должно характеризовать 5 следующих параметров (см. рисунок)
1. Рука. Положения: согнута(не атакует), наносит удар в корпус, голову, пах
2. Нога. Положения. прямая(не атакует), наносит удар в корпус, голову, пах
3. Координата.
4. Лежит боец или пока жив.
5. Его жизни на данный момент.

В виде каких структур данных это все сделать лучше всего?.
Допустим, координата - объект класса точка.Здоровье - int. "Свойство лежачести"-bool. А руки-ноги? Тоже int, где условиться, что 0-без атак, -1 - пах , 1-корпус, 2-голова? Или руки-ноги классу боец ненежны и это все реализовать в интерфейсе?
Ответить с цитированием
Ads.
  (#6 (permalink)) Старый
LARS LARS вне форума
Member
 
Сообщений: 568
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 20.06.2005
По умолчанию 12.08.2006, 03:07

Цитата:
В виде каких структур данных это все сделать лучше всего?.
Допустим, координата - объект класса точка.Здоровье - int. "Свойство лежачести"-bool. А руки-ноги? Тоже int, где условиться, что 0-без атак, -1 - пах , 1-корпус, 2-голова? Или руки-ноги классу боец ненежны и это все реализовать в интерфейсе?
Ты на правильном пути...только вот уточню - руки, ноги и места ударов реализуются с помощью понятия СОСТОЯНИЕ! Допустим:

Код:
 
// пример на Delphi
  TFighter = class
     X:integer;
     Health:integer;
     Dead:boolean;
       Status:integer; // действие (0-покой, 1-атака, 2-оборона )
       Method:integer; // чем бьем или блок ставим (0-рука, 1-нога)
       Target:integer; // куда бьем (0-голова, 1-корпус, 2-пах)
   private
      procedure Hit; // здесь в зависимости от клавиши выставляются флаги Status, Method, Target
   end;
и ни в коем случае не вызывай какие-то функции противника при ударах!!! У каждого бойца должна быть функция типа CheckForHit, которая проверяет положение противника и его Status, в зависимости от которого и происходит допустим урон физни. А эта функция должна автоматически вызываться в общем цикле:

цикл:
- двигаем если надо героя;
- ударяем если надо;
- обороняемся если надо;
- проверяем на наличие ударов со стороны противника;
- прорисовываем героя;
конец цикла;

на самом деле, первые четыре функции можно засунуть в одну общюю...типа Action;

если правильно все сделать, то отпадают проблемы связанные с вопросами типа

Цитата:
Тут слегка озадачился - а как же бойцы будут, например, бить друг друга, ведь метод Бить примененный бойцом№1 вызывает метод Получать по мордам у бойца№2 только если расстояние между ними меньше какой-нибудь дельты. А кто сие будет проверять?
Удачи!
Ответить с цитированием
  (#7 (permalink)) Старый
[GANQ] QWERTY [GANQ] QWERTY вне форума
Member
 
Сообщений: 55
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 30.12.2005
По умолчанию 15.08.2006, 02:56

Нi, дорогие громадяны, це не наш шлях! У меня в бойце сейчас прописаны только операции с его здоровьем, ну и движение его как точки. А реакцию на нажимение кнопочек будет делать сцена...
Ответить с цитированием
  (#8 (permalink)) Старый
LARS LARS вне форума
Member
 
Сообщений: 568
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 20.06.2005
По умолчанию 15.08.2006, 04:10

Цитата:
Нi, дорогие громадяны, це не наш шлях!
по английски не понимаем...

Цитата:
У меня в бойце сейчас прописаны только операции с его здоровьем, ну и движение его как точки. А реакцию на нажимение кнопочек будет делать сцена...
интересно как это...поделись, коли работает!
Ответить с цитированием
  (#9 (permalink)) Старый
[GANQ] QWERTY [GANQ] QWERTY вне форума
Member
 
Сообщений: 55
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 30.12.2005
По умолчанию 16.08.2006, 14:46

Ок, обязательно все вышлю как только инет в общаге опять появится. Ух, как я рад, что это счастье уже хоть как-то работает!!! Кстати, следющим шагом планируется добавить разные типы персонаже, как наследников класса Боец. Только пока ума не приложу, как они будут обрабатываться сценой. По-моему, тут придется Бойца сделать виртуальным классом... впрочем, пока я в этом не разбираюсь, пойду читать книжки!
А еще, подскажите, как сюда лучше выкладывать мои исходники? просто с тегом код? Дык, уже 6 файлов!

Цитата:
по английски не понимаем...
Ух, буржуины... все бы им английский...
Ответить с цитированием
Ads
Ответ

Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Trackbacks are Вкл.
Pingbacks are Вкл.
Refbacks are Выкл.


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Написание игры ЧИСЛО sven007 C++ Builder 4 02.05.2011 14:46
Программа распознавания русской речи - Комбат denis47 Вопросы начинающих программистов 7 28.11.2010 12:05
Написание шахматной игры с алгоритмом хода компьютера alexande-rus Вопросы начинающих программистов 1 20.11.2010 21:16
Написание игры шахматы в Delphi 7 GodZiLA Вопросы начинающих программистов 0 24.10.2010 19:01
Практика J2ME написание игры murdoc1989 Java 1 03.02.2010 11:49
Написание игры на С++ при помощи классов faraon Вопросы начинающих программистов 4 24.03.2006 07:04
Написание сетевой игры на Delphi SilentmaN Вопросы начинающих программистов 3 06.02.2006 14:43
Написание игры на С++ MSDN SendInput imported_GOD Вопросы начинающих программистов 4 28.12.2005 14:19
Написание Военно-Экономической On-Off-Line игры Kimusik Вопросы начинающих программистов 3 08.12.2005 12:14
Написание сетевой игры с использованием сокетов -=Shade=- Сетевое программирование 1 19.10.2005 13:33
Написание сетевой игры Olex C++ Builder 6 18.01.2005 03:27
Написание кода игры сосчитать быков и коров Alan Вопросы начинающих программистов 1 31.07.2004 00:47



Powered by vBulletin® Version 3.8.7
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.
Нardforum.ru - компьютерный форум и программирование, форум программистов