跳转到C++:Tic-Tac-Toe游戏[使用枚举]

Jumping into C++: Tic Tac Toe game [using enum]

本文关键字:枚举 游戏 Tic-Tac-Toe C++      更新时间:2024-09-27

首先,我要求任何回复的人考虑这些因素。目前,我对数组和枚举的了解非常少,大多数基础知识都已了解,如您将在下面看到的内容。我已经试着解决这个问题三天了,现在我请求帮助,以免我每45分钟1小时就筋疲力尽。

问题:编写一个双人井字游戏,让两个人互相对抗;使用枚举(如果可能(表示板的值

#include<iostream>
#include<string>
bool tie = false;
std::string p1, p2;
enum turnbased{token1, token2, empty};
char space[3][3] = {{1, 2, 3}, {4, 5, 6}, {7, 8, 9}};
int row;
int column;
int token;
void board() //producing the required space[][] coordinates to empty squares
{
std::cout << "     |    |    n";
std::cout <<"  "<<space[0][0]<<"  | "<<space[0][1]<<"  | "<<space[0][2]<<" n";
std::cout << " ____|____|____n";
std::cout <<"  "<<space[1][0]<<"  | "<<space[1][1]<<"  | "<<space[1][2]<<" n";
std::cout << " ____|____|____n";
std::cout << "     |    |    n";
std::cout <<"  "<<space[2][0]<<"   | "<<space[2][1]<<"    | "<<space[2][2]<<" n";
std::cout << "     |    |    n";
}
void playerswitch()
{
turnbased assignto = token1; //initializing enum type to define token1 for turns to occur
int token = empty; //declaring token to equivalate to enum variable{empty} in position()
if(assignto)
{
std::cout << p1 << " choose slot for - " << token1;
assignto = token2;
}
else(assignto == token2);
{
std::cout << p2 << " choose slot for - " << token2;
assignto;
}
std::cin >> token;
}
void position()
{
if(empty == 1) // positioning array space
{
row = 0;
column = 0;
}
else if(empty == 2)
{
row = 0;
column = 1;
}
else if(empty == 3)
{
row = 0;
column = 2;
}
else if(empty == 4)
{
row = 1;
column = 0;
}
else if(empty == 5)
{
row = 1;
column = 1;
}
else if(empty == 6)
{
row = 1;
column = 2;
}
else if(empty == 7)
{
row = 2;
column = 0;
}
else if(empty == 7)
{
row = 2;
column = 1;
}
else if(empty == 8)
{
row = 2;
column = 2;
}
else(empty < 1 || empty > 9);
{
std::cout << "Invalid!!!" << std::endl;
}
//token check and execution
if(token1 && space[row][column] != token1 && space[row][column] != token2)
{
space[row][column] = token1;
token2;
}
else if(token2 && space[row][column] != token1 && space[row][column] != token2)
{
space[row][column] = token2;
token1;
}
else{
std::cout << "Invalid space!" << std::endl;
position();
}
playerswitch();
board();
}
//win check
bool results()
{
for(int i = 0; i < 3; i++)
{   //checks horizontally and vertically
if(space[i][0] == space[i][1] && space[i][0] == space[i][2] || space[0][i] == space[1][i] && space[0][i] == space[2][i])
return true;
//checks diagonally
if(space[0][0] == space[1][1] && space[1][1] == space[2][2] || space[0][2] == space[1][1] && space[1][1] == space[2][0])
return true;
for(int j = 0; j < 3; j++)
{
if(space[i][j] != token1 && space[i][j] != token2)
{
return false;
}
}
}
tie = true;
return false;
}
int main()
{
std::cout << "Enter the name of the first player: n";
getline(std::cin, p1);
std::cout << p1 << " is player1 so he/she will play first n";
std::cout << "Enter the name of the second player: n";
getline(std::cin, p2);
std::cout << p2 << " is player2 so he/she will play second n";
while(!results())
{
board();
playerswitch();
position();
results();
}
if(token1 && tie)
{
std::cout << p2 << " wins!" << std::endl;
}
else if(token2 && tie)
{
std::cout << p1 << " wins!" << std::endl;
}
else
{
std::cout << "It's a draw!" << std::endl;
}
}```

我不会修复你的代码,但我会帮助你构建它,这样你就可以自己解决它和未来的问题。

首先,去掉所有全局变量。这一点很重要,因为对代码进行推理的方法是孤立地看待各个部分。这是唯一的only编写代码的方式。

要做到这一点,请为每个函数定义一个接口和一个清晰的作业。也许可以添加结构来将属于一起的数据保持在一起。

将函数更改为仅处理其输入参数(查看函数如何接收参数和返回值(后,可以单独测试每个函数。确保您的读入输入功能正常工作。确保你操纵比赛场地的功能发挥作用。在将它们插在一起之前,先执行所有这些。这称为单元测试。

一旦你确信,不管你的函数接收到什么数据,它总是做得很好,把它们插在一起,看看结果是否有效。如果没有,你的第一个目标是找出哪个函数被破坏了。使用新的测试输入返回单元测试。

冲洗并重复,直到程序正常工作。