提问者:小点点

TicTacToe 9x9(连续5个=赢。如何检查是否赢?)


只是你那友好的邻居,顺道来。。。

我正在用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()
        {
            
        }
    }
}

提前多谢!

-我


共1个答案

匿名用户

所以我不打算为你写完整的代码,但是我要把其中的一部分

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”是否包含一组这些数字在他们的列表。