前回のオセロにAIをつけてみた。
ダウンロード
(Cキーで終了、Rキーでリセット)
もしかすると実行するのにGLUTをインストールする必要があるかもしれない…
(ソース)
Display.txt
Idle.txt
KeyboardMouseC.txt
KeyboardMouseState.txt
main.txt
MainState.txt
PositionMaps.txt
ResionMap.txt
States.txt
Stones.txt
VectorMaps.txt
Texture.txt
EventFlags.txt
General.txt
SetValue.txt
ProgEnd.
EventCheck.txt
AIReversi
BoardOperater.txt
AIなんだけど、打つことが出来る場所に数値を設定して、
その数値の大きさがそこへ打つ確率の大きさになる。
その数値なんだけど、数値を変更する関数を合成して得られるんだけど
まず値を変化させる関数のAIGeneraterという型を作る。
type AIGenerater = (MState -> (Vector2 GLint) -> GLint -> GLint)
そしてそのリスト [AIGenerater] のaiGeneratersを
aiGeneraters = [losePutValue , cornerPutValue , xPutValue , cPutValue , cornerLosePut]
losePutValue : 全滅につながる手を避ける
cornerPutValue : 角優先
xPutValue : X打ちする場合の値の作成
cPutValue : C打ちする場合の値の作成
cornerLosePut : 角を取られるような手を避ける
と定義してaiConstructで合成した。
そしてその関数を使って数値を作り出す。
なんというか関数のリストを作ってそれを合成するっていうのはなんか便利だな。
これは他にも使えそうな気がする。
PR