我创建了一个简单的井字游戏。当玩家获得胜利时(例如,您连续获得 2 X,而您只需要一个,然后输入),程序会立即说:
"someone won"
(我还在琢磨,如何说出获胜选手的名字。)
没有将“3”变成“X”(假设最后一个数字是 3)。
如果我输入 3,“3”应该变成“X”并留下“3 X (X X X)”。相反,它只留下“2(X X 3)”并立即说“有人赢了”。我该如何解决这个问题?
这是我的代码:
#include <iostream>
#include <string>
using namespace std;
//board numbers
char numbers[10] = {'0','1','2','3','4','5','6','7','8','9'};
//structure of players
struct playersinfo
{
int playersnumber;
string player1name, player2name, playersturn;
char player1mark, player2mark;
};
playersinfo players;
//prototype of progress, drawboard, oneWon and twoWon
int progress();
void drawboard();
bool oneWon();
bool twoWon();
int main()
{
//assigns i to progress;
int i, j = 1;
char choice;
//assign players mark
players.player1mark = 'X';
players.player2mark = 'O';
//ask players their name
cout << "Enter player 1's name : ";
cin >> players.player1name;
system("cls");
cout << "Enter player 2's name : ";
cin >> players.player2name;
do
{
if(j == 1)
{
players.playersturn = players.player1name;
players.playersnumber = 1;
}
else if(j == 2)
{
players.playersturn = players.player2name;
players.playersnumber = 2;
}
drawboard();
cout << '\t' <<players.playersturn << " enter a number : ";
cin >> choice;
if(choice == numbers[1])
{
if(players.playersnumber == 1)
numbers[1] = players.player1mark;
else
numbers[1] = players.player2mark;
//increment j
j++;
if(j == 3)
j -= 2;
}
if(choice == numbers[2])
{
if(players.playersnumber == 1)
numbers[2] = players.player1mark;
else
numbers[2] = players.player2mark;
//increment j
j++;
if(j == 3)
j -= 2;
}
if(choice == numbers[3])
{
if(players.playersnumber == 1)
numbers[3] = players.player1mark;
else
numbers[3] = players.player2mark;
//increment j
j++;
if(j == 3)
j -= 2;
}
if(choice == numbers[4])
{
if(players.playersnumber == 1)
numbers[4] = players.player1mark;
else
numbers[4] = players.player2mark;
//increment j
j++;
if(j == 3)
j -= 2;
}
if(choice == numbers[5])
{
if(players.playersnumber == 1)
numbers[5] = players.player1mark;
else
numbers[5] = players.player2mark;
//increment j
j++;
if(j == 3)
j -= 2;
}
if(choice == numbers[6])
{
if(players.playersnumber == 1)
numbers[6] = players.player1mark;
else
numbers[6] = players.player2mark;
//increment j
j++;
if(j == 3)
j -= 2;
}
if(choice == numbers[7])
{
if(players.playersnumber == 1)
numbers[7] = players.player1mark;
else
numbers[7] = players.player2mark;
//increment j
j++;
if(j == 3)
j -= 2;
}
if(choice == numbers[8])
{
if(players.playersnumber == 1)
numbers[8] = players.player1mark;
else
numbers[8] = players.player2mark;
//increment j
j++;
if(j == 3)
j -= 2;
}
if(choice == numbers[9])
{
if(players.playersnumber == 1)
numbers[9] = players.player1mark;
else
numbers[9] = players.player2mark;
//increment j
j++;
if(j == 3)
j -= 2;
}
//check progress
i = progress();
if(i == -1)
{
cout << "\n\n\t\tGame is tied up";
break;
}
}while(i != 1);
//congratulate player
if(i == 1)
{
}
cin.ignore();
cin.get();
return 0;
}
//definitions of IsTied, IsOver and drawboard
/*********************************
1 = Game is over
0 = Game is sill in progress
-1 = Game is tied up
*********************************/
int progress()
{
if(numbers[1] == numbers[2] && numbers[2] == numbers[3])
return 1;
else if(numbers[4] == numbers[5] && numbers[5] == numbers[6])
return 1;
else if(numbers[7] == numbers[8] && numbers[8] == numbers[9])
return 1;
else if(numbers[1] == numbers[4] && numbers[4] == numbers[7])
return 1;
else if(numbers[2] == numbers[5] && numbers[5] == numbers[8])
return 1;
else if(numbers[3] == numbers[6] && numbers[6] == numbers[9])
return 1;
else if(numbers[7] == numbers[5] && numbers[5] == numbers[3])
return 1;
else if(numbers[9] == numbers[5] && numbers[5] == numbers[9])
return 1;
else if(numbers[1] != '1' && numbers[2] != '2' && numbers[3] != '3'
&& numbers[4] != '4' && numbers[5] != '5' && numbers[6] != '6'
&& numbers[7] != '7' && numbers[8] != '8' && numbers[9] != '9')
return -1;
else
return 0;
}
/****************************
FUNCTION THAT DRAWS THE BOARD
****************************/
void drawboard()
{
//clear system screen
system("cls");
cout << "\n\n\t\tTic Tac Toe\n\n";
cout << '\t' <<players.player1name << " = (X) --- " << players.player2name << " = (O)" << endl << endl;
cout << '\t' << " | | " << endl;
cout << '\t' << " " << numbers[1] << " | " << numbers[2] << " | " << numbers[3] << " " << endl;
cout << '\t' << "_____|_____|_____" << endl;
cout << '\t' << " | | " << endl;
cout << '\t' << " " << numbers[4] << " | " << numbers[5] << " | " << numbers[6] << " " << endl;
cout << '\t' << "_____|_____|_____" << endl;
cout << '\t' << " | | " << endl;
cout << '\t' << " " << numbers[7] << " | " << numbers[8] << " | " << numbers[9] << " " << endl;
cout << '\t' << " | | " << endl;
}
最佳答案
我在大学里做了一个 java 程序来做这个,我不知道如何用 C++ 编程,但基本上,要找出谁赢了,你会得到一个 bool 值,当玩家 1 出局时为真,当玩家 1 出局时为假玩家 2 开始。这样,当有人获胜时,您可以让程序查看 bool 值,它会告诉您最后一步是谁下的。
为了解决它说有人在输入最终 X 之前获胜的事实,只需将检查他们是否获胜的代码放在放下 X 的代码之后运行即可
关于c++ - 为什么没有显示获胜镜头?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23675474/