我正在教自己C ++并且在尝试使用数组时遇到了问题:
我正在尝试制作一个 tic-tac-toe 游戏,用户将输入两个整数来宣布他想要移动的位置,然后打印出适合他们的棋盘。
除此之外,当我尝试修改我的电路板一次时,它通常会改变两个值!
示例)如果我输入的前四个数字是{0,1,1,0}
我希望绘制两个字母 - 一个“x”和一个“o”。
但是画了多个“o”!
感谢您的帮助!
#include <string>
#include <iostream>
using namespace std;
string board[2][2];
int xpos, ypos;
string turn;
int main()
{
for(int i = 0; i < 3; i++)
{
for(int j = 0; j < 3; j++)
{
board[i][j]="-";
}
}
for(int i=0;i<9;i++)
{
if(i%2==0)
turn = "x";
else
turn = "o";
cout<< "Where are you moving?\n";
cin>> xpos >> ypos;
board[xpos][ypos] = turn;
cout<<"The board is:\n";
cout<< board[0][0]+board[0][1]+board[0][2]+ "\n";
cout<< board[1][0]+board[1][1]+board[1][2]+ "\n";
cout<< board[2][0]+board[2][1]+board[2][2]+ "\n";
}
return 0;
}
答案 0 :(得分:1)
开始更改
string board[2][2];
到
string board[3][3];
因为你的循环从0到2 - 即3项
答案 1 :(得分:0)
将数组从2x2更改为3x3后,我测试了代码,它似乎正在运行。
但是,您应该在用户输入后检查xpos
和ypos
的值:正如代码现在一样,
board[xpos][ypos] = turn;
可能超出界限,并且可能导致程序崩溃(如果用户在任何坐标上输入大于2的任何内容)。
最后,这是个人偏好的问题,你的代码现在使用用户输入的坐标,从0到2.通常,人们会说它们在1到3的范围内(所以1,1将是左上角大多数方形,而不是中间方形)。更改此项是将先前引用的行更改为
board[xpos-1][ypos-1] = turn;
(当然,检查值在1和3之间)。
编辑:此外,所提出的坐标是垂直 - 水平的(意味着给定的第一个值代表垂直坐标,第二个值代表水平坐标)。因此,在标准的笛卡尔图上,您的值被表示为(y,x),与人们(并且,我只是猜测,你)的习惯相反。