Как вам идея сделать танчики, которые были на денди? Допустим добавим возможность играть на троих? Как идея? Думаю многим было бы интересно... :sml:
Можно было бы сделать на дельфи...
ЗЫ Позже можно было бы еще придумать возможностей ,подумали бы всем форумом :)
Проект пока завис! Пока не наидутся моделеры и художники! Также требуется програмист, который способен освоить уже готовый движок и ядро! Если вы желаете помочь, записываитесь! :sml:
Участники
Скрытый текст:
DEAD_Angel - художник andNsX - художник HaNproKilleR - художник ^i_Swep - j2me программист L'ombre - консультант ORTODOX - руководитель проекта razor21 - програмист pokibor - програмист-консультант
Требуются еще участники!
***
Скрытый текст:
основные сущности в игре:
- уровень, он же interaction manager, в дальнейшем - Level
Управляет взаимодействием всех сущностей
- матрица. состоит из элементов. что очевидно..
- элемент матрицы. CellItem. то, из чего состоит матрица.
- более сложные сущности, в основе которых лежит так называемый Traverser -
это нечто, способное двигаться относительно матрицы.
Оно имеет координаты и направление
при этом остальные объекты матрицы могут оказывать влияние на это движение.
существует два основных подвида Traverser'а:
- MatrixTraverser - это объект, движущийся относительно матрицы И
привязанный к матрице, оставляющий в ней след, имеющий размер.
т.е. вместе с движением объекта перемещается его представление в матрице
- PointTraverser - безразмерный объект, движущийся относительно матрицы И НЕ
оставляющий в ней след (но при этом взаимодействует с остальными объектами)
т.е. объект движется, но не имеет представления в матрице
Таким образом, Танк - это такой специальный MatrixTraverser,
умеющий стрелять, проезжающий по определённым клеткам и не умеющий по остальным и тд.
Снаряд - это PointTraverser, с соответствующими свойствами
Ближе к деталям:
Абстрактные сущности.
Destroyable
Сущность материальная, которую можно разрушить
свойства:
- Armor. Броня, Порог прочности.
определяет взаимодействие с PointTraverser'аим (снарядами)
Чтобы нанести повреждение, нужно, чтобы мощность снаряда была не меньше.
Если броня равна нулю, то снаряды пролетают сквозь этот объект.
- HitPoints. Численное прдставление прочности.
если снаряд пробил броню, то HitPoints уменьшаются.
При достижении значения 0 объект разрушен и исчезает из матрицы
(т.е. заменяется на пустой)
данное свойство показывает текущее значение
- MaxHitPoints - а это максимальное значение Hit Point'ов данного объекта.
Traverser
это нечто движущееся относительно матрицы. Основные свойства:
- X,Y. координаты центра в матрице
- Direction. Направление, одно из четырёх.
- Speed/Delay - так или иначе задаёт скорость
MatrixTraverser
Обладает размером. В общем случае прямоугольный.
- Width, Height - размеры, в клетках матрицы.
Какой ячейке соответствуют координаты, надо решить позже.
Предположительно, той, что ближе к центру.
например, если координата объекта шириной Width == 4 X == 2,
то этот объект занимает ячейки матрицы 1, 2, 3, 4 (нумерация, естественно, начинается с нуля)
(естественно это не окончательное решение)
- ID - может быть некий тип, но пока необязательно..
PointTraverser
на данный момент ещё не решил, должен ли он отличаться просто от Traverser'а,
кроме смысла. А по смыслу - это предок всех снарядов.
Скорее, будут отличаться обработчики событий.
PointTraverser движется иначе. А именно - МЕЖДУ ячейками
(т.е. координаты интерпретируются по-другому)
например, если координата X == 2, то объект находится между второй и третьей ячейкой.
Неабстрактные сущности
CellItem
Элемент (ячейка) матрицы. Потомок Destroyable
дополнительные свойства:
- Passability. Проходимость.
определяет взаимодействие с MatrixTraverser'аим (танками)
(вещественное число. 0 - объект непроходим; отличное от нуля значение влияет на скорость;
1 - нормальная скорость; 0.5 - замедленная в два раза, 2 - удвоенная и тд)
поскольку некоторые клетки могут быть доступны для MatrixTraverser'ов,
для представления этого понадобится ещё одно поле, пусть будет
- Meta. Флаг, который каким-либо образом показывает,
что эта ячейка занята каким-то MatrixTraverser'ом.
Например, порядковый номер танка (индекс в контейнере танков)
Для ядра игры этих свойств достаточно. Для визуализатора понадобится ещё хотя бы одно -
- ID. Уникальное число, идентификатор этого объекта.
Если все взаимодействия определяются вышеописанными свойствами,
то это поле определяет, как нужно объект отрисовывать.
склоняюсь к тому, чтобы не делать сложной иерархии классов для объектов матрицы;
просто все объекты принадлежат к одному классу и отличаются набором свойств.
тогда можно задавать все объекты в рантайме - например, загружать из файла.
Tank
танк является потомком MatrixTraverser'а и Destroyable
(т.е. это объект, способный двигаться в матрице, который можно уничтожить)
со своим набором свойств
- Weapons. вектор орудий. об этом позже.
- Owner. кто этим танком командует. номер игрока, флаг игрок/AI и тд
Missile
потомок PointTraverser'а.
специфические свойства:
- AttackPower. "Пробивная сила". Сравнивается с Armor объектов и танков.
- Damage. Повреждения, наносимые объектам, после того, как пробита броня.
- DamageDepth, DamageWidth - определяют область, затронутую взрывом
- Charges. Свойство, призванное обобщить концепцию снаряда.
Это "количество зарядов" - сколько раз снаряд может взорваться.
То есть, снаряд, после того, как он столкнулся со стеной и взорвал её,
может полететь дальше. Звучит абсурдно для снаряда, но это может быть лазер
или плазменный шар. При достижении количества 0 снярад уничтожается.
(если броня не пробита, или же хитпойнтов оказалось слишком много,
то не важно, сколько зарядов - снаряд уничтожается)
- Owner. Танк, выпустивший этот снаряд. Это понадобится для обработки Friendly Fire -
смогут ли танки противника повреждать дуг друга.
Остальные сущности
Weapon.
Оружие танка. определяется свойствами:
- Тип снаряда. идентификатор (если у снарядов будут идентификаторы)
или собственно указатель на объект.
- Скорострельность. - это максимальное количество снарядов, выпущенных из этого орудия,
которые могут существовать в каждый момент времени.
Например, если 1 - то танк не может выстрелить, пока не взорвётся выпущенный ранее снаряд.
и т.д.
У танка может быть несколько орудий, между которыми можно переключаться.
Делать заканчивающиеся снаряды, думаю, нет смысла.
Explosion
Столкновение снарядов с чем-либо, обладающим ненулевой бронёй,
порождает экземпляр этого класса.
Возможно, нет смысла делать эту сущность, так как решающую роль будет играть метод,
вызываемый во время взрыва. Этот метод обходит все ячейки и танки, и сообщает им,
что с ними случилось,
т.е. какой атаке они подверглись, какие повреждения могут получить итд.
Наличие объекта этого класса может быть полезно для отрисовки
RespawnPoint
точка возрождения. так как это точка, то это просто потомок какого-нибудь Traverser'а
PowerUp
объект, имеющий размер, при "столкновении" с которым танк получает какой-либо бонус:
- новое оружие
- усиление брони или HP
и тд
потомок MatrixTraverser'а, хоть и не движется. Основное свойство - тип бонуса.
BaseStation
(название надо обдумать)
это такой объект, который вражеские танки стремятся уничтожить.
опционально. тоже потомок MatrixTraverser'а и Destroyable
Структура игрового процесса
Основная сущность:
Level, уровень.
основные элементы:
- Матрица
- Вектор танков.
- Список снарядов
дополнительные:
- контейнер точек возрождения
- контейнер powerup'ов
- "базовая станция", которую нужно защищать.
(к контейнеру танков потребуется произвольный доступ,
а объекты из контейнера снарядов должны легко удаляться)
игровое время дискретно. каждую единицу времени каждый активный объект выполняет некое
элементарное действие - сдвинуться по ходу движение на некоторое число клеток
(определяемое скоростью. или же, если скорость слишком маленькое, пропустить этот момент),
повернуться или выстрелить.
Движение порождает события - вызывается метод движущегося объекта, в котором принимается
решение, может ли он сдвинуться и что с ним после этого произойдёт.
Двигаться могут танки - находящиеся в одном списке - и снаряды - в другом.
Выстрел любого танка добавляяет его снаряд в список снарядов.
Танк может добавить в список несколько снарядов.
попадание снаряда во что-либо может удалить его из этого списка.
Попадание в танк может его уничтожить - уничтоженный танк не удаляется из контейнера,
так как возможен respawn - этот экземпляр будет перемещён в другое место и "воскрешён"
(если закончились все танки в "запасе",
то этот танк просто пропускается при дальнейшей обработке).
Скрытый текст:
http://www.shadow.dynalias.com/tanks/core.rar
пароль у архива t@nk$c0re
фиксы:
- Tank::OrderMove() вызывает MatrixTraverser::Move() (раньше вызывал Traverser::Move(), и это было неправильно)
- MatrixTraverser::RemoveTrace() правильно удаляет из матрицы движущиеся в момент удаления траверсеры (в предыдущей версии я забывал очищать зарезервированные клетки)
pokibor
25.12.2007 13:52
Хм... возможно, возможно, учитывая, что обсуждение физики гонок заглохло (с моей стороны причина более-менее объективная - книга, асприрантура, работа, модерирование), то написание чего-то более простого и выкладывание исходников будет в тему...
Под что писать-то? Под DirectDraw? Или ещё какие предложения?
ORTODOX
25.12.2007 13:54
pokibor
я раньше пытался написать на DelphiX ,может на ней и попробуем?
pokibor
25.12.2007 14:03
На Delphi? Тогда от меня ждите только помощи советами. Я на Delphi писать ничего не буду. DelphiX - это что ли DirectDraw-движок для Delphi, или я ошибаюсь?
В любом случае писать что-то на Паскале - меньшее, что мне на данный момент хочется. Извините. Возможно, я оторвусь от коллектива и, если будет желание, замучу что-нибудь такое на Irrlicht или непосредственно на DirectX/OpenGL...
ORTODOX
25.12.2007 14:07
Цитата:
Сообщение от pokibor
(Сообщение 2952147)
На Delphi?
ты С++ изучаешь?
ЗЫ Я С++ даже на комп ни разу не ставил :))
ЗЫЫ Я знаю малость дельфи, изучаю потехонечку, сеичас принялся за массивы...а так то хоть неа делфые я помочь чем то мог, а С++ вообще без понятия :(
Создам сеичас участников, кто хочет чем то помочь, записываитесь! :)
pokibor
25.12.2007 14:21
Цитата:
Сообщение от ORTODOX
(Сообщение 2952175)
ты С++ изучаешь?
Не поверите, я его знаю. А вот Pascal уже лет пять как забыл, словно страшный сон.
Цитата:
Сообщение от ORTODOX
(Сообщение 2952175)
ЗЫ Я С++ даже на комп ни разу не ставил :))
Я рад. А не помешало бы.
Цитата:
Сообщение от ORTODOX
(Сообщение 2952175)
ЗЫЫ Я знаю малость дельфи, изучаю потехонечку, сеичас принялся за массивы...а так то хоть неа делфые я помочь чем то мог, а С++ вообще без понятия :(
А не кажется ли Вам, что подобных знаний просто не хватит даже для реализации танчиков?
Цитата:
Сообщение от ORTODOX
(Сообщение 2952175)
Создам сеичас участников, кто хочет чем то помочь, записываитесь! :)
Хорошо. Я закреплю первый пост. Можете в него добавлять список заинтересовавшихся. Посмотрим, что выйдет.
ORTODOX
25.12.2007 15:45
Цитата:
Сообщение от pokibor
(Сообщение 2952253)
А не кажется ли Вам, что подобных знаний просто не хватит даже для реализации танчиков?
ну так я бы модели создал, я по идее моделированием занимался :) А вы бы програмировали :))
Цитата:
Сообщение от pokibor
(Сообщение 2952253)
Хорошо. Я закреплю первый пост.
спс
L'ombre
26.12.2007 00:08
Цитата:
Сообщение от ORTODOX
(Сообщение 2952023)
Как вам идея сделать танчики, которые были на денди?
посещала меня такая идея лет шесть назад. в результате сделал этакое нечто под DOS на Borland Pascal 7. Игра, созданная с наскока, без проектирования, на чистом энтузиазме - нельзя так игры делать. код далёк от совершенства, осталась парочка багов, но в целом работает, и даже содержит в некотором роде оригинальные отличия от тех самых NES'овских Tank 1990/Battlecity/и тд.
Скрытый текст:
как и обещал, линк был актуальным в течение недели.
Так как сообщений в PM после этого не было, то (несмотря на попытки скачивания) линк удаляю
Перезалей пожалуиста на slil.ru или подобное"! + поставлю :)) (и надеюсь не я один )0))))
pokibor
26.12.2007 13:20
ORTODOX
Такое бывает порой. Браузер зачем-то пытается открыть rar-архив вместо того, чтобы его скачивать. Воспользуйтесь лучше качалкой какой-нибудь для скачивания.
Впрочем, специально для Вас я перезалил L'ombre'овыский архив на ifolder, однако ссылку и пароль пошлю через личку, чтобы не нарушать его прав.
ORTODOX
26.12.2007 13:28
pokibor
ага спасибо1 :))
В след. выборе лучших модераторов выберу тебя, редко так помогают :)) !!!
Не подлизывайтесь и не флудите.
^i_Swep
11.01.2008 20:56
Хмм.. Есть вариант написать под сотовый
Однако для придания ускорения (мы же хотим завершить за неделю ? :) ) не плохо бы ещё одного программера на java me
ORTODOX
11.01.2008 22:51
^i_Swep
Неплохо было бы :)) На сотовый,как раз в школе гамать :)) Еще через блютуз,вообще бы чинно было :)
DEAD_Angel
12.01.2008 00:50
А проект в 2D или 3D графике будет ?
Цитата:
Сообщение от ORTODOX
(Сообщение 3119305)
Неплохо было бы На сотовый,как раз в школе гамать Еще через блютуз,вообще бы чинно было
Да под сотовый хорошо будет, но вот только у разных фирм телефонов платформы разные, придётся вам как минимум 3 версии выпускать.
ORTODOX
12.01.2008 19:35
Цитата:
Сообщение от DEAD_Angel
(Сообщение 3120464)
А проект графике будет
Цитата:
Сообщение от DEAD_Angel
(Сообщение 3120464)
проект в 2D
Обычные дендивские танчики,ну что,есть участники?
andNsX
13.01.2008 17:55
ORTODOX
Жаль что тебя забанили, но предлагаю сильно не парится и попробовать на GameMaker, тем более, что pokibor дело говорит, знаний не хватет, а вот на Гамаке очень легко будет. Так что если Гамак, то я в команде.
DEAD_Angel
13.01.2008 21:47
Цитата:
Сообщение от ORTODOX
(Сообщение 3126447)
Обычные дендивские танчики,ну что,есть участники?
Ну я дезайнером могу быть (я не профи, и не очень хорошо рисую: смотри на мой аватар (это лучший мой рисунок) и ещё я плохой аниматор), но сильно не расчитывайте... (у меня инет плохой, и не всегда доступ в инет будет)
^i_Swep
13.01.2008 23:01
Цитата:
Сообщение от DEAD_Angel
(Сообщение 3120464)
Да под сотовый хорошо будет, но вот только у разных фирм телефонов платформы разные, придётся вам как минимум 3 версии выпускать.
В чём отличия ? Размер экрана? Можно изначально нацеливаться на так сказать расширяемость. И для первого релиза сделать например под 178х220
Цитата:
Сообщение от DEAD_Angel
(Сообщение 3120464)
А проект в 2D или 3D графике будет ?
Хмм.. зачем 3D танчикам ? :) Лишний труд, цени время.
andNsX
К сожалению, не знаю про GameMaker. Также вынужден согласится, что у ORTODOX маловато знаний.. Но, продолжая о своём.. могу кодить под j2me, но одному лень. Поэтому и сказал - ищем второго Java2 ME программиста (а ещё художника, и вообще всех - кто что предложит ), и танчики будут готовы через неделю. ORTODOX может быть координатором (идея его :) ) и перенимать опыт (как пафосно звучит ! )
DEAD_Angel
А я вообще рисовать не умею xD, а вообще, главное - работа в коллективе
DEAD_Angel
14.01.2008 01:04
Цитата:
Сообщение от ^i_Swep
(Сообщение 3138211)
В чём отличия ? Размер экрана? Можно изначально нацеливаться на так сказать расширяемость. И для первого релиза сделать например под 178х220
Там такая штука, например: у меня MOTOROLA и игры с SONY ERICSON у меня не идут.
ХаН
14.01.2008 09:42
andNsX
А где мона скачать GameMaker?
На счет проекта - идея класс )) Особенно заинтересовала под сотики ))
Кстати могу быть полезен в рисовании ( умею но неочень :frown: впринципе текстуры нарисую подгоню оптимизирую )