Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net 你会在棋盘上做什么?(工件位置)_.net_Algorithm_Chess - Fatal编程技术网

.net 你会在棋盘上做什么?(工件位置)

.net 你会在棋盘上做什么?(工件位置),.net,algorithm,chess,.net,Algorithm,Chess,你能为我创建3个(坐标)列表吗 空位 黑位 白位 或者只是在需要时循环数组并每次播放结果 什么最好?(速度方面)您的两个主要选择是速度和代码清晰度 如果速度是您的优先事项,那么您必须为电路板上的每套元件使用64位数据类型(例如白色棋子、黑色棋子、顺势棋子)。然后,在生成移动和测试移动合法性时,可以利用本机逐位操作 若代码的清晰性是优先考虑的,那个么就忘掉位混乱,像其他人已经建议的那个样,选择非常抽象的数据类型。只要记住,如果你这样做,你可能会达到一个性能上限 首先,请查看(C)和(C#)的代

你能为我创建3个(坐标)列表吗

  • 空位
  • 黑位
  • 白位
或者只是在需要时循环数组并每次播放结果


什么最好?(速度方面)

您的两个主要选择是速度和代码清晰度

如果速度是您的优先事项,那么您必须为电路板上的每套元件使用64位数据类型(例如白色棋子、黑色棋子、顺势棋子)。然后,在生成移动和测试移动合法性时,可以利用本机逐位操作

若代码的清晰性是优先考虑的,那个么就忘掉位混乱,像其他人已经建议的那个样,选择非常抽象的数据类型。只要记住,如果你这样做,你可能会达到一个性能上限

首先,请查看(C)和(C#)的代码


(原贴)

你要找的是董事会代表。在这个主题上有一个非常详细的部分(如果你真的想写一个人工智能的话,绝对值得一读),同时提供了关于这个主题的一个很好的概述


在选择合适的董事会代表时,一定要深思熟虑——他们都有自己独特的优势(和缺陷)——主要与某些操作的速度/执行有关,如执行动作和评估董事会状态(通常从O(1)到O(n)时间复杂度,取决于方法和任务). 据我所知,关于“最佳”董事会代表性,目前还没有达成一致意见,尽管如今一些董事会代表性通常比其他董事会代表性更受欢迎(例如,几乎是必须的)。这就是为什么大多数强大的国际象棋AI在搜索移动时通常会使用几个(最多4或5个)不同的棋盘表示法。

我建议使用64个项目的数组,例如:

byte [64] Squares;
这样你只需要用一个字节来表示一个棋盘的位置,速度要快得多

当处理参考国际象棋棋盘位置的单个索引时,必须知道某些事情,以使生活更轻松。例如,您如何知道两个位置都在同一行或列上?有一个简单的诀窍可以解决这个问题

要计算位置的行,请将位置除以8,然后取结果的整数部分。例如,位置63除以8等于7.875,等于第7行。位置3除以8等于0.375 so 0。在C#中,通过强制转换为整数,您将始终只得到数字的整数部分,因此:

Row = (int)(position / 8)

要计算位置的列,请通过执行位置模数8使用模数运算符。例如,位置24模数8为列0。位置15模数8为7,因此

Column = position % 8
有了这两个概念,我们可以将64方形板上的任何位置转换为列和行


如果您想了解更多有关创建自己的国际象棋引擎的信息,请看一下@neil的dupe,我只是看了看它不是dupe。。我的问题是一个特定的问题,而你链接的问题没有回答我的问题。我的问题类似于现代计算机上的夏普棋子。在任何合理的实施中,你真的有可能经历明显的延迟吗?@John-当一个例行程序被称为数十亿次时,速度上的微小差异是显著的。这不仅仅是GUI上的用户感知。