坚持TicTacToe检查移动是否有效C ++

时间:2011-11-04 23:34:46

标签: c++ tic-tac-toe

嗨我是初学者,在尝试在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;

感谢帮助人员。

4 个答案:

答案 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;