問題タブ [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 投票する
2 に答える
1224 参照

algorithm - 三目並べでツイスト

私は tictactoe プログラムを書いていますが、それはあなたの伝統的な tictactoe ではありません

まず、ボードは 4x4 で、勝つ方法は、同じ種類のカードを 3 つと、対戦相手を 1 行、1 列、または斜めに並べることです。したがって、次の例では、最初の列で「O」が勝利します。

プログラムに打ち負かすことができない「ハード」モードを与えるために、ミニマックスアルゴリズムを実装しようとしています。

私の問題は、考えられるすべてのゲーム状態を含むツリーを作成することは期待できないため、生成できるゲーム状態を評価する何らかの関数を考え出す必要があることです。

私の質問だと思いますが、どうすればそのような機能を思い付くことができますか?

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

c++ - C ++で2D三目並べ配列を反復処理する良い方法はありますか?

三目並べの配列に同じ文字が3つあるかどうかをチェックする関数があります。問題は、ロジックに問題があることです。

水平方向と垂直方向に一致するかどうかを確認できるようです。しかし、対角線の一致を見つける方法を完全に理解することはできません。このコードは機能すると思いましたが、今のところ機能していません。

何が悪いのかについて何か提案はありますか?

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

vector - Clojure: ベクトルのベクトルを繰り返し処理して、特定の条件を満たす最初のベクトルを見つける

Clojure を学ぶために、ちょっとした Tic Tac Toe ゲームに取り組んでいます。ゲームの最初の部分を比較的簡単に完了した後、インテリジェントなコンピューター プレーヤーを作成するのに苦労しました。

これをガイドするために書いているテストでは、コンピューターの番で、これがボードである場合、コンピューターがスポット 9 を選択することを確認したいと思います。

X | お | 3
4 | X | O
7 | 8 | 9

ゲームを開始するには、ボード上の位置とそのスペースの内容を表すキーと値のペアを持つマップとして、ボードを次のように定義します。

この問題を解決する方法について、いくつかの考えがありました。1 つは、ウィニング セットを次のように定義することでした。

各セットを反復します。

しかし、それは正しくないようです...そこからどこへ行くのかわかりません。私が解決しようとしている問題は、次のように説明できます。

コンピューターに 8 つのウィニング セットを調べて、2 つのシンボル1 つのオープン スポットがあるセットを 1 つ見つけるように指示します。

私は Clojure にかなり慣れていないので、この問題に取り組む最善の方法を理解しているかどうかはわかりません。私はClojureDocsforを見てきました(とのような反復関数をチェックアウトしています)が、これloopを機能caseさせることができませんでした。

現在ベクトル形式であるこれらの勝利セットを繰り返し処理し、特定のシンボルが 2 つと開始点が 1 つあるセットを見つける最良の方法は何でしょうか? それとも、勝利セットを別のデータ構造に保存するのが最善でしょうか?

注:この質問への回答を読みましたが、私の回答に適用できませんでした。

0 投票する
2 に答える
809 参照

java - tictactoe ゲームのすべてのボタンに同一のコードがあります。これを短くする方法は?

このtictactoeプログラムは2人用ゲームです。私が作ったGUIはフレームとボタンで、その後コーディングを始めました。実際、私のプログラムはこの種のコーディングで動作しています。

ええ、実際には機能していますが、このコードに関する私の問題は、すべてのボタンにコードを配置する必要があることです。

各ボタンが実行するコマンドは 1 つだけで、同じコードであるため、すべてのボタンにコピー ペーストしたくありません。それを行うためのコードがあると思いますが、どう思いますか? 助けてください!

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

algorithm - Clojure での Minimax アルゴリズムの実装 - 複数の再帰呼び出しを伴う条件付き関数

この質問と私の別の質問は、いくつかのことを理解した後、1 つに統合されたので、この質問を修正しました。

私が自分の機能で達成しようとしていることは、以下に概説されています。

  1. すべてのスポットを繰り返します。開いている場合は、現在のプレーヤーのシンボルがあるスポットを選択します。
  2. この動きによってゲームに勝利し、コンピューター プレイヤーの番になった場合、スポット (整数) とスポットのスコア (整数、この場合は 1) のキーと値のペアをscored-spotsハッシュ マップに追加します。
  3. この同じ関数を再帰して呼び出し、新しい scored-spotsハッシュマップ、移動したばかりのボード、同じプレーヤー、および同じシンボルを渡します。
  4. ただし、ゲームに勝てなかった場合は、次の条件ステートメントに進み、それを確認します。
  5. 次の条件文も同じように、スコアが異なるだけです (コンピューターのターンでの勝利は 1、人間のターンでの勝利は -1、引き分けは 0)。
  6. どの条件ステートメントも true と評価されない場合は、とにかく再帰します (scored-spotsこの場合、ハッシュ マップに違いはありません)。

これが私が試したコードですが、これは私が期待している値を返しません。

注:
boardは次のようなハッシュ マップです: {0 "0", 1 "1", 2 "2"}(スポット位置 - スポット値)
symは "X" や "O" などの記号、または次
current-playerのようなハッシュ マップです::computer:human
scored-spots{}

戻り値として期待しているのは、各オープン スポットがスコア付けされたハッシュ マップです。たとえば、{1 0, 4 1, 5 -1, 6 -1, 8 0}.

代わりに、この board: を渡す
{1 "X" 2 "X" 3 "O" 4 "4" 5 "5" 6 "6" 7 "7" 8 "X" 9 "O"}
、多数listのハッシュ マップを含む戻り値が得られます。

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

java - 三目並べのゲーム ツリー

まず、私は Java の初心者で、TicTacToe ゲームをシミュレートしようとしています。ゲーム ツリーを使用して、すべての状態の可能なツリーを作成したいと考えました。ツリーの各ノードは状態を表し、このツリーを使用して次の移動を決定します。私は次のようにアプローチする予定でした、

  1. インターフェイス クラスには、1 回の移動を表すために必要な情報が含まれています。
  2. 抽象/インターフェイス クラスには、次のメソッドが含まれます。

    を。
    その動きを適用した後のゲームの状態を表す新しい状態オブジェクトを返します。

    b. 現在の状態がプレイヤーの 1 人による勝利を表している場合、このゲームの勝者の ID。

    c. 現在のプレーヤーと次のプレーヤー ID を返します。

  3. クラスには、次のメソッドが含まれます。

    を。ゲーム ツリーのこのノードで表されるゲームの状態

    b. Move を指定すると、子ノードをこのノードに追加します。

    c. Move を指定すると、適切な子ノードが返されます。

  4. 別のクラスには、次のメソッドが含まれます。

    を。初期状態でツリーを構築します。

    b. ゲームの現在の状態を返す

    c. Move が与えられたら、ツリーのルートがゲームの新しい状態を保持するようにツリーを更新します。

    d. このツリーの子ノードを指定された深さに生成します。

ツリーの概念 (binary または avl または red black) は知っていますが、どこから始めてどのように進めればよいのか、少し混乱しています。このコンテキストに関する提案は非常に役立ちます。

ありがとう

シンクス

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

algorithm - 不完全なゲームアルゴリズムの作成

ミニマックスのようなアルゴリズムを使用して完璧なゲームをプレイする方法を知っています(この場合、私はTic-Tac-Toeに似たゲームを探しています)

ただし、人間のプレイヤーが実際に敗北する可能性がある、不完全なアルゴリズム、またはさまざまな「スキルレベル」(Easy、Medium、Hardなど)のAIを作成するにはどうすればよいのでしょうか。

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

hashmap - TicTacToe-アルゴリズムのようなBFS

三目並べを実装するための独自のアルゴリズムを考えていました。それはシステムに対するコンピューターになるでしょう。私が実装しようと思ったアルゴリズムは、ユーザーの選択された各ノードのすべての勝者ノードを含むハッシュマップです。システムは、ユーザーが選択したキーのハッシュマップをポーリングし、勝った移動の選択肢の1つをランダムに選択します。ユーザーまたはシステムによって以前に選択された選択肢は、削除するか、ブール値trueとして設定できます。これは主にブロッキングベースのアルゴリズムです。これについての考えやコメントは大歓迎です。

システムハッシュマップ

システムは、ユーザーのキー選択に基づいて、ハッシュマップのエントリの1つをランダムに選択します。これはあまりスケーラブルなアプローチではないことは知っていますが、これについていくつかコメントを知りたいと思います。システム/ユーザーによってすでに選択されている各エントリは、falseとして設定/削除できるため、おそらく問題にはなりません。

0 投票する
0 に答える
3473 参照

java - Java ミニマックス TicTacToe

Minimax algorithm現在、 forを実装しようとしていTic Tac Toeます。現在のバージョンでは、コンピューターが失敗する場合がいくつかありますが、その理由はよくわかりません。たとえば、私が (人間のプレイヤーとして) 左上隅の x で開始すると、コンピューターは左下隅の ao で反応します (もちろん、これは彼が負けることと同じです)。プログラム全体はMVC-Design.

質問: Minimax アルゴリズムを正しく修正しましたか? または (そうでない場合) 「悪い」動きの原因は何ですか?

コードは次のとおりです: (正しいことをテストしたいくつかのメソッドのコードは省略しました)

ゲーム クラスは、Cell[][] 配列内のフィールドを表し (AIMinimax と同じ方法)、AIMinimax のインスタンスを作成し、これに対して nextMove を呼び出して、コンピューターが行う次の Move を生成します。デフォルトでは、Human Player が常に開始されます。

前もって感謝します!

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

java - MVC 三目並べゲーム

私は現在、学校向けのプロジェクトに取り組んでいます。Java で書かれた Tic Tac Toe ゲームを、よりうまく機能するものにリファクタリングする必要があります。指定されたコードは大きな問題であり、ユーザー インターフェイスがうまく機能していません。

問題は、2 人のプレイヤーのビューがゲームに通知されないことです。したがって、オブザーバー パターンを実装する必要があります。

http://www.imgdumper.nl/uploads6/50a794d4ea6ba/50a794d4e2d9f-now.jpg

この画像は、指定されたコードの UML です。

実際のゲームのように機能させるには、次のような構造を作成するとします。

http://www.imgdumper.nl/uploads6/50a7953c6c6b3/50a7953c64186-new.jpg

わかりました、その通りだと思います。しかし、このプロジェクトの目的は、MVC パターンにリファクタリングすることです。学校から提供されたプレゼンテーションで、次のスキームを見つけました: (URL についてはコメントを参照)

しかし、MVC パターンの要件を満たすコードにリファクタリングする方法がまったくわかりません。誰かが私にこれをどのように行うべきかを説明してくれたらいいのにと思います。たとえば、モデル、コントローラー、ビューとは何ですか?