如何用C#写一个象棋般的游戏?

如何用C#写一个象棋般的游戏?,c#,chess,C#,Chess,我有个问题。我想编写一个象棋程序,应用如下规则: 它的一边应该只有一个国王和一个王后,另一边应该只有一个国王 第一面应与第二面配合,尽可能减少移动次数 我想知道你对如何做这个项目的想法。例如,我想知道哪种编写代码的方式更容易(面向对象或结构化…)(我有一点关于面向对象的信息),我可以说我编写了它的算法吗?例如,我应该从哪里开始编写代码?看看这个问题() 从这个问题的答案来看,我认为这将是一个良好的开端,但我也会看看其他参考文章,以了解一些有趣的历史/信息 看看这个问题() 从这个问题的答案来

我有个问题。我想编写一个象棋程序,应用如下规则:

  • 它的一边应该只有一个国王和一个王后,另一边应该只有一个国王
  • 第一面应与第二面配合,尽可能减少移动次数

我想知道你对如何做这个项目的想法。例如,我想知道哪种编写代码的方式更容易(面向对象或结构化…)(我有一点关于面向对象的信息),我可以说我编写了它的算法吗?例如,我应该从哪里开始编写代码?

看看这个问题()


从这个问题的答案来看,我认为这将是一个良好的开端,但我也会看看其他参考文章,以了解一些有趣的历史/信息

看看这个问题()


从这个问题的答案来看,我认为这将是一个良好的开端,但我也会看看其他参考文章,以了解一些有趣的历史/信息

好消息是,您的问题范围非常有限,因为您只有三件事要处理。在这里,你并不是在真正实现一个游戏,而是在解决一个逻辑难题。我会这样处理:

  • 找出如何以简单的方式表示这三个部分。这里你真的不需要UI(除了测试),因为你只是想解决一个难题。最简单的方法可能是为这三个部分中的每一个设置一个简单的行、列位置

  • 如果您以前没有编写过面向对象的程序,那么您可能希望坚持使用过程模型,只需为需要表示的数据定义变量。问题的范围很小,因此您可以不受影响。如果您有一些OOP经验,您可以适当地分解问题,尽管您可能不需要任何继承关系

  • 编写代码以生成可能的移动,并确定给定的移动是否有意义。合法的国王招式是任何不检查国王的招式。大多数女王的举动应该是允许的,但你可能也希望排除那些允许敌王夺取女王的举动

  • 现在,您需要确定一种策略,以确定如何组合一系列动作来解决难题。如果您需要找到真正的最佳解决方案(而不仅仅是一个好的解决方案),您可能需要进行蛮力搜索。这对于这个问题可能是可行的。您可能希望执行深度优先搜索(如果您不知道这意味着什么,这是您要研究的第一个主题),因为一旦您找到一个可能的解决方案,它限制了必须考虑所有其他解决方案的深度

  • 如果你能得到蛮力的功能并且需要更快的速度,考虑一下如果你能证明你的动作没有益处。如果是这样,你可以立即从搜索中排除这些移动,节省你需要考虑的分支数量。您还可以优化您的评估功能,因为当您执行数十亿次评估时,更快的评估是非常有益的。最后,您可能会提出一些启发式方法来评估首先尝试哪个分支。你越快收敛到一个“好”的解决方案,你需要考虑的情况越少,找到最佳的解决方案。



    我意识到的一点是,如果你假设敌王试图避免将死,那么问题就大不相同了。简单的深度优先修剪只有在你被允许以最好的方式移动敌王时才有效。如果敌王试图避免将死,这会使问题复杂化,因为你有相互冲突的优化目标(你希望它发生在尽可能少的移动中,而你的敌王希望尽可能长的延迟)。你可能被限制在描述一系列的可能性(比如说,如果King完全合作,最好3步,如果King完全回避,最坏8步。)

    这里的好消息是,你的问题范围非常有限,因为你只有三个部分要处理。你在这里不是真正实现一个游戏,而是解决一个逻辑难题。我会这样处理:

  • 找出如何用一种简单的方式来表示这三个部分。在这里,你真的不需要UI(测试除外),因为你只是想解决一个难题。最简单的方法可能是为这三个部分中的每一个设置一个简单的行、列位置

  • 如果您以前没有编写过面向对象的程序,您可能会希望坚持使用过程模型,只需为需要表示的数据定义变量。问题范围很小,因此您可以解决这个问题。如果您有一些面向对象的经验,您可以适当地分解问题,尽管您可能不会需要任何继承关系

  • 编写代码以生成可能的移动,并确定给定的移动是否有意义。合法国王移动是指不检查国王的任何移动。大多数女王移动应该是允许的,但您可能还希望排除允许敌人国王夺取女王的移动

  • 现在,您需要确定如何组合一系列动作以解决难题的策略。如果您需要找到真正的最佳解决方案(而不仅仅是一个好的解决方案),您可能需要进行蛮力搜索。这对于这个问题可能是可行的。您可能需要执行深度优先搜索(如果你不知道这意味着什么,那是你要研究的第一个主题),因为一旦你找到了一个可能的解决方案,这就限制了所有其他解决方案必须考虑的深度

  • 如果你能得到蛮力的功能并且需要更快的速度,考虑一下是否有M。
    go mate x