我正在学习C,我的老师要求我的班级做一个Tic Tac Toe游戏。我设法做了大部分,但我有点卡住了。我已经制作了一个功能,目的是逐行检查线,如果发现所有线号都等于1或2,则游戏循环接收胜利号并停止。但是我在函数内部if
的条件似乎有问题,我无法弄清楚它是什么。即使一行有一个数字,它也不会向游戏循环返回一个数字。我已尝试搜索if
条件但我找不到错误。
这是功能:
int checkLines (int mat [3][3])
{
int i;
int victory;
for (i=0; i<3; i++)
{
if ((mat [i][0] ==1) && (mat [i][1] ==1) && (mat [i][2] ==1))
{
victory = 1;
} else if ((mat [i][0]==2) && (mat [i][1]==2) && (mat [i][2]==2))
{
victory = 2;
}else
{
victory = 0;
}
}
return victory;
}
答案 0 :(得分:2)
这是因为您设置break
后不会victory
退出循环,这意味着循环将继续,然后将victory
重置为零else
部分。
实际上,不是设置victory
而是打破循环,而是直接return
,而在循环之后,你知道你没有&#34;胜利&#34;所以你总能在那里返回0
。
答案 1 :(得分:0)
在你的代码中即使在满足胜利条件后,for
循环执行3次,基本上将victory
的值标记为最后0
。
在if
语句中的任何一个匹配后,您需要停止循环。您可以在break;
和if
块的末尾使用else if
语句。
答案 2 :(得分:0)
你的循环总是通过你的所有矩阵。胜利时你必须打破你的循环!= 0.有一段时间而不是你可以做到。
int checkLines (int mat [3][3])
{
int i=0;
int victory = 0;
while ((victory == 0) && (i<3))
{
if ((mat [i][0] ==1) && (mat [i][1] ==1) && (mat [i][2] ==1))
{
victory = 1;
}
else if ((mat [i][0]==2) && (mat [i][1]==2) && (mat [i][2]==2))
{
victory = 2;
}
i++;
}
return victory;
}
记下你的代码没有关注对角线和垂直胜利。
答案 3 :(得分:0)
正如@JoachimPileborg已经指出的那样,如果你找到胜利,你需要从break
循环中for
。
变化:
if ((mat [i][0] ==1) && (mat [i][1] ==1) && (mat [i][2] ==1))
{
victory = 1;
} else if ((mat [i][0]==2) && (mat [i][1]==2) && (mat [i][2]==2))
{
victory = 2;
}
为:
if ((mat [i][0] ==1) && (mat [i][1] ==1) && (mat [i][2] ==1))
{
victory = 1;
break; // found a victory - break out of loop
} else if ((mat [i][0]==2) && (mat [i][1]==2) && (mat [i][2]==2))
{
victory = 2;
break; // found a victory - break out of loop
}
答案 4 :(得分:0)
int checkLines (int mat [3][3])
{
int i;
int victory; /* You get it then you are happy to leave */
for (i=0; i<3; i++)
{
if ((mat [i][0] ==1) && (mat [i][1] ==1) && (mat [i][2] ==1))
{
victory = 1; break;
} else if ((mat [i][0]==2) && (mat [i][1]==2) && (mat [i][2]==2))
{
victory = 2; continue;
}else
{
victory = 0; continue;
}
}
return victory;
}