只是你那友好的邻居,顺道来。。。
我正在用WPF制作一个9x9的TicTactoe游戏。不幸的是,我不知道如何检查胜利者。我希望连续5次,(纵向,垂直和对角线),等于赢。
这是目前为止的代码。请注意,CheckForWinner()为空。处理这件事最好的办法是什么?
namespace TrePåRadWPF
{
public partial class MainWindow : Window
{
#region Private Members
private MarkType[] mResults;
private bool mPlayer1Turn;
private bool mGameEnded;
#endregion
#region Constructor
public MainWindow()
{
InitializeComponent();
NewGame();
}
#endregion
private void NewGame()
{
mResults = new MarkType[81];
for (var i = 0; i < mResults.Length; i++)
mResults[i] = MarkType.Free;
mPlayer1Turn = true;
Container.Children.Cast<Button>().ToList().ForEach(button =>
{
button.Content = string.Empty;
button.Background = Brushes.White;
button.Foreground = Brushes.Blue;
});
mGameEnded = false;
}
private void Button_Click(object sender, RoutedEventArgs e)
{
if (mGameEnded)
{
NewGame();
return;
}
var button = (Button)sender;
var column = Grid.GetColumn(button);
var row = Grid.GetRow(button);
var index = column + (row * 9);
if (mResults[index] != MarkType.Free)
return;
mResults[index] = mPlayer1Turn ? MarkType.Cross : MarkType.Nought;
button.Content = mPlayer1Turn ? "X" : "O";
if (!mPlayer1Turn)
button.Foreground = Brushes.Green;
mPlayer1Turn ^= true;
CheckForWinner();
}
private void CheckForWinner()
{
}
}
}
提前多谢!
-我
所以我不打算为你写完整的代码,但是我要把其中的一部分
public class Player
{
public List<int> SpacesTaken { get; set; } = new List<int>()
}
当一个玩家(进行2次)的回合时,他们点击了一个空格,将该空格的号码添加到列表中。
检查他们是否获胜:
在井字游戏中获胜的方法只有这么多
赢单:
1-2-3穿过顶部
底部为7-8-9
左侧1-4-7
右侧3-6-9
1-5-9对角线(左下至右上)
3-5-7对角线(右下至左上)
4-5-6穿过中间
中路2-5-8
这些最有可能是所有的组合如果我错过了一些让我知道,只要检查“Player1”是否包含一组这些数字在他们的列表。