When i use
Code:
nth_next_game(x, gamestate[9]);
I get this error;
Code:
C:\Program Files\Microsoft Visual Studio\MyProjects\Tic Tac Toe\MichaelNeill.cpp(131) : error C2664: 'nth_next_game' : cannot convert parameter 2 from 'int' to 'int []'
Any know whats wrong with it. Here is my code.
Code:
#include <iostream>
using namespace std;
int num_of_suc;
int nth_next_move(int n, int GameState[9]);
void nth_next_game(int n, int GameState[9], int NextGame[9]);
int number_of_moves(int GameState[9]);
void not_in_state(int GameState[], int Return[]);
bool member(int e, int GameState[9]);
bool safe(int gamestate[9]);
bool game=false;
void drawboard(int[]);
int select_computer_move(int []);
void playermove(int, int []);
void nth_next_game(int n, int GameState[9], int NextGame[9])
{
for(int i=0;i<9;i++)
{
if(i<number_of_moves(GameState))
NextGame[i]=GameState[i];
else if (i == number_of_moves(GameState))
NextGame[i]=nth_next_move(n,GameState);
else
NextGame[i]=-1;
}
}
int number_of_moves(int GameState[9])
{
int i=0;
while(GameState[i] != -1)
i++;
return i;
}
int nth_next_move(int n, int GameState[9])
{
int NotIn[9];
not_in_state(GameState,NotIn);
return NotIn[n-1];
}
void not_in_state(int GameState[], int ret[])
{
int Counter=0;
for(int i=1;i<=9;i++)
if(!member(i,GameState))
{
ret[Counter]=i;
Counter++;
}
for(i=Counter;i<9;i++)
ret[i] = -1;
}
bool member(int e, int GameState[9])
{
bool flag=false;
for(int i=0;i<9;i++)
if(GameState[i]==e)
flag =true;
return flag;
}
bool safe (int gamestate[9])
{
//o's move only!!!!!!
bool safeflag=false;
num_of_suc=9-number_of_moves(gamestate);
int nextgame[9];
if (number_of_moves(gamestate)%2==1)
{
for (int i=1; i<=num_of_suc; i++)
{
nth_next_game(i, gamestate, nextgame);
if (safe(nextgame))
safeflag=true;
}
}
else // x's move only!!!!!!
{
bool safeflag=true;
if (number_of_moves(gamestate)%2==1)
{
for (int i=1; i<=num_of_suc; i++)
{
nth_next_game(i, gamestate, nextgame);
if (!safe(nextgame))
safeflag=false;
}
}
}
return 0;
}
int select_computer_move(int n, int game[9], int gamestate[9])
{
for (n=0; n<=9; n++)
{
if (safe(game))
{
nth_next_game(n, game[n], gamestate[n]);
}
}
return 0;
}
void playermove(int m, int gamestate[9])
{
if ((m==1)&&(gamestate[0]!=0)&&(gamestate[0]!=1))
gamestate[0]=0;
else
if ((m==2)&&(gamestate[1]!=0)&&(gamestate[1]!=1))
gamestate[1]=0;
else
if ((m==3)&&(gamestate[2]!=0)&&(gamestate[2]!=1))
gamestate[2]=0;
else
if ((m==4)&&(gamestate[3]!=0)&&(gamestate[3]!=1))
gamestate[3]=0;
else
if ((m==5)&&(gamestate[4]!=0)&&(gamestate[4]!=1))
gamestate[4]=0;
else
if ((m==6)&&(gamestate[5]!=0)&&(gamestate[5]!=1))
gamestate[5]=0;
else
if ((m==7)&&(gamestate[6]!=0)&&(gamestate[6]!=1))
gamestate[6]=0;
else
if ((m==8)&&(gamestate[7]!=0)&&(gamestate[7]!=1))
gamestate[7]=0;
else
if ((m==9)&&(gamestate[8]!=0)&&(gamestate[8]!=1))
gamestate[8]=0;
}
////////////////////////////////////////////////////
////////// Main Funciton /////////////////////////
////////////////////////////////////////////////////
int main()
{
int gamestate[9]={-1,-1,-1,-1,-1,-1,-1,-1,-1};
char x;
cout << "Would you like to play a game of Tic Tac Toe (Y/N)?" << endl;
cin >> x;
if (x=='y')
game=false;
else
if (x=='n')
game=true;
while (!game)
{
for (int i=0; i<=9; i++)
{
if ((i%2)==0)
{
int x;
cin >> x;
playermove(x, gamestate[9]);
}else
if ((i%2)!=0)
{
selct_computer_move(gamestate[9]);
}
}
}
return 0;
}