Need Help with Part 2

ok, so im doing a c++ programing class at my online school, right now, it needs me to make a second version of the tic tac toe program i just made, and have player 2 be the second player, and im having a bit of trouble sending the random number as player 2's move, atm, i have something that i would think works, however, when building, it outputs, a trillion error's (not really, its just a lot of error's most of them being the same thing

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
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
 //Tic Tac Toe, by Evan McLemore


//include the libraries
#include <iostream>
#include <string>
#include <ctime>


//use the standard namespace
using namespace std;

//Declare Global Variables
char Board[9];

//Declare Functions
void showBoard();
bool moveIsValid(int m);
int whoWon();  // Returns 0 if no one has won, 1 if player 1 has won, and 2 if player 2 has won

void main()
{
	//seed the random number
	srand (time (NULL) );
	
	//declare local variables
	string Player_1_Name;
	string Player_2_Name;
	int Whose_Turn = 1; //if 1, its player's 1 turn, if 2, its player's 2 turn
	int Move; //stores the player's move
	int Total_Moves = 0;
	int Computer_Move = rand ( ) % 8;
	int Guess;
	
	//asign 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 the player's 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;

	while (whoWon ( ) == 0 && Total_Moves < 9)
	{

		//Do this until the player has a valid move
		do
		{

			//show the board
			showBoard();

			//tell the player to move
			if(Whose_Turn == 1)
			{
				cout << "Player 1: its your turn to move" << endl;
				//get the player's move
				cout << "Enter the number of the slot you'd like to move to" << endl;
				cin >> Move;

			}
			else
			{
				//cout << "Player 2: its your turn to move" << endl;
				//get the player's move
				//cout << "Enter the number of the slot you'd like to move to" << endl;
				cout << "The Computer is Making His Move (Please type in what you think the computer chose)" << endl;
				if (Guess == Computer_Move)
				{
					cout << "Please Type the number you chose for the above question again" << endl;
					cin << Move;
				}
				

			}
		}while(moveIsValid (Move) != true);

		//add 1 to Total_Moves
		Total_Moves++;

		//change who's 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 again
	showBoard();

	if (whoWon ( ) == 1)
	{
		cout << Player_1_Name << " has won the game!" << endl;
	}
	else if (whoWon ( ) == 2)
	{
		cout << Player_2_Name << " has won the game!" << endl;
	}
	else
	{
		cout << "It's a tie game!" << endl;
	}

	system ("PAUSE");
}

void showBoard()
{
	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;
}

bool moveIsValid(int m)
{
	if(Board[m] !='x' && Board[m] !='o')
	{
		return true;
	}
	else
	{
		return false;
	}

}

int whoWon()
{
	if (Board[0] == Board[1] && Board[1] == Board[2])
	{
		if (Board[0] == 'x')
		{
			return 1;
		}
		else
		{
			return 2;
		}
	}
	if (Board[3] == Board[4] && Board[4] == Board[5])
	{
		if (Board[3] == 'x')
		{
			return 1;
		}
		else
		{
			return 2;
		}
	}
	if (Board[6] == Board[7] && Board[7] == Board[8])
	{
		if (Board[6] == 'x')
		{
			return 1;
		}
		else
		{
			return 2;
		}
	}
	if (Board[0] == Board[3] && Board[3] == Board[6])
	{
		if (Board[0] == 'x')
		{
			return 1;
		}
		else
		{
			return 2;
		}
	}
	if (Board[1] == Board[4] && Board[4] == Board[7])
	{
		if (Board[1] == 'x')
		{
			return 1;
		}
		else
		{
			return 2;
		}
	}
	if (Board[2] == Board[5] && Board[5] == Board[8])
	{
		if (Board[2] == 'x')
		{
			return 1;
		}
		else
		{
			return 2;
		}
	}
	if (Board[0] == Board[4] && Board[4] == Board[8])
	{
		if (Board[0] == 'x')
		{
			return 1;
		}
		else
		{
			return 2;
		}
	}
	if (Board[2] == Board[4] && Board[4] == Board[6])
	{
		if (Board[2] == 'x')
		{
			return 1;
		}
		else
		{
			return 2;
		}
	}
	return 0;
}


would be awesome if you guys could help

here's some of the error's i get:

1
2
3
4
5
ompiling...
Tic_Tac_Toe.cpp
c:\c++ rescources\computer_tic_tac_toe\tic_tac_toe.cpp(24) : warning C4244: 'argument' : conversion from 'time_t' to 'unsigned int', possible loss of data
c:\c++ rescources\computer_tic_tac_toe\tic_tac_toe.cpp(77) : error C2784: 'std::basic_ostream<_Elem,_Traits> &std::operator <<(std::basic_ostream<_Elem,_Traits> &,const std::basic_string<_Elem,_Traits,_Alloc> &)' : could not deduce template argument for 'std::basic_ostream<_Elem,_Traits> &' from 'std::istream'
        c:\program files (x86)\microsoft visual studio 9.0\vc\include\string(537) : see declaration of 'std::operator <<'
Last edited on
cin << Move;

You seem to have confused the insertion operator (<<) with the extraction operator (>>). (The former inserts data into a stream and the latter extracts data from a stream and stores it elsewhere.) There is no overload of the insertion operator for operands of types std::basic_istream<char> and int.

http://en.cppreference.com/w/cpp/io/basic_ostream/operator_ltlt
http://en.cppreference.com/w/cpp/io/basic_istream/operator_gtgt

void main()

The only acceptable versions of the main function have a return type of int.

http://www.parashift.com/c++-faq/main-returns-int.html
Last edited on
ah, lol, thank's, that was it, works perfectly now :D
ok, ive ran into a new problem, the computer doesnt change its number, so for example, lets say on turn 1, the computer chose slot 1, on turn 2, its still set for slot 1, so the game gets stuck at that point, as its an invalid move
ok, ive ran into a new problem, the computer doesnt change its number, so for example, lets say on turn 1, the computer chose slot 1, on turn 2, its still set for slot 1, so the game gets stuck at that point, as its an invalid move

That is because the variable that is initialized to the pseudo-random number is never changed during the lifetime of the program.

Here are two solutions:

1) Have a container object that contains the numbers of the spaces that have not yet been used. When it is the computer's turn, randomly choose a number from the container and then erase the chosen element.

2) If it is the computer's turn, perform a modulus operation on the value returned by rand and the number of spaces on the board (8); assign the resulting value to the variable Move. Then check the validity of the Move variable using the function you defined. If the move is valid, continue. Otherwise, generate a new value.
Last edited on
ummmm, how do i do that? i havent learned that yet, what you see in the code, is most likeley all ive learned so far
also, updates to code:

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
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
//Tic Tac Toe, by Evan McLemore


//include the libraries
#include <iostream>
#include <string>
#include <ctime>


//use the standard namespace
using namespace std;

//Declare Global Variables
char Board[9];

//Declare Functions
void showBoard();
bool moveIsValid(int m);
int whoWon();  // Returns 0 if no one has won, 1 if player 1 has won, and 2 if player 2 has won

void main()
{
	//seed the random number
	srand (time (NULL) );
	
	//declare local variables
	string Player_1_Name;
	string Player_2_Name;
	int Whose_Turn = 1; //if 1, its player's 1 turn, if 2, its player's 2 turn
	int Move; //stores the player's move
	int Total_Moves = 0;
	int Computer_Move = rand ( ) % 8; // The computer's move generator
	int Guess = 0;
	
	//asign 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 the player's names
	cout << "Player 1: Please Enter your Name" << endl;
	cin >> Player_1_Name;
	cout << "Please Enter a Name for the Computer" << endl;
	cin >> Player_2_Name;

	while (whoWon ( ) == 0 && Total_Moves < 9)
	{

		//Do this until the player has a valid move
		do
		{

			//show the board
			showBoard();

			//tell the player to move
			if(Whose_Turn == 1)
			{
				cout << "Player 1: its your turn to move" << endl;
				//get the player's move
				cout << "Enter the number of the slot you'd like to move to" << endl;
				cin >> Move;

			}
			else
			{
				//cout << "Player 2: its your turn to move" << endl;
				//get the player's move
				//cout << "Enter the number of the slot you'd like to move to" << endl;
				cout << Player_2_Name << " is Making His Move, Guess what you think " << Player_2_Name << " chose" << endl;
				cin >> Guess;
				if (Guess == Computer_Move)
				{
					cout << "Please Type the number you chose for the above question again" << endl;
					cin >> Move;
				}
				

			}
		}while(moveIsValid (Move) != true);

		//add 1 to Total_Moves
		Total_Moves++;

		//change who's 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 again
	showBoard();

	//Tell the player's who won
	if (whoWon ( ) == 1)
	{
		cout << Player_1_Name << " has won the game!" << endl;
	}
	else if (whoWon ( ) == 2)
	{
		cout << Player_2_Name << " has won the game!" << endl;
	}
	else
	{
		cout << "It's a tie game!" << endl;
	}

	system ("PAUSE");
}

void showBoard()
{
	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;
}

bool moveIsValid(int m)
{
	if(Board[m] !='x' && Board[m] !='o')
	{
		return true;
	}
	else
	{
		return false;
	}

}

int whoWon()
{
	if (Board[0] == Board[1] && Board[1] == Board[2])
	{
		if (Board[0] == 'x')
		{
			return 1;
		}
		else
		{
			return 2;
		}
	}
	if (Board[3] == Board[4] && Board[4] == Board[5])
	{
		if (Board[3] == 'x')
		{
			return 1;
		}
		else
		{
			return 2;
		}
	}
	if (Board[6] == Board[7] && Board[7] == Board[8])
	{
		if (Board[6] == 'x')
		{
			return 1;
		}
		else
		{
			return 2;
		}
	}
	if (Board[0] == Board[3] && Board[3] == Board[6])
	{
		if (Board[0] == 'x')
		{
			return 1;
		}
		else
		{
			return 2;
		}
	}
	if (Board[1] == Board[4] && Board[4] == Board[7])
	{
		if (Board[1] == 'x')
		{
			return 1;
		}
		else
		{
			return 2;
		}
	}
	if (Board[2] == Board[5] && Board[5] == Board[8])
	{
		if (Board[2] == 'x')
		{
			return 1;
		}
		else
		{
			return 2;
		}
	}
	if (Board[0] == Board[4] && Board[4] == Board[8])
	{
		if (Board[0] == 'x')
		{
			return 1;
		}
		else
		{
			return 2;
		}
	}
	if (Board[2] == Board[4] && Board[4] == Board[6])
	{
		if (Board[2] == 'x')
		{
			return 1;
		}
		else
		{
			return 2;
		}
	}
	return 0;
}
nvm, figured it out, just replaced all the code for the else in the getting the player's move section (left the commented out code though) with:

 
Move = rand ( ) % 9;


it works just like its supposed to :D
Topic archived. No new replies allowed.