Is there any Chess game API , purely written in JavaScript ? No Flash! Anybody know the algorithm(in general) used in Chess games ?
问题:
回答1:
How does a chess algorithm work?:
What a chess computer tries to do is generate the board-position tree five or 10 or 20 moves into the future. Assuming that there are about 20 possible moves for any board position, a five-level tree contains 3,200,000 board positions. A 10-level tree contains about 10,000,000,000,000 (10 trillion) positions. The depth of the tree that a computer can calculate is controlled by the speed of the computer playing the game. The fastest chess computers can generate and evaluate millions of board positions per second.
Once it generates the tree, then the computer needs to "evaluate the board positions." That is, the computer has to look at the pieces on the board and decide whether that arrangement of pieces is "good" or "bad." The way it does this is by using an evaluation function. The simplest possible function might just count the number of pieces each side has. If the computer is playing white and a certain board position has 11 white pieces and nine black pieces, the simplest evaluation function might be:
11 - 9 = 2
Obviously, for chess that formula is way too simple, because some pieces are more valuable than others. So the formula might apply a weight to each type of piece. As the programmer thinks about it, he or she makes the evaluation function more and more complicated by adding things like board position, control of the center, vulnerability of the king to check, vulnerability of the opponent's queen, and tons of other parameters. No matter how complicated the function gets, however, it is condensed down to a single number that represents the "goodness" of that board position.
Source.
For building your own javascript 'engine' that's able to play chess at a basic level check Step by Step Javascript Chess with CPU oppo
If you scroll down it contains the source code of this, must say very limited, chess engine purely based on javascript. It also has a working version of the game to try out and all the necessary resources for building your own.
Some useful resources:
- First implementation of a chess engine in Javascript
- The Anatomy of Chess Programs, by Tony Marsland, is a nice intro on how current chess programs work.
- Chess Space
- Paul Verhelst - Question and Answers
- Bibliography on Minimax Algorithms (newer version).
- Crafty is a strong program whose source code is freely available and, for a chess program, quite readable.
- Unfinished Work and Challenges to Chess Programmers
- Is there a perfect algorithm for Chess? Discussion here on so
- How Computers Play Chess The best book I've found describing the theory behind chess AI algorithms
回答2:
For algorithmic discussion, try the Chess Programming Wiki.
Techniques suited to serious chess engines are not necessarily right for web based games. Real chess engines run orders of magnitude faster, using multi-megabyte opening books and spending minutes or hours on each turn. A real chess engine will search deeper than 12 ply, while javascript won't get far past 6 ply in reasonable web time. Therefore something like a piece-square oracle, which has diminishing and possibly negative returns as search deepens and is consequently well out of fashion in chess programming circles, is arguably well suited to a javascript engine. If you do what people were doing in the 80s, you will end up with a snappy and manageable engine that will beat most visitors.
And of course you don't really want to look up what other people are doing. Just make sure you have some variation of a alpha-beta search, then tweak your evaluation function and everything else as you see fit.
In 2002 and 2012 I wrote then rewrote p4wn, a small public domain javascript engine. It uses alpha-beta and a piece-square oracle. It is probably weaker than Garbochess-JS, but then Garbochess has an opening book that is bigger that the entire p4wn engine.
回答3:
The Computer Chess Blog documents the creation of a C# chess engine. It's not JavaScript but the syntax is similar enough that you might get a good understanding of the different chess engine components.
Also if you want your chess engine to be web enabled you might want to consider using C# with a Silverlight GUI. You will get better performance from .NET than you would with JavaScript. As you will learn this will translate into a stronger (deeper searching) chess program. A good example of Silverlight Chess can be found at GeeksWithChess.com