嗨我是初学者,在尝试在unity3d中完成它之前,我正在制作一个控制台tic tac toe c ++,但这是另一个故事,我被卡在get_move1()函数上,我该如何检查是否数组有1或-1如果它已经满了而且函数应该说无效移动,除了2d数组之外可以做任何其他方式,我的程序只是挂起而没有错误,我还没有工作其他功能,所以他们现在只是空的。谢谢你的帮助。
*init_board and board_state array
get_move function to determine if the move is legal if it is then
fill board_state array and show X or O on the board with another array
check_win
*/
/* layout of board
cout << " 1 | 2 | 3 \n"
" | | \n"
" - - - - - - \n"
" 4 | 5 | 6 \n"
" | | \n"
" - - - - - - \n"
" 7 | 8 | 9 \n"
" | | \n" << endl;
cout << " " <<board_array[0] <<" | " << board_array[1] << " | " << board_array[2] << "\n"
" | | \n"
" - - - - - - \n"
" " <<board_array[3] <<" | " << board_array[4] << " | " << board_array[5] << "\n"
" | | \n"
" - - - - - - \n"
" " <<board_array[6] <<" | " << board_array[7] << " | " << board_array[8] << "\n"
" | | \n" << endl;
*/
#include <iostream>
using namespace std;
//declare global variables
int board_state[3][3] = { {0,0,0}, //here the 2d array is initialized and set to 0 for empty
{0,1,0},
{0,0,0} };
char gui_state[3][3]; //2d array to represent the X and O on the board
//declare functions
void init_board();
void get_move1();
int main()
{
init_board();
get_move1();
}
void init_board()
{
cout << " 1 | 2 | 3 \n"
" | | \n"
" - - - - - - \n"
" 4 | 5 | 6 \n"
" | | \n"
" - - - - - - \n"
" 7 | 8 | 9 \n"
" | | \n"
" **Tic Tac Toe ** " << endl;
}
void get_move1() // In this function player's moves are taken and make sure they are valid if so update arrays
{
int player1_move;
int i;
int j;
bool invalid_move;
cout << "Player 1 enter move" << endl;
cin >> player1_move;
//need to check if the players's move is valid
for (i=0; i < 3; i++) //if array is 1 or -1 then move is invalid
{
for(j = 0; j < 3; i++)
if (board_state[i][j] == 1 || board_state[i][j] == -1)
{
invalid_move = true;
}
} cout << "You entered an invalid move" << endl;
}
void get_move2()
{
}
void game_state()
{
}
void check_win()
{
}
所以我决定选择一维数组来保持现在的简单
int board_state[9] = {0,1,0,0,0,0,0,0,0}; //here the 1d array is initialized and set to 0 for empty
void get_move1() // In this function player's moves are taken and make sure they are valid if so update arrays
{
int player1_move;
int array_index;
int player1_fill = 1;
cout << "Player 1 enter move" << endl;
cin >> player1_move;
//need to check if the players's move is valid
array_index = player1_move -1;
if (board_state[array_index] == 1 || board_state[array_index] == -1)
{
cout << "Invalid move" << endl;
}
else board_state[array_index] = player1_fill;
感谢帮助人员。
答案 0 :(得分:4)
这一行:
for(j = 0; j < 3; i++)
应该是:
for(j = 0; j < 3; j++)
答案 1 :(得分:0)
invalid_move未正确初始化
此外,如果单元格标记为1.9 ..您需要正确映射它(i,j)并更新阵列。 您没有使用 player1_move 更新数组。为此,你根本不需要for循环
答案 2 :(得分:0)
在for
循环后添加此代码:
if (invalid_move)
{
cout << "Invalid move.\n";
}
答案 3 :(得分:0)
问题是在发现不正确的移动后,循环不会停止,因此invalid_move被覆盖。
invalid_move=false;//and here
for (i=0; i < 3&&invalid_move==false; i++) //Watch out here
{
for(j = 0; j < 3&&invalid_move==false; j++)
if (board_state[i][j] == 1 || board_state[i][j] == -1)
{
invalid_move = true;
}
} cout << "You entered an invalid move" << endl;