基本上,当按下一个按钮时,调用randomMove()方法,这意味着要在TicTacToe中找到一个空方块,然后给它分配一个“O”,问题是它不会破坏离开循环,因为至少两个方格变成“O”。
我不确定我哪里出错了,但我不怀疑这是一个简单的解决方案。
private void randomMove()
{
for (int i = 0; i < 3; i++)
{
for (int a = 0; a < 3; a++)
{
if (Board[a,i] == "")
{
Board[a,i] = "O";
Temp = i + a;
compMove(Temp);
break;
}
}
}
}
private void compMove(int Temp)
{
switch (Temp)
{
case 0:
btn1.Text = "O";
break;
case 1:
btn2.Text = "O";
break;
case 2:
btn3.Text = "O";
break;
case 3:
btn4.Text = "O";
break;
case 4:
btn5.Text = "O";
break;
case 5:
btn6.Text = "O";
break;
case 6:
btn7.Text = "O";
break;
case 7:
btn8.Text = "O";
break;
case 8:
btn9.Text = "O";
break;
}
hasWon();
}
答案 0 :(得分:2)
您可以使用局部变量来突破第二个循环(使用布尔值)。或者您使用goto MyLabel;
并使用MyLabel:
;定义标签。当只有一个简单的方法时,你也可以使用return。
Boolean finish = false;
for (int i = 0; i < 3; i++)
{
for (int a = 0; a < 3; a++)
{
if (Board[a,i] == "")
{
Board[a,i] = "O";
Temp = i + a;
compMove(Temp);
finish = true;
break;
}
}
if (finish) break;
}
for (int i = 0; i < 3; i++)
{
for (int a = 0; a < 3; a++)
{
if (Board[a,i] == "")
{
Board[a,i] = "O";
Temp = i + a;
compMove(Temp);
goto Finish;
}
}
}
Finish: ...
答案 1 :(得分:1)
当找到空白点时,您需要突破两个循环。您的代码只会突破嵌套代码。
这是一种方法:
private void randomMove()
{
bool foundEmpty = false;
for (int i = 0; i < 3; i++)
{
for (int a = 0; a < 3; a++)
{
if (Board[a,i] == "")
{
Board[a,i] = "O";
Temp = i + a;
compMove(Temp);
foundEmpty = true;
break;
}
}
if (foundEmpty)
break;
}
}
答案 2 :(得分:1)
你的break语句只会转义第一个for循环,你需要使用另一个break或其他一些机制。
答案 3 :(得分:1)
你忘了从更大的循环中脱离出来..改变代码一点看起来像这样:
private void randomMove()
{
bool flag = false;
for (int i = 0; i < 3; i++)
{
for (int a = 0; a < 3; a++)
{
if (Board[a,i] == "")
{
Board[a,i] = "O";
Temp = i + a;
compMove(Temp);
flag = true;
break;
}
}
if (flag)
break;
}
}
答案 4 :(得分:1)
好吧,如果我查看提供的代码,如果我正确理解了你想要的内容,那么你需要的唯一的是return
,就像这样:
private void randomMove()
{
for (int i = 0; i < 3; i++)
{
for (int a = 0; a < 3; a++)
{
if (Board[a,i] == "")
{
Board[a,i] = "O";
Temp = i + a;
compMove(Temp);
return;
}
}
}
}
最好将compMove
方法改为这样的方式,imo(伪代码)
private void compMove(int Temp)
{
int buttonIndex = Temp + 1;
Button btn = FindControl("btn" + buttonIndex) as Button;
if(btn == null) return;
btn.Text = "O";
hasWon();
}
答案 5 :(得分:1)
除了其他答案之外,我认为您的按钮文字不会像您希望的那样使用compMove()
功能进行更新。
i
和a
永远不会有超过2的值。
因此,compMove()
函数获得的最高值为4。
尝试更改:
Temp = i + a;
compMove(Temp);
对此:
Temp = (i*3) + a;
compMove(Temp);