web-dev-qa-db-ja.com

JavaScriptのチェスゲーム

純粋にJavaScriptで書かれたチェスゲームAPIはありますか?フラッシュなし!チェスゲームで使用されるアルゴリズム(一般)を知っている人はいますか?

31
sat

チェスアルゴリズムはどのように機能しますか?:

チェスコンピュータが行おうとしているのは、5、10、または20移動先のボード位置ツリーを生成することです。どのボード位置でも約20の可能な移動があると仮定すると、5レベルのツリーには3,200,000のボード位置が含まれます。 10レベルのツリーには、約10,000,000,000,000(10兆)の位置が含まれています。コンピューターが計算できる木の深さは、ゲームをプレイするコンピューターの速度によって制御されます。最速のチェスコンピュータは、毎秒数百万のボード位置を生成して評価できます。

ツリーが生成されたら、コンピュータは「ボードの位置を評価する」必要があります。つまり、コンピュータはボード上のピースを見て、そのピースの配置が「良い」か「悪い」かを判断する必要があります。これを行う方法は、評価関数を使用することです。考えられる最も単純な関数は、各辺のピースの数を数えるだけかもしれません。コンピューターが白で再生していて、特定のボード位置に11個の白い部分と9個の黒い部分がある場合、最も単純な評価関数は次のようになります。

  11 - 9 = 2 

明らかに、チェスの場合、一部のピースは他のピースよりも価値があるため、その式は単純すぎます。したがって、式は各タイプのピースに重みを適用する場合があります。プログラマーが考えると、ボードの位置、センターの制御、チェックするキングの脆弱性、対戦相手のクイーンの脆弱性、その他のパラメーターを追加することで、評価関数をますます複雑にします。ただし、関数がどれほど複雑になっても、そのボード位置の「良さ」を表す1つの数値に凝縮されます。

ソース

基本的なレベルでチェスをプレイできる独自のJavaScript「エンジン」を構築するためのチェック CPU oppoを使用したステップバイステップのJavaScriptチェス

下にスクロールすると、このソースコードが含まれています。これは、純粋にjavascriptに基づいた非常に限定されたチェスエンジンです。また、試してみるための実用的なバージョンのゲームと、独自のゲームを構築するために必要なすべてのリソースもあります。

いくつかの有用なリソース:

55
johnnyArt

アルゴリズムの議論については、 Chess Programming Wiki を試してください。

本格的なチェスエンジンに適したテクニックは、必ずしもWebベースのゲームに適しているとは限りません。実際のチェスエンジンは、数メガバイトのオープニングブックを使用し、各ターンに数分または数時間を費やして、桁違いに高速に実行されます。実際のチェスエンジンは12プライよりも深く検索しますが、JavaScriptは妥当なWeb時間で6プライをはるかに超えることはありません。したがって、 piece-square Oracle のようなものは、検索が深くなるにつれて減少し、場合によっては負のリターンを持ち、その結果、チェスプログラミングサークルでは時代遅れになりますが、JavaScriptエンジンに適しています。あなたが80年代に人々がしていたことをするならば、あなたはほとんどの訪問者を打ち負かすであろうきびきびしたそして扱いやすいエンジンで終わるでしょう。

そしてもちろん、あなたは他の人がしていることを本当に調べたくありません。 alpha-beta search のバリエーションがあることを確認してから、評価関数とその他すべてを適切と思われるように微調整します。

2002年と2012年に、私は小さなパブリックドメインのJavaScriptエンジンである p4wn を書き直しました。アルファベータとピーススクエアオラクルを使用しています。おそらく Garbochess-JS よりも弱いですが、Garbochessにはp4wnエンジン全体よりも大きいオープニングブックがあります。

5
Douglas Bagnall

Computer Chess Blog は、C#チェスエンジンの作成について説明しています。これはJavaScriptではありませんが、構文は十分に類似しているため、さまざまなチェスエンジンコンポーネントを十分に理解できます。

また、チェスエンジンをWeb対応にしたい場合は、Silverlight GUIでC#を使用することを検討してください。 JavaScriptよりも.NETの方がパフォーマンスが向上します。あなたが学ぶように、これはより強力な(より深い検索)チェスプログラムに変換されます。 Silverlight Chessの良い例は、 GeeksWithChess.com にあります。

1
Adam Berent