Making the loop work

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
#include <iostream>
using namespace std;

char square[10] = {'o','1','2','3','4','5','6','7','8','9'};

int checkwin();
void board();

int main()
{
	int player = 1,i,choice;

	char mark;
	bool AnotherGame = true;

	do
	{
		bool GameOver = false;
	do
	{
		board();
		player=(player%2)?1:2;

		cout << "Player " << player << ", enter a number:  ";
		cin >> choice;

		mark=(player == 1) ? 'X' : 'O';

		if (choice == 1 && square[1] == '1')

			square[1] = mark;
		else if (choice == 2 && square[2] == '2')

			square[2] = mark;
		else if (choice == 3 && square[3] == '3')

			square[3] = mark;
		else if (choice == 4 && square[4] == '4')

			square[4] = mark;
		else if (choice == 5 && square[5] == '5')

			square[5] = mark;
		else if (choice == 6 && square[6] == '6')

			square[6] = mark;
		else if (choice == 7 && square[7] == '7')

			square[7] = mark;
		else if (choice == 8 && square[8] == '8')

			square[8] = mark;
		else if (choice == 9 && square[9] == '9')

			square[9] = mark;
		else
		{
			cout<<"Invalid move ";

			player--;
			cin.ignore();
			cin.get();
		}
		i=checkwin();

		player++;
	}while(i==-1);
	board();
	if(i==1){

		cout<<"==>\aPlayer "<<--player<<" win ";
		GameOver = true;
	} else {
		cout << "==>\aGame draw" << endl;
		GameOver = true;
	}

		cout << "Play again? (y/n)";
		char PlayAgain = ' ';
		cin >> PlayAgain;
		if (PlayAgain == 'n') {
			AnotherGame = false;
		}
	}while (AnotherGame);

	return 0;
}

int checkwin()
{
	if (square[1] == square[2] && square[2] == square[3])

		return 1;
	else if (square[4] == square[5] && square[5] == square[6])

		return 1;
	else if (square[7] == square[8] && square[8] == square[9])

		return 1;
	else if (square[1] == square[4] && square[4] == square[7])

		return 1;
	else if (square[2] == square[5] && square[5] == square[8])

		return 1;
	else if (square[3] == square[6] && square[6] == square[9])

		return 1;
	else if (square[1] == square[5] && square[5] == square[9])

		return 1;
	else if (square[3] == square[5] && square[5] == square[7])

		return 1;
	else if (square[1] != '1' && square[2] != '2' && square[3] != '3' 
                    && square[4] != '4' && square[5] != '5' && square[6] != '6' 
                  && square[7] != '7' && square[8] != '8' && square[9] != '9')

		return 0;
	else
		return -1;
}

void board()
{
	system("cls");
	cout << "\n\n\tTic Tac Toe\n\n";

	cout << "Player 1 (X)  -  Player 2 (O)" << endl << endl;
	cout << endl;

	cout << "     |     |     " << endl;
	cout << "  " << square[1] << "  |  " << square[2] << "  |  " << square[3] << endl;

	cout << "_____|_____|_____" << endl;
	cout << "     |     |     " << endl;

	cout << "  " << square[4] << "  |  " << square[5] << "  |  " << square[6] << endl;

	cout << "_____|_____|_____" << endl;
	cout << "     |     |     " << endl;

	cout << "  " << square[7] << "  |  " << square[8] << "  |  " << square[9] << endl;

	cout << "     |     |     " << endl << endl;
}


This is the program of my tic tac toe game and everything works fine except the loop part, which is the last few lines where I ask if the user would like to play again. When the user inputs n, the program closes, which is fine. If the user inputs y, the tic tac toe board returns to the winning board, and the user continues playing from there. How would I make the board reset?
You would need to re-initialize the square array. The more correct solution would be to include the definition of square in the main function, inside the do loop, and pass it to the board() and checkwin() functions as parameter. Global variables should be avoided if possible, even if it would require extra coding.
 
char square[10] = {'o','1','2','3','4','5','6','7','8','9'};


I stuck this code in the main and the do loop.

When you say, "pass it to the board() and checkwin() functions as parameter", what does pass it mean?

If I am doing what I think you are suggesting me do, the board would continue resetting every time I do a move but would not allow the same move on the same spot. And eventually, there will be no spots left, even if there technically is a winner.
Last edited on
@itsabe

Here's the modification I would do to it.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
cout << "Play again? (y/n)";
		char PlayAgain = ' ';
		while(PlayAgain!='N'&&PlayAgain!='Y')
		{
		cin >> PlayAgain;
		PlayAgain=toupper(PlayAgain);
		if (PlayAgain == 'N') 
		{
			AnotherGame = false;
		}
		if (PlayAgain == 'Y')
		{
			for(int x=0;x<10;x++)
				square[x] = '\x30'+x; // Re initializes square[]. Square[0] is '0', and 1 is added each time
                                                                 // so square[1] is '1', square[2] is '2',etc. 
			board(); // re prints the board, with original values
		}
		if(PlayAgain!='N'&&PlayAgain!='Y')
			cout << "Enter only a y or n, please.." << endl;
		}
Topic archived. No new replies allowed.