我如何重置我的井字游戏的值
How i can reset the values of my Tic Tac Toe Game
您好,我的程序有问题。编程对我来说是新的,我不知道我将在哪里重置矩阵的值,因为它的值的声明是全局的。为了了解更多信息,我在下面有一个评论,其中如果游戏已经完成,程序将询问用户是否要再次运行游戏。无论如何,可以通过向给定代码添加一些代码或修改来解决此问题。我尝试使用功能转到开始;在 if 条件和主函数中有一个 开始:写入。但它没有用。请提前帮助我谢谢。
#include <iostream>
using namespace std;
char matrix[3][3] = { '1', '2', '3', '4', '5', '6', '7', '8', '9' };
char player = 'X';
int rear;
void Draw()
{
system("cls");
cout << "nntTic Tac Toe Game nn";
for (int i = 0; i < 3; i++)
{
cout<<" t ";
for (int j = 0; j < 3; j++)
{
cout << matrix[i][j] << " ";
}
cout << endl;
}
}
void Input()
{
int a;
++rear;
cout << "n Press the number of the field: ";
cin >> a;
if (a == 1)
matrix[0][0] = player;
else if (a == 2)
matrix[0][1] = player;
else if (a == 3)
matrix[0][2] = player;
else if (a == 4)
matrix[1][0] = player;
else if (a == 5)
matrix[1][1] = player;
else if (a == 6)
matrix[1][2] = player;
else if (a == 7)
matrix[2][0] = player;
else if (a == 8)
matrix[2][1] = player;
else if (a == 9)
matrix[2][2] = player;
else {
cout<<"n [ERROR: Invalid Range of Input is only 1-9 ]nn ";
system("pause");
rear--;
}
}
void TogglePlayer()
{
if (player == 'X')
player = 'O';
else
player = 'X';
}
char Win()
{
//first player
if (matrix[0][0] == 'X' && matrix[0][1] == 'X' && matrix[0][2] == 'X')
return 'X';
if (matrix[1][0] == 'X' && matrix[1][1] == 'X' && matrix[1][2] == 'X')
return 'X';
if (matrix[2][0] == 'X' && matrix[2][1] == 'X' && matrix[2][2] == 'X')
return 'X';
if (matrix[0][0] == 'X' && matrix[1][0] == 'X' && matrix[2][0] == 'X')
return 'X';
if (matrix[0][1] == 'X' && matrix[1][1] == 'X' && matrix[2][1] == 'X')
return 'X';
if (matrix[0][2] == 'X' && matrix[1][2] == 'X' && matrix[2][2] == 'X')
return 'X';
if (matrix[0][0] == 'X' && matrix[1][1] == 'X' && matrix[2][2] == 'X')
return 'X';
if (matrix[2][0] == 'X' && matrix[1][1] == 'X' && matrix[0][2] == 'X')
return 'X';
//second player
if (matrix[0][0] == 'O' && matrix[0][1] == 'O' && matrix[0][2] == 'O')
return 'O';
if (matrix[1][0] == 'O' && matrix[1][1] == 'O' && matrix[1][2] == 'O')
return 'O';
if (matrix[2][0] == 'O' && matrix[2][1] == 'O' && matrix[2][2] == 'O')
return 'O';
if (matrix[0][0] == 'O' && matrix[1][0] == 'O' && matrix[2][0] == 'O')
return 'O';
if (matrix[0][1] == 'O' && matrix[1][1] == 'O' && matrix[2][1] == 'O')
return 'O';
if (matrix[0][2] == 'O' && matrix[1][2] == 'O' && matrix[2][2] == 'O')
return 'O';
if (matrix[0][0] == 'O' && matrix[1][1] == 'O' && matrix[2][2] == 'O')
return 'O';
if (matrix[2][0] == 'O' && matrix[1][1] == 'O' && matrix[0][2] == 'O')
return 'O';
return '/';
}
int main()
{
char choice;
Draw();
Start:
while (1)
{
Input();
Draw();
if (Win() == 'X')
{
cout << "n [Message: Player 'X' Wins The Game] ";
break;
}
else if (Win() == 'O')
{
cout << "n [Message: Player 'O' Wins The Game ]" << endl;
break;
}
else if(rear==9)
{
cout<<" Draw"<<endl;
break;
}
TogglePlayer();
}
cout<<"nn ";
cout<<"Do you want to run the game again [Y/N]? ";
cin>>choice;
if(choice=='Y' || choice=='y')
{
// i don't know where i can reset the values again;
}
else
{
}
return 0;
}
您必须重置游戏变量。我认为您的游戏变量重置值是:
int rear = 0;
player = 'X';
char matrix[3][3] = { '1', '2', '3', '4', '5', '6', '7', '8', '9' };
虽然您只需分配即可重置rear
和player
,但matrix
必须"重新生成"。重新注册matrix
的一种方法是(有关详细信息,请参阅如何从初始值设定项列表分配数组(:
for (int i=0; i<3; i++) {
for (int j=0; j<3; j++) {
matrix[i][j] = i*3+(j+1) + 48;
}
}
最后,你必须回到你main
函数的开始。您已经在这里放置了一个Start:
标签,所以我假设您可能尝试使用goto
?标签需要在Draw()
之前移动。所以这是你的重置代码:
if(choice=='Y' || choice=='y')
{
// i don't know where i can restart the values again;
for (int i=0; i<3; i++) {
for (int j=0; j<3; j++) {
matrix[i][j] = i*3+(j+1) + 48;
}
}
rear = 0;
player = 'X';
goto Start;
}
一些问题:
- 你不应该依赖
goto
,尽管在这种情况下它仍然没问题。 -
system("cls")
在 Linux 上不起作用
最简单的解决方案是创建一个函数来执行此操作(void InitGame()
(,并在需要时运行它。
附带说明:矩阵索引可以通过几个简单的算法从位置找出matrix[(position - 1)/3][(position - 1) % 3]
。 这在初始化矩阵时也很方便。
等于每个玩家,不如检查每个位置的值是否相等,然后该值代表获胜者。
相关文章:
- 我的代码运行良好,但在游戏循环中中断
- 我可以使用任何好的逻辑来阻止计算机将 O 放在井字游戏中的现有 X 上
- 在为我的基于文本的 RPG 游戏制作库存时遇到困难
- 在定义字符数组(井字游戏)的 for 循环中应用输入限制
- 如何为我的游戏设置主菜单场景?QT C++
- 为什么我的 while 循环永远不会在 C++ 中的数字猜测游戏中结束?
- 在我的小行星游戏中,我无法在x坐标上移动我的飞船
- 我的角色向左走,但不向右走(主机游戏)
- 我的游戏引擎的 spdlog 日志记录出现奇怪的"unresolved external symbol"错误
- 如何在没有现有引擎的情况下在游戏中设计我的事件触发器框架?
- SFML c ++ 当包含文件内游戏中发生事件时,如何使用铃声函数为我的游戏创建声音类?
- 为什么我的石头剪刀布游戏不起作用?
- 在C++中,我的主机游戏角色在游戏场数组内移动时不会停止
- 为什么这个经过的时间(帧时间)计算会锁定我的游戏
- 我如何重置我的井字游戏的值
- 我不能在不使用指针的情况下返回 2d 数组!我正在制作一个井字游戏类型游戏,这是我的向上移动功能
- 创建一个井字游戏.我想创建一个 3x3 向量来存储行和列的值,然后在函数中打印出电路板
- 我的井字游戏的吸气机和二传手功能不起作用
- 我的井字游戏代码中的一个问题
- 我想通过引入深度来限制搜索级别,将无与伦比的井字游戏修改为适用于5乘5的区块.任何建议