我正在創建一個正常的國際象棋遊戲自動矢量邊界檢查不會造成我的程序崩潰
我的國際象棋引擎有一個棋盤。該板是一個2D板[Y] [X],其內部是件。碎片是枚舉,它代表黑色碎片,白色碎片和NONE。
class ChessBoard
{
vector<vector<Piece>> board(); //I made it 8*8 in the constructor
enum Piece{NONE, white pieces, black pieces etc..}
}
我的問題是驗證廣場是否在我的董事會。請讓我詳細說明。例如,在爲A2典當可能的行動看時,典當行可以向上移動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 [] [],以便當我試圖訪問綁定索引時,它會拋出一個錯誤消息或某些東西而不會崩潰我的程序?
謝謝
除了同時使用兩個'operator []'外,沒有辦法實現'operator [] []'。 'std :: vector'提供了一個'at()'成員函數來檢查有效的索引,但是有必要捕獲異常以防止程序終止。注意'vector> board(8 * 8)'指定了一個包含64個「vector」的vector,每個vector都沒有元素。它不創建任何形式的8x8數組。 –
Peter
當然,在國際象棋中,即使目標廣場位於棋盤上,棋子也不能穿過其他棋子。 – Peter
是的,我知道,我有點寫了僞代碼只是爲了表明董事會是8 * 8 ...反正,我真的不想做如果(isValidSquare(x,y))每次我嘗試看或訪問董事會。 ...有沒有一個聰明的方法來做到這一點?我想可能使它成爲一個10 * 10板,外層爲ERROR可能會有所幫助。 – Telenoobies