以前作ったオセロのボードですが,ビスケットに新しい機能が入ったのと,ビスケットプログラミングの方針が変わったのでまた作ってみました.
プログラムはここです.
新しい機能の説明は後にして,順に説明して行きましょう.
最初はこのように部品が配置されています.
黒い四角はマスで,4箇所それぞれに3つずつ重なっています.ここで次のようなメガネでボードが作られます.
最初のメガネはマスが3つ重なっていたら,縦に4つマスを並べます.この4つのマスもそれぞれ2つずつ重なってます.次のメガネはマスが2つ重なっていたら横に4つマスを並べます.この2つのメガネで4x4にマスを並べることができます.最初に4箇所にマスを置いてあるので,これで8x8の盤ができました.
3つ目のメガネはいままでとちょっと違いますね.真ん中に横線が入っています.この仕組みは後で説明するとして,ここでは緑の点と4つのマスで,緑の点と白黒のコマを置いています.この結果がこれです.
次にコマを置くメガネを作ります.マスをタッチするとコマ置きますが,これも真ん中に横線が入ったメガネですね.
この変なメガネを,遠近両用レンズとかメガネが割れたとか言います.レンズの真ん中の線で領域が上下に分かれます.上に書いたパターンと下に書いたパターンは,お互いの位置関係を問いません.
この割れたメガネは,メガネの矢印の部分を長押しすることでできます.長押しを2回すると3分割して,もう1回長押しすると割れていないメガネに戻ります.
上のメガネは,白棒が赤四角で囲まれている時,マスをタッチしたら,マスに白のコマを置いて,赤四角は上に移動します.白四角,赤四角は画面の右側にありますし,いろいろな位置のマスをタッチしても動くようにしたいですが,この2つのパターンはメガネの上と下に分かれて置かれているので,それぞれ独立して探されるということです.論理の言い方をすると上のパターンと下のパターンがANDで繋がっている状態です.もう一つのメガネも同様で,黒棒を赤四角で囲んでいる時,マスをタッチしたら,マスに黒のコマを置いて,赤四角は下に移動します.
これで,マスをタッチした時に,いま赤四角が黒棒か白棒のどっちを囲んでいるかで,どの色のコマをおけば良いかが決まります.ここで,前につくったバージョンのオセロのボードを見てみると,
タッチすると,白か黒を選択する部品が出て,それの黒をタッチした時は黒が,白をタッチした時は白が生成されるようになってました.つまり2回タッチして生成していました.それに対して,今回のは次はどっちの番かを覚えていて,タッチすると自動的にその番のコマを置くようになります.
実は,コマが置かれるのと同時に4方向の矢印も重ねて置いています.上のメガネで白は見えにくいですが黒を置くメガネではわかりますね.
では,実際に動かしてみます.
最初は赤四角は黒棒を囲んでいるので黒の番です.タッチすると,
黒が置かれ,同時に黒の矢印も少し見えています.ここには4方向の矢印が重なっています.右の赤四角は次が白の番になるようにかわっています.
で,隣の白のコマが反転しました.
コマの反転は次のようなメガネが動いています.
黒,白,黒左矢印と並んでいた時,黒,黒,になって矢印は消える,です.
間に2個コマを挟む場合も別に作ります.この調子で,すべての方向と色と数でメガネを作って行きます.
最後の矢印単独は消えるというメガネは,何のコマも挟めなかったときに消すためのものです.メガネのなかの部品数が1個で優先度が低いので,一番最後に判定されます.
この段階で,コマは2つまでしか挟めません.それから斜めも作っていません.いったい何個のメガネがあれば完全なオセロを作れるかを見積もってみましょう.
8×8のボードでコマを1列で挟めるのは1個から6個までです.それが8方向あります.そして白と黒の2色あります.つまり6x8x2= 96個のメガネがあればできます.それを大変と見るか,たったそれだけと見るか.
前のバージョンは矢印を順番に各方向に進めて,違う色になったらひっくり返しながら帰ってくる,という手続き的にプログラムを作っていました.ここでも少し述べられていますが,どんなに大きなボードでも時間はかかりますが順番に辿ってひっくり返すことができます.メガネは80個必要なようです.
といっても,やはり手続き的にひっくり返すプログラムは難しいですよね.同じ色かどうかを辿って行って,違う色にぶつかったらひっくり返しながら戻ってくる.というのはそれなりに手続き的なプログラムです.
それに対して,今回のオセロはどうでしょうか.まったく手続きではありません.ただひたすら,必要なパターンのメガネを増やして行くだけです.しかも,前のバージョンが80個に対し,こちらは96個ですから,むちゃくちゃ効率が悪いというわけではありません.ただし,こちらは8×8のボード限定なのに対して,前のバージョンではどんなに大きなボードでもちゃんと動くという特徴があります.
今回のは斜めもないですし,2つまでしか挟めていないので,メガネは16個しかないのですが(他のメガネも合わせたらもうちょっと多い),それでもそれなりに遊べます.斜めバサミができないとか,コマは2つまでしか挟めないというのは,それはそれで違った戦略になって面白いです.
遠近両用レンズのもう一つのデモとして,コマの数を数えるというのも作ってみました.
まず,赤い三角を触ると,ピンクの三角に変わります.これが計算のトリガーです.ピンクの三角が画面にある時,白のコマはマスに変わり,ピンクの三角の横に白棒を置きます.同様に,ピンクの三角が画面にある時,黒のコマはマスに変わり,ピンクの三角の横に黒棒を置きます.これで,コマの数だけ,棒がここに生成されるはずです.
黒棒が2つ重なると,左に1つの黒棒になります.同じように白棒が2つ重なると,左に1つの白棒になります.これはビスケットのテクニックではおなじみの2進法です.
最後に,ピンクの三角が集めるコマがなくなると,元の赤の三角に変わります.これでボードはまっさらになります.
そこで,一番最初にやったメガネ,
に戻ります.赤い三角のときに,マスが4つ並んでてその中心に緑の点があると,そこに白と黒のコマを置くというものです.よくみると,緑の点はそのまま置かれています.なので,全体がまっさらになると自動的に中心にこの4つのコマを置くことになります.
ここで,赤の三角と一緒に判定しているのも重要です.実は最初に作った時には,この赤の三角のチェックがなくて,普通のメガネでした.すると,ボールを数えて順番にマスを作っている最中に(全部が終わっていないのに),このパターンが現れてしまって,またコマを生成してしまい,止まらなくなるという自体になりました.それを防ぐために,コマを数えるプログラムの実行が終わってからやるという,
この数えるプログラムはリセットはしないので,コマの数を積算します.なので,新しいルールとして,自分のコマを置く代わりに,コマカウントを押して,ゲームを最初からにする,というてもできるようにします.挟めるのが2個までなので,序盤のやりとりを楽しんで,今やめると自分が勝ち逃げできるというときに,この機能をつかって最初からやり直すというのが面白いです.