問題タブ [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.
c++ - C++ & SDL TicTacToe - 方向転換
ゲーム内のプレイヤー間でターンを変更する際に問題があります。私が実行すると、それは任意の順序で進むようです。そのため、誰の番かを示すテキストがめちゃくちゃになっています。
c++ - 再帰なしで Minimax を実装する
三目並べ解決ロボットを作っています。練習用に、非常にうまく機能するミニマックス アルゴリズムを使用して Tic Tac Toe ゲームを作成しました。コードをコントローラーに移植したいと思ったとき、このコントローラー用の C/C++ コンパイラーのどれも再帰関数をサポートしていないことがわかりました。したがって、この再帰的なミニマックス関数を反復または内部スタックを使用する関数に変換する助けが必要です:
私はこれを行う方法について完全に迷っています。助けていただければ幸いです:)
c# - Tic Tac Toe完璧なAIアルゴリズム:「フォークの作成」ステップの詳細
StackOverflowでTicTacToeのトピックをたくさん読んだことがあります。そして、ウィキペディアの戦略が私のプレゼンテーションプロジェクトに適していることがわかりました。
次の表[3]で最も優先度の高い動きを選択すると、プレーヤーは完璧な三目並べをプレイできます。
1)勝つ:2つ続けて持っている場合は、3番目をプレイして3つ続けてください。
2)ブロック:対戦相手が2つ続けている場合は、3番目をプレイしてブロックします。
3)フォーク:2つの方法で勝つことができる機会を作成します。
4)対戦相手のフォークをブロックする:
オプション1:2つ続けて作成し、フォークを作成したり勝利したりしない限り、対戦相手に防御を強制します。たとえば、「X」にコーナーがあり、「O」に中央があり、「X」にも反対側のコーナーがある場合、「O」は勝つためにコーナーをプレイしてはなりません。(このシナリオでコーナーをプレイすると、「X」が勝つためのフォークが作成されます。)
オプション2:対戦相手がフォークできる構成がある場合は、そのフォークをブロックします。
5)センター:センターを再生します。
6)反対側のコーナー:対戦相手がコーナーにいる場合は、反対側のコーナーをプレイします。
7)空のコーナー:空のコーナーを再生します。
8)空のサイド:空のサイドをプレイします。
私はこれらの手順を実行しましたが、コンピューターが失われることはありません。しかし、それが攻撃する方法は完璧ではありません。手順3の方法がわからないため、手順3で行う方法は次のとおりです。すべてのセルをスキャンし、そのセルにトークンを置くとフォークが作成されるかどうかを確認してから、そこに置きます。
このステップについてアドバイスをお願いします。
編集1:カウントフォークは、コンピューターが持っているフォークの数をカウントします(コンピューターのトークンは2、プレーヤートークンは1です。これは、ステップ4でもそのメソッドを使用したため、countFork
関数内にトークンのパラメーターがあります)。
EDIT2:私がそれが完璧ではないと言う理由はこれです(CPUが最初に行き、その細胞は青で、人間の細胞は赤です)。
ご覧のとおり、上面のセルに入れると、コンピューターが勝ちます。しかし、右側のセルを入れると、コンピューターは勝つことができますが、それは引き分けです。
EDIT3:理由はわかりませんが、ステップ3をコメントアウトすると、コンピューターが再生されます...完全に!びっくり!これが私のcountFork関数です(このコードを2次元配列をサポートしないAliceに移植する必要があるため、getNumberFromXYを使用して2次元配列を1次元に変換します):
EDIT4:soandosによるバグを修正し、EDIT 3のコードを更新して、完全に機能するようになりました。
ios - プログラムで線を引く方法は?
ゲームの三目並べは私にとっていい運動になりそうです。
最初に三目並べのグリッドを描きたいと思います。
Interface Builder には、線を描画するためのクラスが組み込まれていません。
したがって、私の質問は次のとおりです。グリッドの線をプログラムで描画するには、どのクラスを使用できますか?
c# - Tic Tac Toe 再帰アルゴリズム
この質問(または同様の質問)が数回尋ねられていることがわかります.Googleでよく検索して理解しようとしましたが、間違いなく行き詰まっています.
私の仕事は、「良い」変数を使用して、コンピューターが実行できる最善の動きを決定する再帰関数を使用することです。これを支援するためのドキュメントもありますが、私の人生では、わかりません。
誰かが私を助けたり、実際に行う必要があることを分解したりするのに時間がかかる場合は、非常に感謝しています。これまでに持っているコードを以下にリンクしますが、これは割り当てであるため、直接の回答よりもガイダンスが望ましいです。私は MinMax ソリューションを見てきましたが、それは間違いなく私の理解を超えているようです。私はプログラミングに非常に慣れていないため (特に C# では数か月の経験しかありません)、簡単に行ってください!
これが私が従うことを意図した提案された解決策です:
c++ - 三目並べゲーム グラフ デザイン?
これは私の宿題からの一般的な質問です。アイデアや疑似コードを求めているだけです。
C++ を使用して三目並べゲームを作成しているとします。私がすでに持っているのはNode
、現在のゲーム ボードの状態を表す const メンバー データと、考えられるすべての次のステップの状態を含む他のノードへのポインターの const 配列を含むクラスです。したがって、これはノードが重複していない有向グラフになります (すべてのノードには独自のゲーム状態があります)。
そのようなグラフを生成しようとしているときに問題が発生しました。すべてのデータメンバーが含まれているため、再帰を使用する必要があるようですNode
クラスは const であるため、それらを変更する方法はありません。そして、ノードを複製せずにそのようなグラフを一度に生成する良いアイデアを思い付くことはほとんどできません (つまり、ツリーにするのは簡単ですが、多くのスペースと時間を浪費します.)。1 つの助けになるかもしれないのは、2 つの異なるゲーム状態を比較できることです<set>
。.
したがって、誰かがこれについて何か考えを持っている場合は、あなたの考えや疑似コードを自由に書き留めてください。ありがとうございました
vb.net - ミニマックスアルゴリズムは、動きが直接見える場合にのみ勝ちます。それ以外の場合は、常にプレーヤーが勝つことを許可します
私は3日間、ミニマックスアルゴリズムと一般的な再帰呼び出し(プログラミングに比較的慣れていない)の両方で最初に試みた小さなコードで何がうまくいかなかったかを理解しようと努力してきました。基本的に、実際に学習して作業したいもの、つまりミニマックスアルゴリズムを除いて、すべてがアプリケーションで機能しています。
基本的に、プレーヤーが移動するたびに、コンピューターは次の2つのいずれかを実行します。
- そのすぐ隣に勝利の動きがある場合、それはその動きを使用します。やさしい。
- ただし、この動きが直接見えない場合は、プレーヤーが勝つことができる動きを選択します。それがすべきことの正反対。
私はそれがから来ていないことを知っています:
- リーガルムーブゲッター
- ボードエバリュエーター自体は、それがポインターを持った奇妙なものから来ているのかどうかわかりませんが、エバリュエーターは正しいスコアを返しています。
コードは次のとおりです(プログラムを開始する関数の一部を切り取りました):
あなたが助けることができることを願っています!
algorithm - Tic Tac Toeでテーブルのスコアを設定するにはどうすればよいですか?
私はテーブルとGenerate_moves()などのいくつかの関数を持っていますが、minmaxアルゴリズムが機能するには、コンピューターに最適なテーブルを選択させるためにテーブルのスコアを設定する必要があります。
直線canWin(string)
または列にXまたはOがいくつあるかを示す数値を返しますが、テーブルのスコアを設定する理由が大きいとは思えません。
私がテーブルを持っている場合:
スコアはと同じである必要があります
とより大きくする必要があります
また、スコア関数にさまざまなスコアを教えてもらう方法がわかりません。これを伝えるためにメソッドScoreを実装するにはどうすればよいですか?
編集:
コンピューターが最初にXで、私がOである場合
次に、次善のオプションをコンピュータに選択させるにはどうすればよいですか。
artificial-intelligence - TicTacToeのMinMaxから自分のベストムーブを抽出するにはどうすればよいですか?
この小さな関数は、ゲームが勝ち、負け、引き分けのいずれであるかを教えてくれますが、どうすれば勝つための動きを得ることができますか?私のPointクラスは、2つの座標X、Yを持つ単純なクラスであり、後で答えをポイントとして取得したいので、後で次のように言うことができgame.Do_Move(myPoint)
ます。
一部の機能が明確でない場合:
game.IsFinished()
-勝つ/負ける/引く場合はtrueを返し、そうでない場合はtrueを返します。
game.Score(turn)
-次の手でプレーヤーが負け/引き分け/勝った場合は-1/0/1を返します
game.Generate_Moves()
-利用可能な動きのリストを返します
game.Do_Move()
-ゲームに移動を適用するvoid
game.Undo_Move()
-自分自身のために話します