2010-01-13 121 views
30

是否有任何国际象棋游戏API,纯粹用JavaScript编写?没有Flash!有人知道在国际象棋游戏中使用的算法(一般)吗?JavaScript中的国际象棋游戏

+1

可能是一个不错的代码高尔夫问题(很短的实现) – 2010-01-13 08:29:08

+0

http://javascript.internet.com/games/javascript-chess-with-cpu-oppo.html – 2010-01-13 08:31:46

+0

一个令人惊讶的小的实现(1KB): http://js1k.com/2010-first/demo/435 – Christophe 2012-01-14 18:21:13

回答

55

如何做一个国际象棋的算法?:工作

什么棋计算机试图做的是 产生的板位置树5点 或10或20移动到未来。 假设有大约20个 可能的移动任何董事会职位, 五级树包含3,200,000 董事会职位。 10级树 包含大约10,000,000,000,000(10 兆)个职位。计算机可以计算的 树的深度为 ,其控制的计算机玩游戏的速度为 。最快的 国际象棋计算机可以生成和 每秒钟评估数百万个棋盘位置 。

一旦它生成树,那么 计算机需要“评估板 位置”。也就是说,电脑有 来看板上的棋子, 决定 棋子的排列是“好”还是“坏”。 这样做的方式是使用评估 函数。最简单的 函数可能只是计算每一边都有片段的数字 。如果 电脑在播放白色和 一定板位置有11条白色 件和九个黑色件, 简单的评价函数可能是:

11 - 9 = 2 

显然,对于象棋这个公式是 方式过于简单,因为有些零件 比其他零件更有价值。所以 公式可能会将权重应用于每个 类型的作品。作为程序员 想着它,他或她,使 评价功能越来越 通过增加之类的东西 板位置,中央的控制,王 漏洞检查,对手的皇后 漏洞, 复杂和大量的其他参数。没有 重要的功能 得到,但是,它被压缩到 一个单一的数字,代表该董事会的位置的“善良”。

Source

为建设自己的javascript“引擎”这是能够在基层检查Step by Step Javascript Chess with CPU oppo

如果向下滚动它包含了这个源代码下棋,不得不说非常有限,国际象棋引擎,完全基于JavaScript的。它还有一个游戏的工作版本,可供您试用并创建自己的所有必要资源。

一些有用的资源:

1

Computer Chess Blog理论记录了C#国际象棋引擎的创建。它不是JavaScript,但语法足够相似,可以很好地理解不同的国际象棋引擎组件。

此外,如果你想让你的国际象棋引擎启用网络,你可能要考虑使用C#和Silverlight GUI。与使用JavaScript相比,您将从.NET中获得更好的性能。正如你将会学到的,这将转化为更强大(更深入的搜索)国际象棋程序。一个很好的Silverlight国际象棋示例可以在GeeksWithChess.com

5

对于算法讨论,请尝试Chess Programming Wiki

适用于严肃国际象棋引擎的技术不一定适用于基于网络的游戏。真正的国际象棋引擎可以更快地运行几个数量级,使用数兆字节的开放书籍,并且每次转动的时间只需几分钟或几小时。一个真正的国际象棋引擎会搜索超过12层,而javascript在合理的网页时间内将不会超过6层。因此,像一个piece-square oracle,已减少,并可能负收益作为搜索深化和是因此好了在国际象棋界的编程时尚的,可以说是非常适合于JavaScript引擎。如果你做的是80年代的人们,那么最终你会得到一个能够击败大多数游客的活泼可爱的引擎。

当然,你真的不想要查找什么其他人在做什么。只要确保你有一个alpha-beta search的一些变化,然后调整你的评价功能和一切,你认为合适。

2002年和2012年我写了然后重写p4wn,属于小众领域的JavaScript引擎。它使用alpha-beta和一个正方形oracle。它可能比Garbochess-JS更弱,但随后Garbochess的整个p4wn引擎的开放书籍更大。