Вопрос дизайна данных о маркировке сторон в боевой игре - PullRequest
0 голосов
/ 25 октября 2019

Я занимаюсь разработкой шахматоподобной игры, но я считаю, что этот вопрос можно распространить на все игры, в которых есть битвы.

Поэтому мой вопрос заключается в том, как правильно обозначить объект как friend объект или enemy объект в боевой игре?

Взять, к примеру, шахматы. Если игрок W играет белыми фигурами, то противник W , игрок B , играет черными фигурами.

Для W , все белые фигуры friend объекты, а черные фигуры enemy объекты, в то время как игрок B имеет черный friends и белый enemies. Поэтому здесь моя проблема с маркировкой может быть просто решена с помощью цветов. Когда вы пытаетесь рассчитать возможные ходы фигуры и решить, можете ли вы взять фигуру, вы можете в основном проверить, имеют ли они разные цвета.

Однако что, если два игрока имеют одинаковое представление? Например, игра может окрасить все friends в черный цвет, а все enemies - в белый, и игроки начнут свои игры со своими фигурами внизу. В этом смысле слова действительно можно рассматривать как атрибуты игрока. Таким образом, черный и белый цвета основаны на том, есть ли у части идентификатор владельца, который совпадает с вашим.

Здесь возникает проблема:

Хотя я могу выбрать цветсравнивая идентификаторы, что если я захочу узнать, входит ли фигура friend в enemy region?

Определение enemy region может быть верхней частью доски. Поскольку доска не является частью игрока (в то время как фигуры могут быть), невозможно использовать предыдущее решение для идентификатора.

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

Чтобы не удвоить доску, я пытаюсь использовать другую стратегию, котораяиспользовать альбомную ориентацию . Я имею в виду, что данные не принимают стороны как игроки. Игроки видят игровое поле с снизу до сверху , что похоже на портретное представление , в то время как данные можно просматривать с слева направо / справа налево как то, что наблюдает справедливый судья. Таким образом, данные становятся объективными здесь. Но проблема в том, как субъективно представить объективные данные игрокам? И все еще непросто узнать, попадает ли кусок во вражеский регион.

Поэтому мой вопрос: как мне правильно спроектировать структуру данных, чтобы она не удваивалась, не утраивалась и не копировалась несколько раз? данных, и в то же время, это также легко узнать ярлыки публичной области? В моем вопросе публичная зона - шахматная доска, где все фигуры должны сражаться на этой единственной доске. Я называю это public , потому что оба игрока могут перемещать свои фигуры повсюду на игровом поле, и третьи лица также могут видеть, что происходит на игровом поле. Но ярлыки кусочков - это просто субъективные атрибуты, личные личные мысли.

Я не уверен, смогу ли я правильно объяснить / сформулировать свой вопрос хорошо, поэтому я не искаланалогичный вопрос. Извините за мою лень. Если был задан дублирующий вопрос, направьте меня к нему.

--- Обновление ---

Я думаю, что более ясный вопрос, скажем, у меня есть 3 *3 доски. Если мне нужно переместить свою фигуру из (1, 2) в (2, 3), то, с точки зрения моего оппонента, движение не происходит в том же месте. Это наоборот. Это от (3, 2) до (2, 1). Каков наилучший способ сохранить этот ход? Нужно ли брать одну сторону (субъективную), чтобы сохранить ее, или есть нейтральный / объективный способ сделать это?

Недостаток субъективного подхода для меня заключается в том, что мне нужно пересчитать ходы, чтобы другой игрок соответствовал его / ее мнению. Использование нейтрального пути может быть спасением.

Ответы [ 2 ]

0 голосов
/ 26 октября 2019

Общий ответ без конкретной базы данных - есть данные и есть несколько представлений. Нет необходимости копировать данные, но иметь несколько ссылок на некоторые данные (что, конечно, также требует некоторой памяти). Напримерна ладью ссылается квадрат и игрок. Такие ссылки могут быть сохранены (коллекция «враги») или могут быть рассчитаны на лету (коллекция «достижима») в зависимости от решений времени выполнения / дизайна хранилища. Также несколько игроков просто взгляды. Во время игрового хода вы должны обновить все статические виды, в то время как динамические виды не нужны.

В симметричных играх есть возможность не сохранять виды оппонентов, а генерировать их, просто преобразовав всю игру в вид других игроков. с каждым ходом. Опять же, это ваше решение, сохраненное и динамически созданное.

0 голосов
/ 25 октября 2019

Если мне нужно переместить свою фигуру из (1, 2) в (2, 3), то, с точки зрения моего противника, движение не происходит в том же месте. Это наоборот. Это от (3, 2) до (2, 1). Каков наилучший способ сохранить этот ход? Нужно ли брать одну сторону (субъективную), чтобы сохранить ее, или есть нейтральный / объективный способ сделать это?

Выберите одну ориентацию для доски. Неважно, какой вы выберете. Этот является нейтральным / объективным способом - ни один из вариантов не дает никаких преимуществ ни одному из игроков, и выбор не оказывает существенного влияния на код. Любой дисбаланс, который вы себе представляете, например, лучше иметь (0,0) на своей собственной стороне, это воображаемый .

Это не «субъективный» выбор, это «произвольный»"Выбор.

...