問題タブ [tic-tac-toe]

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.

0 投票する
6 に答える
10627 参照

algorithm - ノーツとクロスで勝ちゲームを検出

ゼロとクロスのゲームで勝利の動きを検出する最良の方法を知る必要があります. ソース コードは問題ではありません。サンプルまたは何かを開始できるものが必要なだけです。

私が思いつくことができる唯一のことは、ループを使用して、プレーヤーが行うすべての動きに対してすべての方向をテストし、たとえば 5 つ続けて検索することです。より高速で効率的な方法はありますか?

0 投票する
7 に答える
268 参照

refactoring - Python: このチェックを独自のメソッドにリファクタリングすることは理にかなっていますか?

私はまだpythonを学んでいます。ボードの状態が次のような場合に、プレーヤーが三目並べのゲームに勝ったかどうかを判断するために、このメソッドを作成しました。'[['o','x','x'],['x','o','-'],['x','o','o']]'

3文字のリストを数回チェックし、次のようにチェックを独自のメソッドにリファクタリングできることに気づきました。

...しかし、実際には次のような行を変更するだけであることに気付きました。

に:

...率直に言って、あまり改善されていないようです。これをリファクタリングするより良い方法はありますか? または、一般的に、より Pythonic なオプションですか? ぜひ聞いてみたいです!

0 投票する
5 に答える
11758 参照

c++ - Tic-Tac-Toe AI: ツリーの作り方

Tic-Tac-Toe ボットを作成しているときに、「ツリー」を理解しようとして大きなブロックが発生しています。概念は理解できますが、実装する方法がわかりません。

そのような場合にツリーを生成する方法の例を誰かに見せてもらえますか? または、ツリーの生成に関する優れたチュートリアルですか? 難しい部分は部分ツリーを生成することだと思います。ツリー全体の生成を実装する方法は知っていますが、その一部は知りません。

0 投票する
7 に答える
1764 参照

search - TicTacToe 戦略的縮小

私は、TicTacToe を解決する小さなプログラムを作成して、簡単なゲームでいくつかの剪定手法の効果を試すことにしました。ミニマックスを使用してそれを解決する完全なゲーム ツリーは、549,946 の可能なゲームしかありません。α-β プルーニングにより、評価に必要な状態の数は 18,297 に減少しました。次に、数値を 2,592 に下げる移調表を適用しました。今、私はその数がどれだけ低くなるかを見たいと思っています。

私が適用したい次の強化は、戦略的削減です。基本的な考え方は、同等の戦略的価値を持つ州を結合することです。たとえば、最初の手で、X が最初にプレイした場合、別のコーナーではなく 1 つのコーナーを選択することについて戦略的に違いはありません (対戦相手が最適にプレイすると仮定)。同じ状況では、ボードの壁の中心についても同じことが言え、中心も重要です。重要な状態のみに減らすことで、最初の移動で評価する状態が 9 つではなく 3 つのみになることになります。この手法は、ゲーム ツリーの最上部付近の状態を削除するため、非常に便利です。このアイデアは、CMU のグループによって作成された GameShrink メソッドから生まれました。一般的な形式を書くことを避けようとしているだけで、TicTacToe にテクニックを適用するために必要なことだけを行っています。

これを達成するために、ハッシュ関数 (転置テーブル用) を変更して、(回転関数と反転関数を使用して) 戦略的に同等の位置をすべて列挙し、各ボードの最低値のみを返すようにしました。残念ながら、私のプログラムは、X が最初に行ったときに、空のボードから 5 つの手で強制的に勝つことができると考えています。長いデバッグセッションの後、プログラムが常に戦略的に重要な最も低い移動の移動を返していることが明らかになりました (私は状態の一部として転置テーブルに最後の移動を保存します)。この機能を追加するためのより良い方法、または既に行ったことを使用して現在の状況に適用できる正しい動きを判断する簡単な方法はありますか?

0 投票する
1 に答える
299 参照

data-structures - 三目並べグリッドですべての有効な「行」を表すコンパクトな方法

私は演習としてさまざまな言語で三目並べを書いてきましたが、1 つのパターンとして、有効な勝者の行を定義するために思いついたすべての表現が、残念なことにハードコーディングされているということがあります。それらは一般的に次の 2 つのカテゴリに分類されます。

まず、ボードは 1 次元または 2 次元の配列として表され、行は位置のトリプレットによって明示的に定義されます (数字は空のスペースです)。

これには、非魔法的な明示性という利点がありますが、冗長に見えます。

もう 1 つのアプローチは、配列の配列を使用し、行を map+reduce することです。それは少し良いですが、私を完全に理解することはできません:

垂直方向と水平方向の一致は素晴らしいですが、まだ対角線をハードコーディングしています。

明示的なアドレスに依存しない対角線 (またはまったく異なるアプローチ) を特徴付ける方法を考えられる人はいますか?

私の疑似コードは Rubyish ですが、好きな言語で自由に投稿してください。私は三目並べのコード ゴルフを見ました。それらの解決策のいくつかは独創的ですが (特に魔方陣!)、もう少し難読化されていないものを探しています。

0 投票する
4 に答える
3613 参照

c - 私は C を学んでいて、Tic Tac Toe テーブルを作成しました。では、個々のセルを参照するにはどうすればよいでしょうか。

私は C を学んでいるので、テーブルとして ASCII アートを使用して Tic Tac Toe ゲームを作成しようと決めました。

まだあまり持ってない…

コマンドラインで実行すると、この出力が得られます

ここで、複数の文字の入力を取得する方法を理解したら (getchar()これまでのところ、個々の文字を取得する方法しか知りませんが、この例では問題なく動作する可能性があります)、もう一度ループして、対応するセルの X。

X を配置するために 'int markerX, int markerY' などの引数を取るテーブルを印刷するための関数を作成する必要がありますか?

ゲームが勝ったかどうかを確認できるように、マーカーの位置をどのように保存しますか?

コマンドラインでゲームのユーザー入力を求めるには、マーカーを配置するセルを選択するのが最善の方法ですか?

ありがとう!

0 投票する
7 に答える
813 参照

c# - この単純な TicTacToe 演習に取り組むための最良の方法は何ですか?

ここまではすべてうまくいっています。誰かが勝ったかどうかを確認するメソッドを作成するだけです。

この問題に効果的に取り組む方法について何か提案はありますか?

助けてくれてありがとう。

0 投票する
3 に答える
27065 参照

python - ばかのために説明されたミニマックス

ミニマックス アルゴリズムを使用して無敵の tictactoe AI を作成しようとして 1 日を無駄にしました。途中で何かを逃しました(頭がおかしい)。

ここでコードを探しているわけではありません。どこが間違っていたのかをよりよく説明しているだけです。

これが私の現在のコードです(minimaxメソッドは何らかの理由で常に0を返します):

0 投票する
6 に答える
4285 参照

c - Tic-Tac-Toe: デシジョン ツリーを作成する方法は?

Tic-Tac-Toe プログラムを作成しています。私はそれでミニマックスを使用する予定です。考えられるすべてのゲーム シーケンス用のスペースを備えたツリーを作成しましたが、それを埋める方法を探しています。私は現在このタイプを持っています:

ここに示されているように、グリッドを埋める方法を探しています。すべての可能な組み合わせが存在することを確認するために、グリッドを埋めるにはどうすればよいですか? 私の計画は、プレイヤーが取ることができるすべての動きをゲームに認識させ、勝つためにどの手順を実行するかを決定することです (まだ決定の部分を理解する必要がありますが、ツリーのグリッドを埋めることができるまでそれを保持しています) .

0 投票する
6 に答える
4957 参照

java - 三目並べに関する提案

私はTic-Tac-Toeゲームの実装戦略を設計しています。これは私の最初のゲーム実装なので、少し混乱していて、いくつかの一般的なポインタが必要です。

現在、Tic-Tac-Toeの勝ちの組み合わせの総数は8です。現在、これらの勝ちの組み合わせを配列に格納する予定です。エンドユーザーが少なくとも3回移動したら、プレーヤーが使用している現在の位置をこの配列と比較して、プレーヤーがゲームに勝ったかどうかを確認し始めます。ただし、これは、プレーヤーが勝ちの組み合わせを持っているかどうかを確認するための効率的な方法ではないと確信しています。

ゲームのロジックを設計する方法について誰かに提案してもらえますか?