我正在創建一個tictactoe遊戲,並且我需要測試玩家是否贏得了所有動作,這給我帶來了很多麻煩。我把所有可能的贏組合的2D矢量:在tictactoe遊戲中可能獲勝的測試
vector<vector<int>> possibleWins {{1,2,3},{4,5,6},{7,8,9},{1,4,7},{2,5,8},{3,6,9},{1,5,9},{3,5,7}};
一舉一動我遍歷二維矢量和追加PLAYER1和player2向量與他們任何標記細胞:
vector<int> totalX {};
vector<int> totalO {};
int count = 1;
for(int i=0; i<3; i++) {
for(int j=0; j<3; j++) {
if(board[i][j] == 'x') {
if(totalX.size() == 0) {
totalX.push_back(count);
}
for(int k=0; k<totalX.size(); k++) {
if(count == totalX[k]) {
break;
}
else {
totalX.push_back(count);
}
}
}
else if(board[i][j] == 'o') {
if(totalO.size() == 0) {
totalO.push_back(count);
}
for(int k=0; k<totalO.size(); k++) {
if(count == totalO[k]) {
break;
}
else {
totalO.push_back(count);
}
}
}
count++;
}
}
我再試試測試是否在每個玩家的細胞載體的細胞是細胞的一個成功的組合,而這被證明對我來說是困難的:
int xInRow = 0;
for(int x=0; x<totalX.size(); x++) {
for(int y=0; y<possibleWins.size(); y++) {
xInRow = 0;
for(int z=0; z<3; z++) {
if(totalX[x] == possibleWins[y][z]) {
xInRow++;
if(xInRow == 3) {
return X_WON;
}
}
}
}
}
這不工作,我已經試過implemen用很多不同的方式來處理它,但我真的不知道如何枚舉所有可能的勝利,並測試一個球員是否有這些組合之一。
有沒有一種方法可以更好地構造它使其工作?我很迷茫。
使用'std :: vector>'對於tictactoe板來說是矯枉過正的,並帶有_huge_缺點。你應該定義一個TicTacToeBoard類,其中有九個值表示遊戲的九個方塊(NW,N,NE,W,C,E,SW,S,SE)的狀態(空,x或o)。 –
YSC
順便說一句,如果您將棋盤表示爲3x3 {-1,0,1}矩陣A,那麼'[111] * A'和'A * [111]^T'會告訴您是否有贏家並且誰獲勝:如果任何一個乘法結果的複合數是3,1勝,如果是-3,1勝。 – YSC