can someone help with this tic-tac-toe project?

i have been c++ programming for a couple of months, using Microsoft visual c++ 2008, and i am trying to do a program that lets you play tic, tac, toe. i have the program done, but my teach is now making me make it so that you are playing against the computer and she doesn't say how to, all it says is that i have to create random numbers between 0-8 using the srand () function in place of move for player 2. can someone help.

below is the code for the program and thanks to those who can help.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
//Tic-Tac-Toe by bob the giraff

// Include the libraries
#include <iostream>
#include <string>
 
//Use the standard namespace
using namespace std;
 
// Declare global variables
char Board[9];
 
// Declare functions
void showBoard ( );
bool moveIsValid ( );
 
void main ( )
{
   // Declare local variables
   string Player_1_Name;
   string Player_2_Name;
   int Whose_Turn = 1; // 1 means it's player 1's turn, 2 means it's player 2's turn
   int Move; // Stores where the player wants to move
   
 
   //Assign values to the playing board
   Board[0] = '0';
   Board[1] = '1';
   Board[2] = '2';
   Board[3] = '3';
   Board[4] = '4';
   Board[5] = '5';
   Board[6] = '6';
   Board[7] = '7';
   Board[8] = '8';
 
   // Get player names
   cout << "Player 1: Please enter your name." << endl;
   cin >> Player_1_Name;
   cout << "Player 2: Please enter your name." << endl;
   cin >> Player_2_Name;
 
   // Show the board
   showBoard ( );
 
   // Tell which player to move
   if (Whose_Turn == 1)
   {
      cout << Player_1_Name << ": It's your turn." << endl;
   }
   else
   {
      cout << Player_2_Name << ": It's your turn." << endl;
   }
   // Get the move
   cout << "Enter the number of the spot where you'd like to move." << endl;
   cin >> Move;
 
   // Change whose turn it is
   switch (Whose_Turn)
   {
   case (1):
      {
         Board[Move] = 'x';
         Whose_Turn = 2;
         break;
      }
   case (2):
      {
         Board[Move] = 'o';
         Whose_Turn = 1;
      }
   }
 
   // Show the board
   showBoard ( );

   system("PAUSE");
}
 
void showBoard ( )
{
   cout << endl;
   cout << Board[0] << " | " << Board[1] << " | " << Board[2] << endl;
   cout << "--+---+--" << endl;
   cout << Board[3] << " | " << Board[4] << " | " << Board[5] << endl;
   cout << "--+---+--" << endl;
   cout << Board[6] << " | " << Board[7] << " | " << Board[8] << endl;
   cout << endl;
}

bool moveIsValid ( )
{
	if (Board[Move] != 'x')
	{
		return true;
	}
	else
	{
		return false;
	}
}

Well it sounds like your teacher wants you to make an AI that spits out random moves, all you have to do is use rand() and srand() to make a truly random number generator and then make some if statements to make sure that the move hasn't been made before.
That would probably make the teacher happy.

One of the first problems I see in your program is that there is no "win detection". In a simple tic tac toe game there are 8 combinations for the win (8 different ways to line up 3 in a row), so make a function that detects if there are three x's or o's lined up.

From there you can use a random number generator like I said and plug in whatever the generator comes up with.

I suggest watching this guy's tutorial for the random number generator. I've watched all 72 of his tutorials, and they all clear things up quite nicely. http://www.youtube.com/watch?v=naXUIEAIt4U&feature=BFa&list=PLAE85DE8440AA6B83

I hope you understand loops at this point because without them you're in for a lot of programming tonight.
Well, I finished a rewrite of your code so that it works with a random AI. I just want to warn you that your teacher isn't stupid, so if they run a search for plagiarism then they are likely to find this page.
The best that I can do is to say that this code is yours, I just made personal adjustments. I suggest you look at the code I post here and rewrite it yourself so that the variables and work are your own. Good luck.
(BTW, another improvement would be if you wanted to make a "Tie detection", if the game ends in a tie here it just ends the program, also you could set it so that the player #1 can't fill an x in a spot already in use. I left that as is for testing purposes.)

There are probably more efficient ways of writing this code, but I've only been coding for a month or two myself, I hope to start classes this next semester. The link I gave you before for the tutorials really do help a lot so you should watch them if you have the time.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
//Tic-Tac-Toe by bob the giraff

// Include the libraries
#include <iostream>
#include <string>
#include <ctime>//for time(0) in israndom()
#include <cstdlib>//for use of rand() and srand()

//Use the standard namespace
using namespace std;

// Declare global variables


// Declare functions
void showBoard ( );
bool moveIsValid ( );
int isOver();
int israndom();


   //Assign values to the playing board
string Board[9] = {"0","1","2","3","4","5","6","7","8"};//just another way to load an array 

//notice I loaded Board[] outside of Main(), 
//that is so that it is a global variable instead of a local one.

int main ( )
{
   // Declare local variables
   string Player_1_Name;
   string Player_2_Name;
   int Whose_Turn = 1; // 1 means it's player 1's turn, 2 means it's player 2's turn
   int Move; // Stores where the player wants to move




   // Get player names
   cout << "Player 1: Please enter your name." << endl;
   cin >> Player_1_Name;
   cout << "Player 2: Please enter your computer's name." << endl;
   cin >> Player_2_Name;
  int win=1;
while(win==1)
{
   // Show the board
   showBoard ( );
   win=isOver();

   // Tell which player to move
   if (Whose_Turn == 1 && win!=0)
   {
      cout << Player_1_Name << ": It's your turn." << endl;
         cout << "Enter the number of the spot where you'd like to move." << endl;
   cin >> Move;
   }
   else if(Whose_Turn == 2 && win!=0)
   {
      cout << Player_2_Name << ": It's your turn." << endl;
      Move=israndom();
   }
   // Get the move



   // Change whose turn it is
   if(win==1)
   {
   switch (Whose_Turn)
   {
   case (1):
      {
         Board[Move] = 'x';
         Whose_Turn = 2;
         break;
      }
   case (2):
      {
         Board[Move] = 'o';
         Whose_Turn = 1;
      }
   }
}
}

   // Show the board
   showBoard ( );


}

void showBoard ( )
{
   cout << endl;
   cout << Board[0] << " | " << Board[1] << " | " << Board[2] << endl;
   cout << "--+---+--" << endl;
   cout << Board[3] << " | " << Board[4] << " | " << Board[5] << endl;
   cout << "--+---+--" << endl;
   cout << Board[6] << " | " << Board[7] << " | " << Board[8] << endl;
   cout << endl;
}

bool moveIsValid ( )
{
    int Move;
	if (Board[Move] != "x")
	{
		return true;
	}
	else
	{
		return false;
	}
}
int israndom() //random number generator
{
    string block = "no";
    int num;
  srand(time(0));
while(block=="no")
{
      num=rand()%8;
      if(Board[num]!="x"&&Board[num]!="o")
      {
         block="go";
      }
}
return num;
}
int isOver() // win detector, checks if anyone has won. 
{
    int end=0;
 //If you won;
 if(Board[0]=="x" && Board[1]=="x" && Board[2]=="x")
 {
     cout<<"Congrats, you win!"<<endl;
 }
 else if(Board[3]=="x"&&Board[4]=="x" && Board[5]=="x")
 {
     cout<<"Congrats, you win!"<<endl;
 }
else if(Board[6]=="x"&&Board[7]=="x" && Board[8]=="x")
 {
     cout<<"Congrats, you win!"<<endl;
 }
else if(Board[0]=="x"&&Board[3]=="x" && Board[6]=="x")
 {
     cout<<"Congrats, you win!"<<endl;
 }
else if(Board[1]=="x"&&Board[4]=="x" && Board[7]=="x")
 {
     cout<<"Congrats, you win!"<<endl;
 }
else if(Board[2]=="x"&&Board[5]=="x" && Board[8]=="x")
 {
     cout<<"Congrats, you win!"<<endl;
 }
else if(Board[0]=="x"&&Board[4]=="x" && Board[8]=="x")
 {
     cout<<"Congrats, you win!"<<endl;
 }
else if(Board[2]=="x"&&Board[4]=="x" && Board[6]=="x")
 {
     cout<<"Congrats, you win!"<<endl;
 }

 //If you lose
 else if(Board[0]=="o"&&Board[1]=="o" && Board[2]=="o")
 {
     cout<<"Oooh, Better luck next time."<<endl;
 }
 else if(Board[3]=="o"&&Board[4]=="o" && Board[5]=="o")
 {
     cout<<"Oooh, Better luck next time."<<endl;
 }
else if(Board[6]=="o"&&Board[7]=="o" && Board[8]=="o")
 {
     cout<<"Oooh, Better luck next time."<<endl;
 }
else if(Board[0]=="o"&&Board[3]=="o" && Board[6]=="o")
 {
     cout<<"Oooh, Better luck next time."<<endl;
 }
else if(Board[1]=="o"&&Board[4]=="o" && Board[7]=="o")
 {
     cout<<"Oooh, Better luck next time."<<endl;
 }
else if(Board[2]=="o"&&Board[5]=="o" && Board[8]=="o")
 {
     cout<<"Oooh, Better luck next time."<<endl;
 }
else if(Board[0]=="o"&&Board[4]=="o" && Board[8]=="o")
 {
     cout<<"Oooh, Better luck next time."<<endl;
 }
else if(Board[2]=="o"&&Board[4]=="o" && Board[6]=="o")
 {
     cout<<"Oooh, Better luck next time."<<endl;
 }
  else
  {
      end=1;

  }

return end;
}

Last edited on
Well to hint,

1
2
3
4
5
6
7
8
9
10
11
12
13
14
if whoesTuen = 1;
//do your code for asking an input
else copmuterMove();

computerMove(){
 Move = 1;

 while(!moveIsValid ()){

 Move = abs(rand()%8);

 }

}
Last edited on
@newbieg - I would refrain from posting full solutions on here as far as homework is concerned. Not only is there a risk of the student getting punished for plagiarism (regardless of whether the copy your code or not) it does nothing to benefit the learning experience of the poster.
Topic archived. No new replies allowed.