跳转到C++:Tic-Tac-Toe游戏[使用枚举]
Jumping into C++: Tic Tac Toe game [using enum]
首先,我要求任何回复的人考虑这些因素。目前,我对数组和枚举的了解非常少,大多数基础知识都已了解,如您将在下面看到的内容。我已经试着解决这个问题三天了,现在我请求帮助,以免我每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编写代码的方式。
要做到这一点,请为每个函数定义一个接口和一个清晰的作业。也许可以添加结构来将属于一起的数据保持在一起。
将函数更改为仅处理其输入参数(查看函数如何接收参数和返回值(后,可以单独测试每个函数。确保您的读入输入功能正常工作。确保你操纵比赛场地的功能发挥作用。在将它们插在一起之前,先执行所有这些。这称为单元测试。
一旦你确信,不管你的函数接收到什么数据,它总是做得很好,把它们插在一起,看看结果是否有效。如果没有,你的第一个目标是找出哪个函数被破坏了。使用新的测试输入返回单元测试。
冲洗并重复,直到程序正常工作。
相关文章:
- 不带大括号的枚举形式
- 枚举环境变量的惯用C++14/C++17方法
- 类似枚举的计算常量
- 如何正确实现和访问运算符的各种自定义枚举器
- 错误:从"int"到枚举c++的转换无效
- C++中构造函数中的枚举
- 访问在 C++ 结构中声明的枚举变量
- 枚举类'classname'的多重定义
- 强枚举类型定义:Clang Bug 还是 C++11 标准不确定性?
- typedef 枚举和枚举类有什么区别?
- 为什么我的开关/机箱在使用枚举时默认?
- 标准::可选枚举的比较运算符
- C++两个源文件之间共享的枚举的静态实例
- 打印没有铸件的枚举可以在C++中吗?
- 枚举成员与静态 int 成员?
- C++:枚举:错误:应使用标识符而不是"}"
- 带有 c++ 的枚举(输入检查)
- 在 qml 中使用 Q_ENUM 和 Q_PROPERTY 作为枚举类
- 为什么 int 类型的枚举类值不能用作 int
- 在 C++ 中输出枚举类类型的向量元素