Я создаю рабочую шахматную игруАвтоматическая проверка границ вектора без сбоев моей программы
Мой шахматный движок имеет доску. Плата представляет собой двумерную панель [Y] [X], а внутри нее Pieces. Пьесы - это перечисления, и он представляет черные части, белые части и НЕТ.
class ChessBoard
{
vector<vector<Piece>> board(); //I made it 8*8 in the constructor
enum Piece{NONE, white pieces, black pieces etc..}
}
Проблема заключается в том, что квадрат находится внутри моей доски. Пожалуйста, позвольте мне уточнить. Например, при взгляде на возможные ходы для А2 пешки, пешка может либо двигаться вверх 1 2 или захвата влево, вправо или Мимоходом налево направо:
(X,Y+1), (X,Y+2), (X+1,Y+1), (X-1,Y+1), (X+1,Y+2), (X-1,Y-2)
Однако, как вы знаете, X-1 будет вызывать кусок, чтобы выйти за пределы.
Да, я мог бы реализовать простую функцию bool isSquareValid()
. Но это означает, что когда я пытаюсь получить доступ или установить board[][]
, мне нужно вызвать эту функцию.
Есть ли способ реализовать Board [] [], так что, когда я пытаюсь получить доступ к связанным индексам, он выдает сообщение об ошибке или что-то, не сбивая мою программу?
Thanks
Невозможно реализовать 'operator [] []', за исключением использования двух 'operator []' в тандеме. 'std :: vector' предоставляет функцию' at() 'member, которая проверяет допустимые индексы, но необходимо исключить исключения для предотвращения завершения программы. Обратите внимание, что 'vector> board (8 * 8)' задает вектор, содержащий 64 'vector ', каждый из которых не имеет элементов. Он не создает массив 8x8 в любой форме. –
Peter
Конечно, в шахматах пешка не может двигаться через другие части, даже если квадрат назначения находится на доске. – Peter
Да, я знаю, я написал код psuedo, чтобы показать, что плата была 8 * 8 ... В любом случае, я действительно не хочу делать, если (isValidSquare (x, y)) EVERYTIME Я пытаюсь посмотреть или получить доступ к доске. ... Есть ли разумный способ сделать это? Я подумал, что, возможно, это плата размером 10 * 10 с внешним слоем, поскольку ERROR может помочь. – Telenoobies