Если бы Вы работаете в VB.NET, я сказал бы, что Мое пространство имен очень важно. Это содержит ярлыки на большое количество областей платформы, которая раньше распространялась повсеместно в платформе. Это также довольно интуитивно. Можно записать вещи как:
Для Каждого Принтера в Моем. Компьютер. Принтеры
или
Мой. Компьютер. FileSystem. OpenFile (Имя файла)
Мой. Компьютер. Информация. AvailablePhysicalMemory
Мой. Компьютер. Экран. PrimaryScreen. WorkingArea
Это по сути квадрат? Форма ромба - это просто вопрос интерпретации? Вот так ..
M A A A
B M A A
B B M A
B B B M
если так, может быть, просто используйте 2D-массив и используйте вашу систему отображения, чтобы «превратить его» в ромб.
edit
Я думаю, вы можете отобразить свой перемещаемый набор в массив - Если ваши фигуры «$» двигаются только вверх-влево или вверх-вправо, это сродни моим фигурам «B», движущимся только вверх или вправо. Точно так же, если фигуры «&» движутся только вниз-влево или вниз-вправо, это как фигуры «А» только движутся вниз или влево.
Идея состоит в том, что внутри программы подумайте о ваши данные перемещаются вверх и вниз, но когда вы представляете свое игровое состояние своему пользователю, просто нарисуйте его в ромбовидной конфигурации.
А как насчет двух деревьев с одинаковыми четырьмя средними полями? (Я имею в виду ссылку на одни и те же объекты)
На веб-сайте 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
переведите его на язык программирования по вашему выбору и добавьте к нему еще одно векторное измерение.
Я бы использовал своего рода график. Например:
class Field
{
private List<Field> neighbours;
}
Или не список, а массив, содержащий пустые ссылки на поля границ. Этим может быть представлена любая доска.
Почему бы не использовать простую структуру массива? Если доска имеет ромбовидную форму, она квадратная / прямоугольная, не так ли?
Dim myBoard(5,5) As Array
Конечно, если доска необычной формы (например, в середине есть места и другие предметы), это может не сработать.