ミニマックス(手軽に連珠用)ライブラリ
ミニマックス法を用いたCPUルーチンを実装し、ルールの簡略化がなされた連珠用ライブラリを作ってみました。
ライブラリの仕様
基本的に15×15の盤面なので、処理速度を考慮して探索の深さは4にしています。 CPUは、評価関数に基づいた最善手を打ち続けます。 アルゴリズム的には防御重視なので、しっかり考えて打たないと勝てないようになっているとは思います。 攻撃重視ではないので、長期戦になりがちかも?
ライブラリの使い方
CPUが評価関数に基づく手を打つ関数と、勝利判定を行う関数が実装されています。
・CPU用 get_best_move(board, n, tx, ty, total_turn, player)
引数・・・盤面, サイズ, 最後に打ったX, 最後に打ったY, 総ターン数, 手番(1or2)
戻り値:初手先手時は中央値, その他の場合は打つ手の値
・勝利判定用 check_game_end(board, n, tx, ty, total_turn, player)
引数・・・盤面, サイズ, 最後に打ったX, 最後に打ったY, 総ターン数, 手番
戻り値: -1: 満局, 0:継続, 1:黒勝利, 2:白勝利, 3:黒の長連負け, 4:黒の三三禁負け, 5:黒の四四禁負け
元々、盤面のサイズ可変にしようと思っていたため、盤面のサイズやという引数が残っています。
現在の仕様では、サイズは15でしか動作しないので、実質的に固定値となっています。
ダウンロード
下のリンクからファイルをダウンロードできます。
minimax1.zip ※ZIP形式で圧縮されてるので、使う前に解凍してね!
使用ライブラリについて
本DLLは GNU Compiler Collection (gfortran) を使用してビルドされています。
これに含まれるランタイムライブラリには、GCC Runtime Library Exception が適用されています。