为什么我的 Tic Tac Toe 逻辑有时会出错?
Why does my Tic Tac Toe logic have errors sometimes?
我不熟悉在这里发布问题,如果我做错了什么,请告诉我。所以这个程序在 90% 的时间里都能正常工作,如此处所示。
但如此处所示,逻辑有时会出错。
我查看了我的代码一段时间,所以我终于屈服并寻求帮助!我的 logic() 函数似乎是准确的。我匹配了所有可能的获胜路线;行、列和对角线。出于某种原因,如果顶行是 -> 'X' | 'O' | 'X' -> 它宣布玩家一 (x) 获胜。有什么想法吗?
#include <iostream>
#include <iomanip>
using namespace std;
void drawBoard();
char board[3][3] = {'1','2','3','4','5','6','7','8','9'}; // 3x3 board
char player = 'X';
void game();
void toggle();
char logic();
void winner();
int main()
{
drawBoard();
while(1){
game();
drawBoard();
toggle();
if(logic() == 'X')
cout << "Player 1 (X) Wins!" << endl;
else if(logic() == 'O')
cout << "Player 2 (O) Wins!" << endl;
}
return 0;
}
void drawBoard(){
system("cls");
cout << setw(35) << "Tic Tac Toe V 2.0! " << endl << endl;
cout << setw(21) << board[0][0] << " | " << board[0][1] << " | " << board[0][2] << endl;
cout << setw(30) << " --------- " << endl;
cout << setw(21) << board[1][0] << " | " << board[1][1] << " | " << board[1][2] << endl;
cout << setw(30) << " --------- " << endl;
cout << setw(21) << board[2][0] << " | " << board[2][1] << " | " << board[2][2] << endl;
}
void game(){
int input;
cout << "Make your move..." << endl;
cin >> input;
if(input == 1)
board[0][0] = player;
else if(input == 2)
board[0][1] = player;
else if(input == 3)
board[0][2] = player;
else if(input == 4)
board[1][0] = player;
else if(input == 5)
board[1][1] = player;
else if(input == 6)
board[1][2] = player;
else if(input == 7)
board[2][0] = player;
else if(input == 8)
board[2][1] = player;
else if(input == 9)
board[2][2] = player;
}
void toggle(){
if(player == 'X')
player = 'O';
else
player = 'X';
}
char logic(){
// Player 1
/// Across
if(board[0][0] == 'X' && board[0][1] == 'X' && board[0][2] == 'X')
return 'X';
else if(board[1][0] == 'X' && board[1][1] == 'X' && board[1][2] == 'X')
return 'X';
else if(board[2][0] == 'X' && board[2][1] == 'X' && board[2][2] == 'X')
return 'X';
/// Columns
else if(board[0][0] == 'X' && board[1][0] == 'X' && board[2][0] == 'X')
return 'X';
else if(board[0][1] == 'X' && board[1][1] == 'X' && board[2][1] == 'X')
return 'X';
else if(board[0][2] == 'X' && board[1][2] == 'X' && board[2][2] == 'X')
return 'X';
/// Diagonals
else if(board[0][0] == 'X' && board[1][1] == 'X' && board[2][2] == 'X')
return 'X';
else if(board[0][2] == 'X' && board[1][1] == 'X' && board[2][0] == 'X')
return 'X';
// Player 2
/// Across
if(board[0][0] == 'O' && board[0][1] == 'O' && board[0][2] == 'O')
return 'O';
else if(board[1][0] == 'O' && board[1][1] == 'O' && board[1][2] == 'O')
return 'O';
else if(board[2][0] == 'O' && board[2][1] == 'O' && board[2][2] == 'O')
return 'O';
/// Columns
else if(board[0][0] == 'O' && board[1][0] == 'O' && board[2][0] == 'O')
return 'O';
else if(board[0][1] == 'O' && board[1][1] == 'O' && board[2][1] == 'O')
return 'O';
else if(board[0][2] == 'O' && board[1][2] == 'O' && board[2][2] == 'O')
return 'O';
/// Diagonals
else if(board[0][0] == 'O' && board[1][1] == 'O' && board[2][2] == 'O')
return 'O';
else if(board[0][2] == 'O' && board[1][1] == 'O' && board[2][0] == 'O')
return 'O';
}
在函数 logic()
中,您缺少一条 return 语句,这意味着如果 none 的条件得到满足,该函数将 return 满足任何条件可能在那个寄存器中。我发现如果你在函数的末尾添加一个 return 0;
,你不会得到那个行为。
我不熟悉在这里发布问题,如果我做错了什么,请告诉我。所以这个程序在 90% 的时间里都能正常工作,如此处所示。
但如此处所示,逻辑有时会出错。 我查看了我的代码一段时间,所以我终于屈服并寻求帮助!我的 logic() 函数似乎是准确的。我匹配了所有可能的获胜路线;行、列和对角线。出于某种原因,如果顶行是 -> 'X' | 'O' | 'X' -> 它宣布玩家一 (x) 获胜。有什么想法吗?
#include <iostream>
#include <iomanip>
using namespace std;
void drawBoard();
char board[3][3] = {'1','2','3','4','5','6','7','8','9'}; // 3x3 board
char player = 'X';
void game();
void toggle();
char logic();
void winner();
int main()
{
drawBoard();
while(1){
game();
drawBoard();
toggle();
if(logic() == 'X')
cout << "Player 1 (X) Wins!" << endl;
else if(logic() == 'O')
cout << "Player 2 (O) Wins!" << endl;
}
return 0;
}
void drawBoard(){
system("cls");
cout << setw(35) << "Tic Tac Toe V 2.0! " << endl << endl;
cout << setw(21) << board[0][0] << " | " << board[0][1] << " | " << board[0][2] << endl;
cout << setw(30) << " --------- " << endl;
cout << setw(21) << board[1][0] << " | " << board[1][1] << " | " << board[1][2] << endl;
cout << setw(30) << " --------- " << endl;
cout << setw(21) << board[2][0] << " | " << board[2][1] << " | " << board[2][2] << endl;
}
void game(){
int input;
cout << "Make your move..." << endl;
cin >> input;
if(input == 1)
board[0][0] = player;
else if(input == 2)
board[0][1] = player;
else if(input == 3)
board[0][2] = player;
else if(input == 4)
board[1][0] = player;
else if(input == 5)
board[1][1] = player;
else if(input == 6)
board[1][2] = player;
else if(input == 7)
board[2][0] = player;
else if(input == 8)
board[2][1] = player;
else if(input == 9)
board[2][2] = player;
}
void toggle(){
if(player == 'X')
player = 'O';
else
player = 'X';
}
char logic(){
// Player 1
/// Across
if(board[0][0] == 'X' && board[0][1] == 'X' && board[0][2] == 'X')
return 'X';
else if(board[1][0] == 'X' && board[1][1] == 'X' && board[1][2] == 'X')
return 'X';
else if(board[2][0] == 'X' && board[2][1] == 'X' && board[2][2] == 'X')
return 'X';
/// Columns
else if(board[0][0] == 'X' && board[1][0] == 'X' && board[2][0] == 'X')
return 'X';
else if(board[0][1] == 'X' && board[1][1] == 'X' && board[2][1] == 'X')
return 'X';
else if(board[0][2] == 'X' && board[1][2] == 'X' && board[2][2] == 'X')
return 'X';
/// Diagonals
else if(board[0][0] == 'X' && board[1][1] == 'X' && board[2][2] == 'X')
return 'X';
else if(board[0][2] == 'X' && board[1][1] == 'X' && board[2][0] == 'X')
return 'X';
// Player 2
/// Across
if(board[0][0] == 'O' && board[0][1] == 'O' && board[0][2] == 'O')
return 'O';
else if(board[1][0] == 'O' && board[1][1] == 'O' && board[1][2] == 'O')
return 'O';
else if(board[2][0] == 'O' && board[2][1] == 'O' && board[2][2] == 'O')
return 'O';
/// Columns
else if(board[0][0] == 'O' && board[1][0] == 'O' && board[2][0] == 'O')
return 'O';
else if(board[0][1] == 'O' && board[1][1] == 'O' && board[2][1] == 'O')
return 'O';
else if(board[0][2] == 'O' && board[1][2] == 'O' && board[2][2] == 'O')
return 'O';
/// Diagonals
else if(board[0][0] == 'O' && board[1][1] == 'O' && board[2][2] == 'O')
return 'O';
else if(board[0][2] == 'O' && board[1][1] == 'O' && board[2][0] == 'O')
return 'O';
}
在函数 logic()
中,您缺少一条 return 语句,这意味着如果 none 的条件得到满足,该函数将 return 满足任何条件可能在那个寄存器中。我发现如果你在函数的末尾添加一个 return 0;
,你不会得到那个行为。