Лучшая структура данных для представления игровой доски

Если бы Вы работаете в VB.NET, я сказал бы, что Мое пространство имен очень важно. Это содержит ярлыки на большое количество областей платформы, которая раньше распространялась повсеместно в платформе. Это также довольно интуитивно. Можно записать вещи как:
Для Каждого Принтера в Моем. Компьютер. Принтеры
или
Мой. Компьютер. FileSystem. OpenFile (Имя файла)
Мой. Компьютер. Информация. AvailablePhysicalMemory
Мой. Компьютер. Экран. PrimaryScreen. WorkingArea

6
задан Brian Tompsett - 汤莱恩 8 November 2015 в 22:55
поделиться

5 ответов

Это по сути квадрат? Форма ромба - это просто вопрос интерпретации? Вот так ..

M A A A
B M A A
B B M A
B B B M

если так, может быть, просто используйте 2D-массив и используйте вашу систему отображения, чтобы «превратить его» в ромб.

edit

Я думаю, вы можете отобразить свой перемещаемый набор в массив - Если ваши фигуры «$» двигаются только вверх-влево или вверх-вправо, это сродни моим фигурам «B», движущимся только вверх или вправо. Точно так же, если фигуры «&» движутся только вниз-влево или вниз-вправо, это как фигуры «А» только движутся вниз или влево.

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

11
ответ дан 8 December 2019 в 14:45
поделиться

А как насчет двух деревьев с одинаковыми четырьмя средними полями? (Я имею в виду ссылку на одни и те же объекты)

1
ответ дан 8 December 2019 в 14:45
поделиться

На веб-сайте musicdsp также есть отличная библиотека синтеза . Много примеров кода на C / C ++ о том, как что-то делать.

вы должны повторно обновлять и фишку, и доску, когда фишка перемещается.

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

1223] Если вы ориентированы на доску, вам нужно будет искать каждую позицию на доске, чтобы найти положение фигуры.

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

Итак, ответ на ваш вопрос - хешированный вектор, представляющий доску.

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

  • к доске по позиции, чтобы узнать, какая единица находится на позиции
  • идентификатор фигуры, чтобы узнать, где она находится на доске.

Вы не можете представить доску как дерево, если только у вас не многомерная настольная игра. Дерево необходимо, когда у вас есть дерево, лестница или замок, который находится на доске, так что когда юнит достигает этого горизонтального положения доски, ему нужно будет перейти в вертикальное положение лестницы или замка. . А в замке юнит нужно развести по многочисленным комнатам. Или на дереве есть ведьма, способная захватить юнит в бутылку запутанным путем для побега. Следовательно, использование древовидной структуры для представления вашей доски излишне усложнит программирование вашей игры.

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

Это означает, что вы не должны нумеровать одну часть как (1,3), а затем перечислять ее соседнюю часть как (2,7) - это просто здравый смысл. Поскольку соседями (1,3) являются (0,2), (1,2), (2,2), (0,3), (2,3), (0,4), (1,4 ) и (2,4), но не (2,7).

Следовательно, вам нужен двумерный хешированный вектор.

Чтобы удовлетворить вашу потребность в выяснении, какая единица измерения находится в позиции x, y вашего доска:

BasicUnit getPosition(x,y)

А также определение позиции (x, y) юнита.

Position getUnit(BasicUnit unit)

Затем вы можете спланировать свою игру так, чтобы она была расширяемой, чтобы игрок, достигнув победы, мог перейти к следующему уровню, который имеет другую форму доски. http://code.google.com/p/synthfuljava/wiki/HashVector

переведите его на язык программирования по вашему выбору и добавьте к нему еще одно векторное измерение.

4
ответ дан 8 December 2019 в 14:45
поделиться

Я бы использовал своего рода график. Например:

class Field
{
     private List<Field> neighbours;
}

Или не список, а массив, содержащий пустые ссылки на поля границ. Этим может быть представлена ​​любая доска.

0
ответ дан 8 December 2019 в 14:45
поделиться

Почему бы не использовать простую структуру массива? Если доска имеет ромбовидную форму, она квадратная / прямоугольная, не так ли?

Dim myBoard(5,5) As Array

Конечно, если доска необычной формы (например, в середине есть места и другие предметы), это может не сработать.

0
ответ дан 8 December 2019 в 14:45
поделиться
Другие вопросы по тегам:

Похожие вопросы: