2

Unity3Dを使用して、ゲーム「ファイナルファンタジーVIII」で見られるミニゲームのトリプルトライアドを開発しています。

基本的なゲームは3x3グリッドで、プレイヤーとNPCは5枚のカードを手に持っています。目的は、ボードがいっぱいになるまでに最も多くのカードを保持することです。カードには、上下左右に4つの数字が入っています。あるプレイヤーがカードをグリッド上に置き、他のプレイヤーがその隣にカードを置くことができます。その後、カードの数字が比較されます(たとえば、カードが中央にあり、対戦相手がその左側で1枚プレイした場合。対戦相手のカードの右の値は、すでにそこにあるカードの左の値と比較されます)。一方のカードがもう一方のカードよりも大きい場合、プレイヤーは対戦相手のカードを「取ります」。

トリプルトライアドの詳細については、http://finalfantasy.wikia.com/wiki/Triple_Triadをご覧ください。

私は現在、人間がNPCと対戦できるように、シングルプレイヤー用のAIを設計しています。AIを開発する最善の方法は、アルファベータ法を使用したミニマックスアルゴリズムを使用して、AIの順番で可能な限り最良の動きを実現することであると判断しました。

私が抱えている問題は、インターネットで見た例の大部分が三目並べの評価関数を示していることです。これは、トリプルトライアドエバリュエーターよりもはるかに簡単です。これは、関数がカードの値と、カードがプレイされている位置(たとえば、敵のカードを取る)を考慮に入れる必要があるためです。

このエバリュエーター関数をコーディングする方法について誰かがヒントを持っていますか?または、少なくとも、このサイトのコードを、ボードのトリプルトライアドを評価するコードに適合させるにはどうすればよいでしょうか。

http://www3.ntu.edu.sg/home/ehchua/programming/java/JavaGame_TicTacToe_AI.html

4

1 に答える 1

3

評価関数には 2 つのフレーバーがあります: ゲームの終了を確認できる場合 (コモドール 64 で実行している場合でも、三目並べで常に確認できるように)、結果が成功しています。ゲーム エンジンは、勝つ (または、可能であれば引き分け) 動きのみを選択します。

興味深いゲームでは非常に一般的なエンドゲームが表示されない場合は、各プレイヤーがどのように有利になるかを測定する方法で、ボードの中間位置をスコアリングする関数が必要です。たとえば、チェスでは、各駒に点数を割り当て、各面の素材の量を合計して差し引くことができます。したがって、AI はこれまで以上に重要な利点を優先します。次に、評価者に対戦相手をチェックするためのボーナス ポイントを与えます。

ゲームのプレイ方法についてよくわからない場合 (私はゲームの AI を書いたことがありますが、何度もプレイ方法を知らなかったのです!)、AI を人間または他の AI プレイヤーに対して、それが実行されるまで単純に調整できます。良い。7th Guest で Microscope Puzzle と対戦するためのプログラムを作成しました (Ataxx のバリエーションです)。ルームメイトと私はゲームに勝てなかったので、私はそれを書かなければなりませんでした! ボード カバレッジの何らかの機能が適切な機能であることは明らかでした。AI がゲームの AI を打ち負かすことができるまで、接続されたグループのボーナスなどを試しました。私はまだ Ataxx を倒すことができず、私の AI はさらに冷酷で、すぐに私を虐殺します。

于 2012-11-14T23:49:04.850 に答える