リバーシー(≒オセロ)のおまけ
前回、GitBuhに上げたコードには、一応 人対マシンのモードがありました
オセロ(リバーシ)の作り方(アルゴリズム) ~石の位置による評価~を参考
させていただき
AUTO1.kt
class AUTO1( val ban : Array<Array<GAME_STATUS.MASU_STATUS>> ) {
// マスの重みで判断する思考パターン
private val weight = arrayOf<Array<Int>>(
arrayOf<Int>( 30,-12, 0, -1, -1, 0,-12, 30 ),
arrayOf<Int>( -12,-15, -3, -3, -3, -3,-15,-12 ),
arrayOf<Int>( 0, -3, 0, -1, -1, 0, -3, 0 ),
arrayOf<Int>( -1, -3, -1, -1, -1, -1, -3, -1 ),
arrayOf<Int>( -1, -3, -1, -1, -1, -1, -3, -1 ),
arrayOf<Int>( 0, -3, 0, -1, -1, 0, -3, 0 ),
arrayOf<Int>( -12,-15, -3, -3, -3, -3,-15,-12 ),
arrayOf<Int>( 30,-12, 0, -1, -1, 0,-12, 30 )
)
fun actSelect() : SELECT_MASU {
var maxW = -100
var slectAct : SELECT_MASU = SELECT_MASU(0,0,SELECT_MASU.IN_STATUS.PASS)
for( x:Int in 0..7) {
for(y:Int in 0..7) {
if ( ban[x][y] == GAME_STATUS.MASU_STATUS.READY ) {
// 置けるマスの中で
if ( weight[x][y] > maxW ) {
// 最も「重み」のあるマスを取る
maxW = weight[x][y]
slectAct.x = x
slectAct.y = y
slectAct.InSw = SELECT_MASU.IN_STATUS.MASU_SELECT
println("->"+x.toString()+","+y.toString())
}
}
}
}
return slectAct
}
}
として実装しています。
actSelect() で選択マス座標を返す
ここを強くすれば、強くなります
いつか、ここ育ててみようかなと思ってます。
AIとかに興味がでていたら、実験用にちょうどいいかなと。
(かなり遠い未来の話ですが)