이 코드는 Tic Tac Toe의 게임입니다. 게임이 끝난 후 프로그램은 사용자에게 다시 재생할지 여부를 묻는 메시지를 표시하고 예인 경우 다시 실행됩니다. 그러나 배열 값은 전역 적으로 선언되었으므로 업데이트 된 상태로 유지됩니다. 배열은 여러 함수에서 사용됨에 따라 전역 적으로 선언되어야합니다. 사용자가 다시 재생할 옵션을 선택할 때 배열 값을 원래 값으로 다시 설정하는 방법이 있습니까?C++에서 프로그램 다시 시작
#include <iostream>
#include <string>
using namespace std;
void contents(); //function to draw the tic tac toe board
char letters[9] = {'a','b','c','d','e','f','g','h','i'}; //array containing
the default characters of the board
string check(); //function to check whether the game is ongoing or has ended
in a win or draw
string result; // string telling us whether the game is ongoing or has ended
in a win or draw
void contents()
{
cout <<endl<<endl<<endl<<" Tic Tac Toe"<<endl<<endl<<endl;
cout << endl;
cout << " | | " << endl;
cout << " " << letters[0] << " | " << letters[1] << " | " << letters[2]
<< endl;
cout << " | | " << endl;
cout << "----- ----- -----" << endl;
cout << " | | " << endl;
cout << " " << letters[3] << " | " << letters[4] << " | " << letters[5]
<< endl;
cout << " | | " << endl;
cout << "----- ----- -----" << endl;
cout << " | | " << endl;
cout << " " << letters[6] << " | " << letters[7] << " | " << letters[8]
<< endl;
cout << " | | " << endl << endl;
}
int main()
{
char selection1; //selection of the mark chosen by player 1 (X or O)
int player = 1;
char mark;//X or O
char selection2; //selection of the character to replace in the array chosen
by the players
char invalid; //character to enter if the user selects a character that
isn't present in the array
string choice;
while(selection1!='X' || selection1!='Y')
{
cout<<"Make your selection player 1 (X or O): ";
cin>>selection1;
if (selection1=='X' || selection1=='O')
break;
else
cout<<"Make a valid selection, press enter to select again"<<endl;
cin.ignore();
cin.get();
}
do
{
player=(player%2)?1:2;
if(selection1 =='X')
mark = (player == 1) ? 'X' : 'O';
else if (selection1=='O')
mark = (player == 1) ? 'O' : 'X';
contents();
cout << "Player " << player << ", enter a letter: ";
cin >> selection2;
if (selection2 == 'a' && letters[0] == 'a')
letters[0] = mark;
else if (selection2 == 'b' && letters[1] == 'b')
letters[1] = mark;
else if (selection2 == 'c' && letters[2] == 'c')
letters[2] = mark;
else if (selection2 == 'd' && letters[3] == 'd')
letters[3] = mark;
else if (selection2 == 'e' && letters[4] == 'e')
letters[4] = mark;
else if (selection2 == 'f' && letters[5] == 'f')
letters[5] = mark;
else if (selection2 == 'g' && letters[6] == 'g')
letters[6] = mark;
else if (selection2 == 'h' && letters[7] == 'h')
letters[7] = mark;
else if (selection2 == 'i' && letters[8] == 'i')
letters[8] = mark;
else
{
cout<<"Invalid move, press enter to continue: ";
cin.ignore();
cin.get();
player--;
}
result=check();
player++;
}while(result=="Ongoing");
contents();
if(result=="Over")
{
cout<<"Player "<<--player<<" wins ";
cin.ignore();
cin.get();
cout<<"Do you want to play again?";
cin>>choice;
if (choice =="Yes")
main();
}
else
{
cout<<"Draw";
cin.ignore();
cin.get();
cout<<"Do you want to play again?";
cin>>choice;
if (choice =="Yes")
main();
}
return 0;
}
string check()
{
if (letters[0] == letters[1] && letters[1] == letters[2])
return "Over";
else if (letters[3] == letters[4] && letters[4] == letters[5])
return "Over";
else if (letters[6] == letters[7] && letters[7] == letters[8])
return "Over";
else if (letters[0] == letters[3] && letters[3] == letters[6])
return "Over";
else if (letters[1] == letters[4] && letters[4] == letters[7])
return "Over";
else if (letters[2] == letters[5] && letters[5] == letters[8])
return "Over";
else if (letters[0] == letters[4] && letters[4] == letters[8])
return "Over";
else if (letters[2] == letters[4] && letters[4] == letters[6])
return "Over";
else if (letters[0] != 'a' && letters[1] != 'b' && letters[2] != 'c'
&& letters[3] != 'd' && letters[4] != 'e' && letters[5] != 'f'
&& letters[6] != 'g' && letters[7] != 'h' && letters[8] != 'i')
return "Draw";
else
return "Ongoing";
}
게임을 함수로 만들고 기능을 true로 만듭니다. –
전역 변수를 사용할 때의 함정에 오신 것을 환영합니다. 사용법을 배워 보는 것이 가장 좋습니다. – UKMonkey
'main'을 호출하지 마세요. – stark