三次元オセロのプログラム
盤上で戦う通常のオセロを三次元空間に拡張してみましょう。オセロのルールに若
干の修正は必要ですが、 大部分はそのまま使えます。 理想的には、3Dグラフィッ
クスをふんだんに使ってゲームを行えればベストですが、プログラム自体が大規模
になり作成するのは容易ではありません。第一段階として、二次元オセロのプログ
ラムコードを最大限利用することを考えます。
三次元オセロのプレーインググランドは、 64個の小さなセルに分割された立方体
の内部になります。白黒ともに二つの石を、その中心部に持ちます(配置のし方や
初期の石の数は変えても良い)。以下に、その様子を示した平面図を示します。第
一段目(一番下)から 第四段目(一番上)の状況 を平面的にDISKを描画して表し
ています(図1参照)。
<三次元オセロ(4X4X4)の初期盤面>
(図1、十進BASICによる2Dグラフィックス)
オセロのルールを考えるに当たって、XYZ軸の方向を決めます。 画面に垂直な方
向がZ軸の方向で、 左右方向がX軸方向、 上下方向がY軸方向とします。 それぞ
れの軸に対して垂直な平面でカットしたときに、二次元オセロのルールが適用でき
るとします。勿論、これに新たなルールを追加することもできます。複雑になるので
、ここでは追加しないことにします。
黒が先手でゲームを開始する場合、 黒が石を置ける場所(紫の石)は次のように
なります。
<黒が石を置ける場所>
(図2、十進BASICによる2Dグラフィックス)
では、プログラムを具体的に考えてみましょう。 各セルの情報は三次元配列G(L、
M、N) の各要素に保管されることになります。白石があれば0、黒石があれば1、
何もなければ2、 そして石が置ける場所は3で対応させます。 これは、通常のオセ
ロの場合と同じです。 今、 黒石を(X、Y、Z)に置くとします。 この場合、次の18方
向の最隣接セルに白石があるかどうかをチェックすることになります。つまり、(X+
1、Y、Z)、(X−1、Y、Z)、(X、Y+1、Z)、(X、Y−1、Z)、(X、Y、Z+1)、 (X、Y
、Z−1)、(X+1、Y+1、Z)、(X+1、Y−1、Z)、 (X−1、Y+1、Z)、 (X−1、Y
−1、Z)、(X、Y+1、Z+1)、(X、Y+1、Z−1)、(X、Y−1、Z+1)、(X、Y−1、
Z−1)、(X+1、Y、Z+1)、(X+1、Y、Z−1)、 (X−1、Y、Z+1)、 (X−1、Y、
Z−1)の18セルです。 これらのどれかに白石があり、さらにその延長線上に黒石
があれば白石が取れます。
プログラムコードの内容は、Gが三次元配列であることに注意して書き換えれば良
いことになります。 したがって、詳細については説明しません。 ただし、石をマウス
の左クリックで盤上に置けるようにプログラムを最終的に改造します。