我在visual studio c#express中使用win形式开发了一个tic tac toe。我想创建一个方法来检查胜利者,如果找不到胜利者并且所有的块都结束了,我们会有一条消息来显示抽奖。
但我希望它独立于形式。 就像我已经尝试过这样的方程式
if((button1.Text== button2.Text) && (button2.Text== button3.Text))
else if((button4.Text== button5.Text) && (button5.Text== button6.Text))
else if((button7.Text== button8.Text) && (button8.Text== button9.Text))
我想要一个通用逻辑,以便我可以在另一个类中创建该方法并调用
答案 0 :(得分:1)
首先,您当前的代码使用类字段,这会阻止您使用任何其他形式的代码。所以没有:
bool CheckWinner() { }
您需要提供游戏数据作为参数:
bool CheckWinner(Button topLeftButton, Button topMiddleButton, ...) { }
然后,您可能有一天会决定您不会使用Button
,并且您将方法更改为:
bool CheckWinner(string topLeftValue, string topMiddleValue, ...) { }
您可能还想考虑使用enum
:
enum TicTacToeValue
{
None = 0,
Cross = 1,
Circle = 2,
}
bool CheckWinner(TicTacToeValue topLeft, TicTacToeValue topMiddle, ...) { }
甚至为您的方法提供一系列数组:
bool CheckWinner(TicTacToeValue[] values) { }
使用这样的数组时,可以使程序更加智能化,因为您可以重用检查完整行或列值的代码。
您甚至可以返回赢得的人:
TicTacToeValue GetWinner(TicTacToeValue[] values) { }
如果没有人获胜,可以返回TicTacToeValue.None
。
答案 1 :(得分:0)
这可能会有所帮助:
public bool IsThreeInARow(string v1, string v2, string v3)
{
return v1 == v2 && v2 == v3;
}
这将检查一行值(即X-s和/或O-s),与值的来源无关。
答案 2 :(得分:-2)
为你拥有的9个按钮制作9个静态标志,并为“x”和“0”设置1或0。
使用其他类中的标志来确定获胜者。不需要访问tic tac toe按钮。