数据结构——我需要帮助组织/规划一个c#井字游戏应用程序

本文关键字:一个 应用程序 游戏 规划 帮助 数据结构 | 更新日期: 2023-09-27 17:49:16

我是一名有c++经验的大学生,是c#的新手。我想要一些关于如何为一个5x5的井字游戏构建一个c#表单应用程序的反馈。

程序的细节要求用户输入玩家做出移动选择的时间。然后玩家选择是自己先走还是电脑先走。然后玩家点击开始按钮,游戏开始。

到目前为止,我认为我已经创建了一个"Move"类,其中X和Y坐标表示游戏网格上的位置,而一个"Player"类包含他们在游戏中制作的"Move"对象列表。我计划添加一个可点击标签的网格,将移动添加到玩家的移动列表中。至于AI,我认为创造一种阻止人类玩家完成一行的算法是很容易的,但我不确定哪种数据结构最有效。也许我一开始就想错了。

任何想法吗?

数据结构——我需要帮助组织/规划一个c#井字游戏应用程序

在UI中,我将在每个单元格中使用5 * 5 TableLayoutControlButton。您可以将这些按钮的FlatStyle设置为Flat

现在,就维护模型而言,我将只使用一个类来表示玩家。像这样:

class Player : INotifyPropertyChanged
    {
        List<Point> _selectedCells = new List<Point>();
        public List<Point> SelectedCells
        {
            get
            {
                return _selectedCells;
            }
            set
            {
                if (value != _selectedCells)
                {
                    _selectedCells = value;
                    RaisePropertyChange(new PropertyChangedEventArgs("SelectedCells"));
                }
            }
        }
        public event PropertyChangedEventHandler PropertyChanged;
        protected void RaisePropertyChange(PropertyChangedEventArgs e)
        {
            if (PropertyChanged != null)
            {
                PropertyChanged(this, e);
            }
        }
    }

现在,这个类有2个实例。一个给人类,一个给计算机。单击按钮,可以设置SelectedCells属性。现在,更改此属性将引发PropertyChanged事件。可以放置一个处理程序来检查胜利。

如果用户尚未获胜,则生成计算机移动并在计算机实例上设置相同的属性。它将再次检查是否成功。

当用户获胜时,您可以显示适当的消息。您可以在Player类中添加字符串属性Name,以简化胜利消息显示机制。

相关文章: