Reputation: 367
Hi I am a beginner and I am making a console tic tac toe c++ before I try to get it done in unity3d but that's another story, I got stuck on the get_move1() function, as far as how can I check if the array has a 1 or a -1 if it does then is full and the function should say in an invalid move, can this be done any other way besides 2d array, my program just hangs with no error, I haven't work on the other functions yet so they are just empty for now. Thanks for your help.
*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()
{
}
so I decided to go for a one dimensional array to keep it simple for now
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;
Thanks for the help guys.
Upvotes: 0
Views: 2449
Reputation: 1582
The problem is after discover an improper move, the loop does not stop so the invalid_move is overwritten.
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;
Upvotes: 0
Reputation: 57728
After the for
loop add this code:
if (invalid_move)
{
cout << "Invalid move.\n";
}
Upvotes: 0
Reputation: 24413
invalid_move is not intialized properly
Also if the cells are labelled 1.9.. you need to map it (i,j) correctly and update the array. You are not updating the array with player1_move. For this you don't need the for loop at all
Upvotes: 0
Reputation: 183456
This line:
for(j = 0; j < 3; i++)
should be:
for(j = 0; j < 3; j++)
Upvotes: 4