有没有纯粹用JavaScript编写的国际象棋游戏应用程序接口?没有闪电侠!有人知道国际象棋游戏中使用的算法吗?
发布于 2010-01-13 16:31:47
国际象棋算法是如何工作的?
国际象棋计算机试图做的是生成棋盘位置树,即未来5步、10步或20步。假设任何棋盘位置都有大约20个可能的移动,一个五级树包含3,200,000个棋盘位置。一个10级树包含大约10,000,000,000(10万亿)个位置。计算机可以计算的树的深度由玩游戏的计算机的速度控制。最快的国际象棋计算机每秒可以生成和评估数百万个棋盘位置。
一旦生成了树,计算机就需要“评估电路板的位置”。也就是说,计算机必须查看棋盘上的棋子,并决定棋子的排列是“好”还是“坏”。它这样做的方式是使用一个评估函数。最简单的函数可能只是计算每一面的棋子数量。如果计算机是白色的,并且某个板子位置有11个白色棋子和9个黑色棋子,则最简单的评估函数可能是:
11 -9=2
显然,对于国际象棋来说,这个公式太简单了,因为有些棋子比其他棋子更有价值。因此,该公式可能会对每种类型的块应用一个权重。当程序员思考它时,他或她通过添加诸如棋盘位置,中心控制,国王的脆弱性检查,对手的皇后的脆弱性,以及大量其他参数来使评估函数变得越来越复杂。然而,无论函数变得多么复杂,它都会被压缩为一个数字,该数字表示该板位置的“好”。
要构建自己的javascript“引擎”,能够在基本级别下棋,请查看Step by Step Javascript Chess with CPU oppo
如果你向下滚动它的源代码的话,肯定说非常有限,国际象棋引擎纯粹是基于javascript的。它也有一个可以试用的游戏工作版本,以及构建你自己的所有必要的资源。
一些有用的资源:
托尼·马斯兰写的“
背后理论的最好的书
发布于 2012-07-12 12:24:55
有关算法方面的讨论,请尝试Chess Programming Wiki。
适用于严肃国际象棋引擎的技术不一定适用于基于web的游戏。真正的国际象棋引擎运行速度要快几个数量级,使用多兆字节打开书籍,并在每一轮花费几分钟或几个小时。一个真正的国际象棋引擎搜索深度会超过12层,而javascript不会在合理的web时间内搜索超过6层。因此,像piece-square oracle这样的东西可以说非常适合javascript引擎,因为随着搜索的深入,它的回报越来越小,甚至可能是负的,因此在国际象棋编程圈中已经过时了。如果你做了人们在80年代做的事情,你最终会得到一个敏捷且易于管理的引擎,它将击败大多数访问者。
当然,你也不会真的想看别人在做什么。只需确保你有一个alpha-beta search的一些变体,然后调整你的评估函数和其他你认为合适的东西。
在2002和2012年,我写了p4wn,然后又重写了它,这是一个小型的公共领域javascript引擎。它使用alpha-beta和一个平方的先知。它可能比Garbochess-JS弱,但是Garbochess有一个比整个p4wn引擎更大的开场白。
发布于 2010-01-27 01:58:54
Computer Chess Blog记录了C#国际象棋引擎的创建。它不是JavaScript,但是语法足够相似,您可以很好地理解不同的国际象棋引擎组件。
另外,如果你想让你的国际象棋引擎支持网络,你可能会考虑使用带有Silverlight GUI的C#。与使用JavaScript相比,您将从.NET获得更好的性能。正如你将学到的,这将转化为一个更强大(更深入的搜索)的国际象棋程序。Silverlight国际象棋的一个很好的例子可以在GeeksWithChess.com找到
https://stackoverflow.com/questions/2055332
复制相似问题