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