Я не знаю, является ли это оптимальным решением, но я хотел бы создать новый класс платы, в которой доска будет набором «ячеек», каждая ячейка будет содержать указатель на каждую соседнюю ячейку (или ноль). если клетка находится на краю). Вы можете реализовать несколько итераторов для класса board, которые будут обходить ячейки.
Вы должны относиться к нему как к списку, а не к вектору. Но это как минимум начало.
Другое решение настроено так: alt text http://img833.imageshack.us/img833/4739/hexgame11x11.gif
и все еще просто используйте [,], чтобы получить доступ к каждой ячейке, но потребуется немного больше математики, чтобы выяснить, пересекаете ли вы ячейки (Вверх справа - [+ 1, -1], справа - [+1,0 ], Вниз вправо - [0, + 1], вниз влево - [-1, + 1], влево - [-1,0], вверх влево - [0, -1])
EDIT
Если вы хотите, чтобы вертикальные стены вместо уклона, просто сделайте ширину (X) равной X + Y * 2, тогда в каждой строке сделайте текущий номер строки (y) и сделайте ячейки от 0 до Yy и от Xy до X выключенными пределы.
Пример:
const int X = 10;
const int Y = 10;
int grid[,] = new int[X+(2*Y), Y];
bool IsCellOffLimits(int x, int y)
{
return (x < Y-y || x > X-y || y < 0 || y > Y);
}
вы тратите немного памяти, но это дает вам такую доску
альтернативный текст http://img192.imageshack.us/img192/5580/gridw.png
Если вы Очень умный ©, вы можете просто использовать обычное пространство, но просто иметь свой код, чтобы что-нибудь в этом диапазоне Y-y или X-y находилось на противоположной стороне доски. Но я оставлю этот код читателю.