我被困在编码tic tac toe游戏中。我需要你的帮助。基本上我的问题是为什么我的do-while循环在我的C++代码中不起作用。我正在使用VS C++ 2015.do-while循环内部不是wokirng
背后的基本逻辑是:
- 创建3 3阵列并将1-9作为字符。
- 设置一个for循环,如果语句让玩家输入X或O.如果我是0,或者甚至是玩家1轮到X.如果奇数,玩家2将O作为字符。
- 在do-while循环中,我想检查玩家是否选择了已经选择的单元格。但是do-while循环似乎根本不起作用。
- 通过if语句检查一行中是否有3个X或Os。
请让我知道什么是解决这个问题的关键......非常感谢!
#include <iostream>
#include "tic_tac_toe.h"
using namespace std;
int tic_tac_toe() {
cout << "You chose tic tac toe game!:) \n";
char t[] = { '1', '2' ,'3' , '4', '5', '6', '7', '8', '9' };
cout << "_" << t[0] << "_|_" << t[1] << "_|_" << t[2] << "_\n";
cout << "_" << t[3] << "_|_" << t[4] << "_|_" << t[5] << "_\n";
cout << " " << t[6] << " | " << t[7] << " | " << t[8] << " \n";
for (int i = 0; i < 9; i++) {
if (i == 0 || i % 2 == 0) {
cout << "Player 1, your trun. Please choose a number to put X. \n";
int n1;
cin >> n1;
do {
cout << "You cannot overwrite on X or O. Please in put again. \n";
cin >> n1;
} while (t[n1 - 1] == 'X' || t[n1 - 1] == 'O');
t[n1 - 1] = 'X';
}
else {
cout << "Player 2, your trun. Please choose a number to put O. \n";
int n2;
cin >> n2;
do {
cout << "You cannot overwrite on X or O. Please in put again. \n";
cin >> n2;
} while (t[n2 - 1] == 'X' || t[n2 - 1] == 'O');
t[n2 - 1] = 'O';
}
cout << "_" << t[0] << "_|_" << t[1] << "_|_" << t[2] << "_\n";
cout << "_" << t[3] << "_|_" << t[4] << "_|_" << t[5] << "_\n";
cout << " " << t[6] << " | " << t[7] << " | " << t[8] << " \n";
if (t[0] == 'X' && t[1] == 'X' && t[2] == 'X' ||
t[3] == 'X' && t[4] == 'X' && t[5] == 'X' ||
t[6] == 'X' && t[7] == 'X' && t[8] == 'X' ||
t[0] == 'X' && t[3] == 'X' && t[6] == 'X' ||
t[1] == 'X' && t[4] == 'X' && t[7] == 'X' ||
t[2] == 'X' && t[5] == 'X' && t[8] == 'X' ||
t[0] == 'X' && t[4] == 'X' && t[7] == 'X' ||
t[2] == 'X' && t[4] == 'X' && t[6] == 'X') {
cout << "Player 1, you won! \n";
break;
}
else if(t[0] == 'O' && t[1] == 'O' && t[2] == 'O' ||
t[3] == 'O' && t[4] == 'O' && t[5] == 'O' ||
t[6] == 'O' && t[7] == 'O' && t[8] == 'O' ||
t[0] == 'O' && t[3] == 'O' && t[6] == 'O' ||
t[1] == 'O' && t[4] == 'O' && t[7] == 'O' ||
t[2] == 'O' && t[5] == 'O' && t[8] == 'O' ||
t[0] == 'O' && t[4] == 'O' && t[7] == 'O' ||
t[2] == 'O' && t[4] == 'O' && t[6] == 'O')
{
cout << "Player 2, you won! \n";
break;
}
}
return 0;
}
这听起来就像你可能需要学习如何使用调试器来遍历代码一样。使用一个好的调试器,您可以逐行执行您的程序,并查看它与您期望的偏离的位置。如果你打算做任何编程,这是一个重要的工具。进一步阅读:** [如何调试小程序](http://ericlippert.com/2014/03/05/how-to-debug-small-programs/)** – NathanOliver
“它不工作”不是真的有关你期望什么和实际发生的信息。给这些信息会大大增加你获得帮助的机会。例如,我希望用'while'循环代替'do-while',因为您在第一次选择之后写出“您不能覆盖X或O.请重新输入”,无论它是什么选择。但是,我不能将它作为答案发布,因为我不知道这是否是您的实际问题 –
您是否知道“while”和“do-while”循环之间的区别? “do-while”循环的整个主体至少执行一次,因为条件在最后被检查。这意味着你显示了要求输入的信息,然后你用'cin'读入输入,然后你进入'do'循环,你立即告诉玩家选择错误(根本没有检查过!),你问他输入一个新的值,最后你检查它。这显然是错误的。提示:如果你使用'while'循环,会发生什么? –