問題タブ [chess]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
python - Python: チェスの動きの検証
どこかで利用可能な無料の python チェスの動きの検証機能があるかどうかは誰にもわかりませんか?
私が必要なもの。文字列として格納されたダイアグラムがあり、候補を移動します。必要なのは、移動候補がダイアグラムに対して有効かどうかを確認することです。
可能であれば、例を見て本当に興味があります。
文字列は次のようになります。
ememememememememememememememememembbememwpemememememwpemembkemememememememememememememwbembrememememwkememememem
ばかげているように思えるかもしれませんが、この方法で位置をエンコードするのが最も簡単だと思います。私にとっての移動候補は、そのような位置の 1 つにすぎません (次の移動の後に発生し、この動作を変更できると思います)
image - Qt-マウスの動きに応じて画面内の画像を移動する方法
チェスゲームをしようとしています。そこで、ユーザーがコインをクリックしてドラッグしたときに、チェスのコインの画像を移動したいと思います。どのクラスを使用する必要がありますか
アップデート
最後に、ドラッグアンドドロップの例で示されているパズルコードを編集しています。それによって私は機能を知りたいと思っています。しかし、それでも私は特定のものを取得していません。以下のコードを実行していますが、画像が動いていません。そして、閉じているときに、OS(Windows XP)から、プログラムに未処理のwin32例外があるので、デバッグするかどうかという質問があります。ここにコード
どんな助けでもありがたいです。
java - チェスのプログラミングで再帰をうまく利用していますか?
宿題の一環として、Java で簡単なチェス ゲームをプログラミングする必要があります。私は機会を利用して再帰を実験することを考えていました.再帰コードの明らかな候補がチェスにあるかどうか疑問に思っていました.
c# - AlphaBetaアルゴリズムについて
私は自分の古いチェスエンジンでAlphaBetaアルゴリズムを経験しましたが、今は新しいエンジンを書き込もうとしています。algorithimはベータカットオフに遭遇しますが、私の意見では、狭いウィンドウを使用しない場合、これは発生しないはずです。私が間違っている ?私はint.MaxValue
ベータ版と-int.MaxValue
アルファ版を使用していますが、ベータ版のカットオフを引き起こす可能性があるのは何ですか?
編集:
完全なコードはここにあります。javascript - 無料の JavaScript チェス盤
フリー (自由) でオープンソースの JavaScript チェス盤を提案できる人はいますか? 私の計画は、サーバー側の Python コードと接続することです。おそらく、それはフラスコ Web フレームワークになるでしょう。
本当に最小限の機能セットが必要です。
- サーバー側スクリプトで HTML コードを生成するときに、ボード上の位置 (最初の位置だけでなく) を表示する方法。位置は、リストのリスト (2 次元配列をエミュレートするため) およびオプションで FEN (Forsyth-Edwards Notation) 文字列に格納できます。
- (マウス カーソルでピースをドラッグして) 移動し、その移動を HTTP POST 経由でサーバー側スクリプトに自動的に送信する方法。JavaScript コードによる動きの検証は必須ではありません。これはサーバー側で行うことができるからです。
wpf - WPFでのチェスGUIの作成
まず、これが重複した投稿である場合はお詫びします。同時に投稿/登録しようとしているので、物事は少し混乱しました。
単純なWPFウィンドウからUCIチェスエンジンを実行することを調査し始め、インターフェイスとは別のスレッドでチェスエンジンを実行するコツをつかみ、適度にサービス可能なテキストベースのフロントエンドを作成しました。
私はもう少し野心的になっています。プレーヤーの動きをチェスエンジンに送り、ボード上のエンジンの動きも表す、チェスの駒を備えたGUIの構築を開始したいと思います。四角をクリックするのではなく、ドラッグ可能なピースを目指しています。
私の現在の試みは、<canvas>要素のピースにドラッグ可能なユーザーコントロールを使用することです。私は自分が正しい方向に進んでいると完全に確信しているわけではないので、他の経験豊富なWPF/.NETプログラマーがこれにどのようにアプローチするかを聞いて本当に興味があります。
例:均一なグリッドを使用して、子要素間でピースデータをドラッグする方がよいでしょうか?ポーンなどのピースを派生させることができる抽象的な「ピース」クラスを作成する必要がありますか?そういうこと。
何かご意見は?これは宿題などではなく、余暇に運動をしているだけです。
c++ - C++ ベースのバリアント チェス エンジンの設計に関する質問
私は、自殺チェスと敗者チェスを通常のチェスと一緒にプレイするチェスバリアントエンジンを持っています。時間が経つにつれて、エンジンにさらにバリエーションを追加する可能性があります。エンジンは、OOP を適切に使用して C++ で完全に実装されています。私の質問は、そのようなバリアント エンジンの設計に関するものです。
当初、このプロジェクトは自殺専用のエンジンとして開始されましたが、時間の経過とともに他のフレーバーを追加しました。新しいバリアントを追加するために、まず C++ でポリモーフィズムを使用して実験しました。たとえば、MoveGenerator
抽象クラスには 2 つのサブクラスがSuicideMoveGenerator
ありNormalMoveGenerator
、ユーザーが選択したゲームの種類に応じて、ファクトリが適切なサブクラスをインスタンス化します。しかし、これははるかに遅いことがわかりました。明らかに、仮想関数を含むクラスをインスタンス化することと、タイトなループで仮想関数を呼び出すことはどちらも非常に非効率的だからです。
しかし、コードを最大限に再利用してさまざまなバリアントのロジックを分離するために、テンプレートの特殊化を伴う C++ テンプレートを使用することに気がつきました。ゲームのタイプを選択すると、基本的にゲームの最後までそれを使い続けるため、コンテキストでは動的リンクは実際には必要ないため、これも非常に論理的に思えました。C++ テンプレートの特殊化はまさにこれを提供します - 静的ポリモーフィズム。テンプレート パラメータは、 または または のいずれSUICIDE
かLOSERS
ですNORMAL
。
したがって、ユーザーがゲームの種類を選択すると、適切なゲーム オブジェクトがインスタンス化され、そこから呼び出されるすべてのものが適切にテンプレート化されます。たとえば、ユーザーが自殺チェスを選択した場合、次のように言いましょう。
オブジェクトはインスタンス化され、そのインスタンス化は基本的に制御フロー全体に静的にリンクされます。の関数はなどでComputerPlayer<SUICIDE>
動作しますがMoveGenerator<SUICIDE>
、Board<SUICIDE>
対応する関数NORMAL
は適切に動作します。
全体として、これにより、最初に適切なテンプレート化特殊クラスをインスタンス化でき、他のif
条件がどこにもないため、全体が完全に機能します。最高のことは、パフォーマンスの低下がまったくないことです。
ただし、このアプローチの主な欠点は、テンプレートを使用するとコードが読みにくくなることです。また、テンプレートの特殊化を適切に処理しないと、重大なバグが発生する可能性があります。
他のバリアント エンジンの作成者は通常、ロジックを分離するために (コードを適切に再利用して) 何をしているのだろうか?? C++ テンプレート プログラミングが非常に適していることがわかりましたが、他にもっと良いものがあれば、喜んで受け入れます。特に、HG Muller 博士による Fairymax エンジンをチェックしましたが、ゲームのルールを定義するために構成ファイルを使用します。私のバリアントの多くは異なる拡張機能を持っており、構成ファイルのレベルまで一般化することでエンジンが強力に成長しない可能性があるため、私はそれをしたくありません。別の人気のあるエンジン Sjeng は、if
いたるところに条件が散らばっており、個人的には良い設計ではないと感じています。
新しいデザインの洞察は非常に役に立ちます。
c# - C# でチェスのようなゲームを作成するには?
質問があります。次のようなルールを適用するチェスのようなプログラムを書きたいと思います。
- 片側にキングとクイーン、反対側にはキングだけが必要です。
- 最初の面は、可能な限り少ない移動数で 2 番目の面を合致させる必要があります。
このプロジェクトの作り方について、あなたの考えを知りたいです。たとえば、どちらのコードの書き方が簡単か (オブジェクト指向か構造化か...) を知りたいのですが (オブジェクト指向については少し知っています)、そのアルゴリズムの書き方について教えてもらえますか? たとえば、どこからコードを書き始める必要がありますか?
algorithm - 2つのチェスの位置が等しいかどうかを判断します
私は現在、駒を配置できる(つまり、元々ボード上にない)チェスバリアントエンジンの転置テーブルをデバッグしています。キーの衝突が発生する頻度を知る必要があります。通常のハッシュデータとともに、各テーブルインデックスにピースリストを保存しています。2つのピースのリストを線形に比較しているため、2つの位置が等しいかどうかを判断するための簡単な解決策は、転置に失敗することです。
ピースセントリックではなくボードセントリックで保管することを提案しないでください。配置可能でキャプチャされたピースのユニークな性質のため、ピースリストを保存する必要があります。これらの州の作品は、重なり合って位置のない場所を占めているようなものです。ピースの保管方法の説明をご覧ください。
移調は、ピースが異なる順序で移動されたときに発生しますが、最終的には同じボード位置になります。たとえば、次の位置は同じです。
以下は、最適化されていない一般的なアルゴリズムです。内側のループは別の一般的な問題に似ていますが、0〜63の値が1回だけ発生するという制限が追加されています(つまり、正方形ごとに1つだけ)。
次の比較は、転置のために機能しません。私が必要としているのは、転置を等しいものとして検出し、実際には異なる位置のみを報告する方法です。
テーブルは1ターンあたり100Kヒット(キーが等しい場合)を超え、通常のテーブルには100万のアイテムがあるため、パフォーマンス/メモリが考慮されます。今後は、リストをコピーして並べ替えるよりも速いものを探しています。
c# - 配列を配列に保持する
kingarray [x1 + 1、y1-1]、king array [x1 + 1、y1]などを配列に保存したい(チェスゲームの王が行くことができる方法)。どうすればよいですか?王が行くことができる方法を維持するために私に何を提案しますか?ありがとう