В первой версии игры все управление было отдано на откуп игрокам. Игра занималась только тем, что как могла, изображала из себя реальные игровые условия. Это значит, что если ниндзя раниться то игрок должен собственноручно повернуть карточку на бок, если нужно разыграть ниндзя то игрок должен сам ткнуться в карточку и указать куда именно он хочет переместить эту карту. Таким образом в любой момент с картой можно было сделать любое действие.
У такого подхода есть как и плюсы так и минусы. Из плюсов можно воспроизвести любой даже самый сложный эффект карточки, достаточно лишь последовательно перемещать карточки из одной области в другую или совершать иные требуемые действия. Вторым плюсом это простота разработки такой игры. Прикрепил к карточки все возможные действия и пусть игроки сами выбирают что будут делать и сами разруливать возникающие вопросы. И это вполне работоспособная система. К примеру Magic Workstation уже много лет ей пользуется и особо никто не жалуется.
А минусами такого подхода являются два пункта. Во-первых - сильная нагруженность каждой карты меню (по крайней мере в моей реализации уж точно). Во-вторых - муторность в выполнения отдельных действий. Это означает что игрок все должен сделать сам: по завершению боя должен сам подсчитать урон, должен сам ранить или переместить в сброс ниндзя, сам вернуть команды из сражения обратно в деревню. То есть, большое количество действий которые можно было бы автоматизировать. Есть брать тот же пример с боем, то после сражения, сравнение сил происходит автоматически, ниндзя сами ранятся и отправляются в сброс, выжившие команды возвращаются в деревню. В начале хода не надо нажимать на кнопку «взять карту», карта сама прилетит в руки и т.д. Вот именно надо такой утопической системой я и тружусь сейчас.
Основным изменение по сравдению с прошлой версией является разделения хода на фазы согласно правилам.
На рисунке я показал как выглядит этот «датчик». Раньше он был не нужен, игрок сам определял какая фаза сейчас идет и даже гипотетически мог возвращаться в предыдущую фазу если обстановка на столе позволяла, ну или например соврешать две атаки за ход. Движок игры все это позволял. Появление счетчика лишает игрока такой свободы, зато обеспечивает четкую стабильную работу и неукоснительное следование правилам. Впрочем этот пример не очень наглядный. Вот вам наглядный пример. Кто вспомнит сколько опций было в меню для каждой карты, допустим, если она лежит в руке? Правильный ответ - «дофига». Карту можно было переместить - на стол, в сброс, в чакру, вывести из игры, убрать наверх колоды, вниз колоды, отдать в качестве приза оппоненту. Очень много вариантов. Не мудрено что частенько меню с действиями просто не влезало в экран.
Но, как говорил одни известный персонаж, (от меня респект тому кто узнает кто), «если вдуматься...» с картой которая лежит на руке стандартно можно сделать совсем немного действий. В начальную фазу - ничего, в фазу миссии - разыграть или зарядить в чакру, а если это техника, то только зарядить в чакру, в фазу организации - ничего, атака - ничего, блокирование - ничего, обмен техниками - разыграть, но только если это техника, подсчет - ничего, возвращение - ничего, конец хода - ничего. То есть за весь ход максимальное количество действий у карты на руке - 2, в фазу миссий, и то если это не текхника. Внимание вопрос. Нафига нам дофига менюшек? Правильно - нафиг. Я тоже так решил и выбросли все лишнее, теперь менюшки появляться только те кторые действительно можно применить в конкретный момент игры, а не все разом.
Новую игру я начал разрабатывать с фазы мисии и двинулся вперед по фазам добавляя новые необходимые пункты меню и убирая те что уже не актуальны.
Сейчас я добрался до фазы подсчета и научил движок считать какой команде из двух навесили люлей, и сколько именно люлей навешали каждой такой команде. Добавил и возвращение команд в деревню. Теперь осталось замкнуть круг организовав все действия для фазы конца хода и фазы начала хода. А там нужно всего то - проверить есть ли победитель, скинуть карты, увеличить счетчик хода и сунуть оппоненту карту в руку. Тогда скелет игры будет полностью готов, останется - всего делов - нарастить мясо. =)
MrMoon, представляю как ты начнёшь биться об стену, когда дойдёшь до программирования эффектов И вопрос как на первых парах будет осуществляется выполнение эффекта, менюшками?
Да я сам с ужасом это представляю. Впрочем, я приготовил пару трюков, буду молиться на то что бы они сработали .Теперь я понимаю почему в послдней компьютерной Magic такой урезанный набор карт и нет сложных эффектов.
Ну тут я больше поспешил, сформулирую так: - будешь ли ты выкладывать "альфа-беты" версии? - если будут такие версии как будешь решать вопрос эффектов?
Альфа-бетта версии планируются. С ними веселее. Первой будет та, в которой можно играть только ниндзя и у них не будут работать эффекты. Уже смешно, правда?! Собственно это и есть ответ на второй вопрос. Дополню, что планируется одна за одной добавлять к карточкам эффекты. Первыми однако будут не эффекты ниндзя, а применения техник и цепочка.
Да, Кубик. Ты не чувствуешь себя старым? =) О соквывании игрока. Я был глуп и наивен. А если серьезно, я напомню почему я так считал. Сейчас мне кажется, что это скорее "сковывание" психологического характера. Тебе нельзя все кроме того что можно, вместо тебе можно все кроме того что нельзя. В защиту моего "нового" могу сказать, что управление картами выглядит проще и лаконичнее, и как следствие управлять стало легко и быстро. А может на меня повлияла встреча с последней компьютерной версией "Magic". Как лучше как было или ка будет покажет время.
Хитрый какой. Я бы тоже послушал как у тебя там устроено. Есть две проблемы/задачи. Первая - влияение эффекта карты на себя. Вторая - влияние карты на другие карты. В своих скромных размышлениях я пришел к следующему. Пример первой проблемы - есть такой Итачи который говорит "Я не получаю повреждений если у оппонента нет ниндзя с Шаринганом". Вот на его примере первую проблему буду решать так. Есть класс "карта" в котором есть стандартные методы. Их кстати получается весьма не мало. И сейчас все выкладываемые ниндзя создаются из этого класса по умолчанию. В нем есть функция нанести_порвждения(число_повреждений). Результатом этой функции понятно является ранение или смерть ниндзя. Так вот. Когда у Итачи появиться эффект. Его объект карты, будет создан из соответствующего класса "Итачи", который во-первых потомком класса "карта", а во вторых у него будет переписана функция получения повреждения, тогда каждый раз при получении повреждений этот объект будет сам проверять будет ему дюлей на голову или не будет. Со второй проблемой я еще до конца не разобрался. Есть кое-какие прикидки. Там суть в том что есть эффект А, и эффект Б. И эффекст Б срабатывает только если есть условие С. Ну например, эффект Б: Если в игре есть Ниндзя с "женский", Джирайа получает +1/+1. А эффект А: Наруто получает "Женский". И если рассматривать их в порядке А - Б. Все будет хорошо. А если в порядке Б -А, то Джирайа ничего не получит, потому что на момент рассмотрения эффекта Наруто еще не имеет женского. Вот и получается что надо куда-то "сложить" все условные эффекты. А потом крутить их до тех пор пока они все либо сыграют либо не сыграют. Как то так.
Классы у тебя не хилые получатся и их использование будет проследить сложно, это мое имхо. Если у тебя сработает буду рад. Мое решение я тебе вроде бы даже рассказывал, но суть: > операции - ограниченное количество (повреждение, лечение, смена чего-нибудь и т.д.); > цели - ограниченное количество (сам, выбранный ниндзя, техника и т.д.), так же цель это не только "на что влияет", но и "куда", пример, "переместить карту (цель) на верх колоды (цель)"; > условие - ограниченное количество (если цена >=, если имя и т.п.) А теперь берем эффект и расписываем на логическую последовательность действий, проще говоря описываем на "детском языке/жестами": "Переместите используемую карту техники из игры в чакру владельца, если цена техники равна 2 или менее чакры." - составляем сопоставление нашей "таблицой" и по порядку: 1. Выбрать цель: - в данном случае помечаем что цель может быть "техника в игре". 2. Проверка условия (ну тут условие проверяется раньше): - цель (цена) >= 2. Если условие верно, идем дальше, нет возвращаемся на пункт 1. 3. Переместить карту: - в данном случае операция "переместить". 4. Выбрать куда: - цель = чакра владельца.
Теперь получаем эффект в виде последовательных операций с условием. Если читал книги по программированию, то думаю заметил схожесть подходов (так объясняют как писать алгоритмы), описывается последовательность в виде обычных слов, а потом записывается в виде кода. Ну а теперь записывай в удобном тебе формате эти данные и используй. Вот мой подход, опять же не известно как он себя оправдает =) Удачи всем нам, "да прибудет с нами сила!" =)
Разумеется у каждой карты идет свой набор операций и порядок выполнения, поэтому по твоему примеру с Итачи, вспомним Magic, выполнилось на него эффект, мы выполняем в ответ (или автоматически), а некоторые может сами указать когда выполнить. Если на Итачи ничего не применялось, то смысл выполнять эффект "неуязвимость". Но тут столько тонкостей, что пока не попробуем рассуждать можно бесконечно...
А потом крутить их до тех пор пока они все либо сыграют либо не сыграют. Есть тут сложность: во-первых, замкнутость - бесконечное кручение; второе, некоторые эффекты игрок и хочет применить именно в том порядке, что бы чего добиться, своих скрытых целей, а если это будет происходить "автоматом", то не факт, что получится то, что задумал игрок.
А тут работает "Проверка условия" - в этом случае не только проверяется условие описанное в эффекте, но и такие условия.
Про статические, условные, активизируемые - я имел в виду их все вместе. Только вот статические (применяются постоянно), т.е. попадают в "стэк" на выполнение постоянно, условные - в определенный момент, ну и активизируемые - по замыслу игрока.
Так это самое интресное, в моей реальной игровой практике ни разу не было случая когда бы этот порядок на что то влиял. Допустим есть эффекта А и Эффект Б. И они срабатывают одномоментно. (Блин, как же я это реализовывать то буду?) Это значит что каждая из способностей применяется в тот самый момент. Бывают случаи когда эффект А, после своего срабатывания убирает суловие активации эффекта Б. В этом случае, если условие для обоих эффектов настало одновременно, эффект Б должен примениться так как будто эффкт А не изменил его условий. Сложновато наверное описал.
Ну так вот, Скорее всего я буду использовать что то для хранения одновременно случившихся эффектов. А потом выпускать их на волю.
Блин, я из за тебя обноружил еще ряд трудных в реализации мест. Значит так. Согласно правилам. Возмем правила магии, так как правила Наруто - сосут (в смысле, там о таком даже не написано).
Если два эффекта срабатывают одноврменно. Первым применяетя эффект активного игрока. Если эти эффекты одного игрока, то игрок сам определяет в какой последовательности они будут играться. Ты, Dok, наверное этот момент имел ввиду. Я походу услвные сособности буду в самом конце программировать.
Мое предположение: > первыми эффекты выполняют нападающий - в конце концов это он все начал. > последовательность: 1. статические (они как никак есть всегда). 2. условные (они идут следующими). 1-3. активизируемые (как нажал так и выполнил). В Magic же есть некий таймаут между выполнениями, что можно выполнить любое заклинание как успел. Как это с правила - похоже?
Если эти эффекты одного игрока, то игрок сам определяет в какой последовательности они будут играться. Ты, Dok, наверное этот момент имел ввиду. Да, именно
Хмммм тогда у меня вопрос,а как быть с эфектами карт которые говорят" в начале хода сбросьте карту из чакру что бы вылечить одного ниндзя" карта третьего хокаге. То есть хочешь вылечить,то лечи до того как взял карту,а если карта будет браться автоматически,то как тогда быть?
Нюансов много... Но в данном случае просто чуть расширяется фаза "Начала", т.е. сначала что-то сделать можно, а потом в конце этой фазы, берёться карта.
А вот мне Мун как раз наоборот говорил. Если например карта указывает - "возьмите карту в начале хода" (к примеру), то ты должен взять карту именно В НАЧАЛЕ. То есть, если ты перед этим уже какое-то действие совершил, то это уже не начало:) Так что может не полностью автоматизировать процесс, а хотя-бы частично?... Хотя... Вам виднее наверное... Или может есть альтернатива какая-то? Я просто вообще не прошареный в этой теме поэтому... тут уж сами думайте
Нет, ты не прав. При игре с тобою указанным человеком, как раз я сначала брал карту и забывал до этого полечить своих способностью Третьего Хокаге. Так что именно до того как взял карту надо использовать подобные способности.
Я сначало хотел написать тебе длинное сообщение, что ты не прав и почему, но во мне поползли сомнения. Возмооооожно я путаю данную ситуацию с "началом фазы миссий". Если написано "в начале вашей фазы миссий", то имеется ввиду именно "в начале", то есть "в САМОМ начале":) Если написано "в начале вашего хода", то тут ты прав - начало хода большое, и тут ты сам можешь выбирать. А вот если "в начале фазы миссий", то тут четко.
Я вот тут еще кстати чё вспомнил. Мун, помнишь ты как то случайно сказал, что будешь делать прогу для перевода карт, прямо внутри сайта. Я конечно понимаю, что это после онлайн игры, но.... Все равно хотелось бы знать - ты это будешь делать? Если да, то какие примерно сроки? И вообще, как там наш перевод/проверка в целом? Хотя эт наверное больше ко мне вопрос:)