1. | isable(pos) | ある場所に石が打てるかどうか調べる | isableは、配列banで表現されている局面に対し、盤上の場所posを引数としてもち、そこに石が打てるかどうかを調べ、真か偽を値として返す。また、場所によって白は打てるが黒は打てないということもあるので、isableは白用と黒用の2つ必要。 |
2. | put(pos) | ある場所に石を打つ | putは、引数posで示される場所に石を打ち、局面を変化させる。また、後で局面を前の局面に戻す必要があるので、そのための情報を蓄える。 |
3. | reput() | 2.で変化した局面を元に戻す | reputは、putにより変化した局面を元に戻す。 |
![]() |
さて、2手先の局面を生成する関数は、どうなるでしょうか?
上の関数の9行目のところで、もう一度3行から13行を繰り返すようにします。
【2手先の局面を生成する関数】
![]() |
このプログラムは、重要な特徴を持っています。それは、ループを1重から2重に変えただけで、ある局面から2手先すべての局面を生成できるという点です。
つまり、2手先すべての局面生成の時のループは2重で、3手先なら3重、60手先なら60重ということです。
リバーシの盤面は64マスで4マスは最初から埋まっていますから、最大60手で終了です。
60重のループというのは、、、、。
そうです。再帰の登場です。
【再帰を使ったすべての局面を生成する関数】
![]() |
以上が、概要です。
このままでは、いろいろ不備がありますがここまでにして、次の話に移ります。(→2.4 最適な手を選ぶ)
→topに戻る →目次に戻る
更新:2013年6月28日
最終更新:2013年7月30日