• C

TIC TAC TOE

I have a program that involves the design of a tic tac toe game. How do you use a random generator to make the computer respond to the players move?
TOAAsked:
Who is Participating?
I wear a lot of hats...

"The solutions and answers provided on Experts Exchange have been extremely helpful to me over the last few years. I wear a lot of hats - Developer, Database Administrator, Help Desk, etc., so I know a lot of things but not a lot about one thing. Experts Exchange gives me answers from people who do know a lot about one thing, in a easy to use platform." -Todd S.

RONSLOWCommented:
Assuming that the players move is a number from 1..N (say 1..9 for tic-tac-toe) then you use
  int move = int(N*rand()/double(RAND_MAX+1)+1);
rand() returns an int 0 .. RAND_MAX -- the multiplication and division gives you 0..N-1, then add 1 to get 1..N


0

Experts Exchange Solution brought to you by

Your issues matter to us.

Facing a tech roadblock? Get the help and guidance you need from experienced professionals who care. Ask your question anytime, anywhere, with no hassle.

Start your 7-day free trial
justckyCommented:
Assume that the user/player enter a move (1 - N) for the tic-tac-toe game.
declare  a few varibles and constant:

#define FALSE 0
#define TRUE 1

int userMove[9], comMove[9], success, index;
/*for the user move and the position of the computer and success is for checking if the ramdom is same as the user move*/

do
{
           comMove[index] = random (N) + 1;
 /*a for loop should be run here to check all the user move against the     com mover */
          if (comMove[index] != UserMove[index])
                    success = TRUE;
          else
                    success = FALSE;

}while (success == FALSE);

the code above is for the first move if you will like to use it for the next few move than use this as a function and molified the if statement to run a loop to check all the user moves.


0
justckyCommented:
Assume that the user/player enter a move (1 - N) for the tic-tac-toe game.
declare  a few varibles and constant:

#define FALSE 0
#define TRUE 1

int userMove[9], comMove[9], success, index;
/*for the user move and the position of the computer and success is for checking if the ramdom is same as the user move*/

do
{
           comMove[index] = random (N) + 1;
 /*a for loop should be run here to check all the user move against the     com mover */
          if (comMove[index] != UserMove[index])
                    success = TRUE;
          else
                    success = FALSE;

}while (success == FALSE);

the code above is for the first move if you will like to use it for the next few move than use this as a function and molified the if statement to run a loop to check all the user moves.


0
10 Tips to Protect Your Business from Ransomware

Did you know that ransomware is the most widespread, destructive malware in the world today? It accounts for 39% of all security breaches, with ransomware gangsters projected to make $11.5B in profits from online extortion by 2019.

justckyCommented:
Assume that the user/player enter a move (1 - N) for the tic-tac-toe game.
declare  a few varibles and constant:

#define FALSE 0
#define TRUE 1

int userMove[9], comMove[9], success, index;
/*for the user move and the position of the computer and success is for checking if the ramdom is same as the user move*/

do
{
           comMove[index] = random (N) + 1;
 /*a for loop should be run here to check all the user move against the     com mover */
          if (comMove[index] != UserMove[index])
                    success = TRUE;
          else
                    success = FALSE;

}while (success == FALSE);

the code above is for the first move if you will like to use it for the next few move than use this as a function and molified the if statement to run a loop to check all the user moves.


0
RONSLOWCommented:
There is some bad advice in the above...

* random(N) is not standard C and so may well be missing in some implementations.

* the code
  if (comMove[index] != UserMove[index])
    success = TRUE;
  else
    success = FALSE;
is not really good.  better is
  success = comMove[index] != userMove[index];

* similaraly
  } while (success == FALSE);
would be better as
  ) while (! success)

* and the whole logic is flawed anyway.

how about this..

char board[9], move[9];
int i;
int userturn =1 ;
char userpiece='o';
char comppiece='x';
for (i=0;i<9;i++) board[i] = ' '; /* no o or x */
for (i=0;i<9;i++) move[i] = -1; /* no move */
for (i=0;i<9;i++) {
  int which;
  char piece;
  if (i%2 == userturn) {
    piece = userpiece;
    /*
    ask user for which square
    */
  } else {
    do {
      which = int(9*rand()/double(RAND_MAX+1)+1);
    } while (board[i] != ' ');
  }
  move[i] = which;
  board[i] = piece;
  if (i > 4) {
    /*
    check for win
    */
  }
}

0
RONSLOWCommented:
BTW change
  which = int(9*rand()/double(RAND_MAX+1)+1);
into
  which = int(9*rand()/double(RAND_MAX+1));
as in the code above, move numbers are 0..8 rather than 1..9

0
TOAAuthor Commented:
I'm sorry guys but I finished the whole program two days ago.

Thanks for your help.
0
It's more than this solution.Get answers and train to solve all your tech problems - anytime, anywhere.Try it for free Edge Out The Competitionfor your dream job with proven skills and certifications.Get started today Stand Outas the employee with proven skills.Start learning today for free Move Your Career Forwardwith certification training in the latest technologies.Start your trial today
C

From novice to tech pro — start learning today.