概要
リバーシの序盤の定石の設定をします。
リバーシを呼び出した際に、ツリー状の構造の序盤データが作成されます。
ボードにおける座標の設定

座標は上図のように0~7の整数値であらわします。
初手

初手は上図のように5,4に打つ手を基準とします。
他の場所へ売った場合は向きを変えて対応しますので
上図の場合だけ設定すればOKです。
ノードと定石の設定
Opening_Node.new([x,y,100000],ノード名(省略可),石の個数(省略可))の形でノードを指定します。(x,yは石を置く座標(それぞれ0~7の整数値)、ノード名は省略可でノードを表す文字列をいれてください)
さらに定石を
$data_opening[定石名(文字列)] = ノードの配列
でセットします。($data_openingはハッシュです)
この定石名は対戦相手のデータのopening_listをセットする際に使用します。
そして対戦相手のopening_listに使用する定石をセットすればリバーシ開始時に 対戦相手の序盤データのツリー構造を自動で作成します。
例
node x,yのx,yの座標に打っていくものとして、下の図のような序盤のデータ構造を作ります。
$top_node = Opening_Node.new([-1,-1,0], "start")
node_rabbit = Opening_Node.new([5,4,100000], "rabbit")
node_rabbit01 = Opening_Node.new([3,5,100000], "rabbit01")
node_rabbit02 = Opening_Node.new([2,4,100000], "rabbit02")
node_rabbit03 = Opening_Node.new([5,3,100000], "rabbit03")
node_tiger01 = Opening_Node.new([2,2,100000], "tiger01")
node_tiger02 = Opening_Node.new([3,2,100000], "tiger02")
node_ushi01 = Opening_Node.new([5,5,100000], "ushi01")
node_ushi02 = Opening_Node.new([4,5,100000], "ushi02", 8)
node_ushi03 = Opening_Node.new([5,3,100000], "ushi03")
node_ship01 = Opening_Node.new([4,2,100000], "ship01")
次にこれらのノードを使って定石をセットします。
$data_opening = {
"opening_rabbit0x" => [$top_node, node_rabbit, node_rabbit01, node_rabbit02, node_rabbit03],
"opening_tiger0x" => [node_rabbit01, node_tiger01, node_tiger02],
"opening_ship0x" => [node_rabbit,node_ushi01, node_ushi02, node_ushi03, node_ship01]
}
そしてDataManagerのload_normal_data_takoreversiにおいて
$data_normal_person[cid].opening_list = [
["opening_rabbit0x"],["opening_tiger0x", [1,2]],
["opening_ship0x"]
]
とすることでcidの対戦相手に上図のような序盤データを持たせることができます。
広告
対称配置における向きの変更の設定
次に$orientation_change_in_opの設定ですが
これは対角線に対して対称な配置になったときに
定石の手順が基本の手順ともう1つの対角線に対称な手順の2通りの展開が考えられます。
そこで基本の手順と対称な手順になる場合、向きを変えることで対処します。
$orientation_change_in_op は
[node_name,[x,y],sym_type]の配列
の形で指定します。
上のnode_nameは対称的な配置となったときのノード名、
そしてx,yは手順Bとなる手の座標、sym_typeは対称の軸となる対角線を設定します。
sym_type が0で左上から右下への対角線、1で左下から右上への対角線を表します。
です。指定したノードにおいてこの座標に打つと向きを変更します。
例
上にやった例と同じ序盤を考えてみます。この場合、node4,5で対角線に対称になります。

この場合、5,3に打つのと3,5に打つのでは向きが違うだけで同じ展開になります。
そこでまず、ここに対応するノードに石の個数も省略せずに設定します。
node_ushi02 = Opening_Node.new([4, 5, 100000], "ushi02", 7)
次に $orientation_change_in_opに["ushi02",[5,3],0]をセットすると 5,3に打つ場合の定石を作るだけで3,5に打った場合にも同じように対応できるようになります。
$orientation_change_in_op = [["ushi02", [5,3], 0]]
質問やバグなどの報告は製作ブログのコメント欄でお願いします。
広告