有没有纯用 JavaScript 编写的国际象棋游戏 API?没有闪光灯!有人知道国际象棋游戏中使用的算法(一般)吗?
3 回答
国际象棋算法如何工作?:
国际象棋计算机试图做的是生成未来五步或十步或二十步棋的棋盘位置树。假设任何棋盘位置大约有 20 种可能的移动,一个五级树包含 3,200,000 个棋盘位置。10 级树包含大约 10,000,000,000,000(10 万亿)个位置。计算机可以计算的树的深度由计算机玩游戏的速度控制。最快的国际象棋计算机每秒可以生成和评估数百万个棋盘位置。
一旦生成树,计算机就需要“评估棋盘位置”。也就是说,计算机必须查看棋盘上的棋子并决定棋子的排列是“好”还是“坏”。它的方法是使用评估函数。最简单的功能可能只是计算每边的件数。如果计算机正在玩白棋,并且某个棋盘位置有 11 个白子和 9 个黑子,那么最简单的评估函数可能是:
11 - 9 = 2
显然,对于国际象棋来说,这个公式太简单了,因为有些棋子比其他棋子更有价值。因此,该公式可能会对每种类型的作品施加权重。随着程序员的思考,他或她通过添加诸如棋盘位置、中心控制、要检查的国王的脆弱性、对手的女王的脆弱性以及大量其他参数之类的东西,使评估函数变得越来越复杂。然而,无论函数变得多么复杂,它都被浓缩为一个数字,代表该棋盘位置的“优点”。
来源。
为了构建您自己的能够在基本级别下棋的javascript“引擎”,请检查Step by Step Javascript Chess with CPU oppo
如果你向下滚动它包含了这个的源代码,必须说非常有限,纯粹基于javascript的国际象棋引擎。它还有一个可供试用的游戏工作版本以及构建您自己的所有必要资源。
一些有用的资源:
- 用 Javascript 实现国际象棋引擎的第一个实现
- 国际象棋程序的剖析,由托尼·马斯兰(Tony Marsland)撰写,很好地介绍了当前国际象棋程序的工作原理。
- 国际象棋空间
- Paul Verhelst - 问答
- Minimax 算法的参考书目(较新版本)。
- Crafty是一个强大的程序,其源代码可以免费获得,并且对于国际象棋程序来说,可读性很强。
- 国际象棋程序员的未完成工作和挑战
- 国际象棋有完美的算法吗?在这里讨论so
- 计算机如何下国际象棋我发现的描述国际象棋人工智能算法背后理论的最好的书
对于算法讨论,请尝试Chess Programming Wiki。
适用于严肃国际象棋引擎的技术不一定适用于基于网络的游戏。真正的国际象棋引擎运行速度要快几个数量级,使用数兆字节的打开书籍并在每回合花费几分钟或几小时。真正的国际象棋引擎将搜索超过 12 层,而 javascript 在合理的网络时间内不会超过 6 层。因此,像棋盘预言机这样的东西,随着搜索的深入,收益递减甚至可能为负,因此在国际象棋编程界已经过时,可以说非常适合 javascript 引擎。如果您按照人们在 80 年代所做的事情进行操作,那么您最终会得到一个可以击败大多数访问者的快速且易于管理的引擎。
当然,您并不想查看其他人在做什么。只需确保您有一些alpha-beta 搜索的变体,然后调整您的评估函数和您认为合适的所有其他内容。
在 2002 年和 2012 年,我写了然后重写了p4wn,一个小型公共领域的 javascript 引擎。它使用 alpha-beta 和一块正方形的预言机。它可能比Garbochess-JS弱,但是 Garbochess 有一本比整个 p4wn 引擎更大的开场书。
计算机国际象棋博客记录了 C# 国际象棋引擎的创建。它不是 JavaScript,但语法非常相似,您可能会很好地理解不同的国际象棋引擎组件。
此外,如果您希望您的国际象棋引擎支持 Web,您可能需要考虑使用带有 Silverlight GUI 的 C#。.NET 将比 JavaScript 获得更好的性能。正如您将了解到的,这将转化为更强大(更深入的搜索)的国际象棋程序。可以在GeeksWithChess.com上找到 Silverlight Chess 的一个很好的例子