五目並べ


 

五目並べのプログラムを作ってみましょう。盤面などは、囲碁で使っているものをそ

のまま流用できます(図1参照)。

 

<五目並べ(19X19)の初期盤面>

GOMOKU-NARABE-1.GIF - 14,256BYTES

(図1、十進BASICによる2Dグラフィックス)

 

とりあえず、五目並べのルールは以下のシンプルなものにして置きます。

 

(1)白石と黒石を交互に一石ずつ盤上に置いていく(置く場所に制限なし)

(2)上下、左右または斜め方向に同じ石を5つ先に並べた方が勝ちとする

 

図2は白が先手として石を打ち始め、  ある程度ゲームが進んだ状態を示した図で

す。盤上でマウスを右クリックして石を置けるようにしています。

 

GOMOKU-NARABE-2.GIF - 15,498BYTES

(図2、十進BASICによる2Dグラフィックス)

 

初期盤面を描画し、白黒の石を交互に置く為のプログラムは以下のようになります

。マウスのクリックで石を置く部分に注意してください。 そこで、 新たな関数ROUN

を使用しています。 実数として、ROUND(X,0)を計算するとXの小数第一

位が四捨五入されてXの値が整数化されます。

 

PROGRAM-GOMOKU-NARABE-1.GIF - 10,573BYTES

PROGRAM-GOMOKU-NARABE-2.GIF - 7,267BYTES

 

次に、一度打った石をキャンセルし、その石を打つ前の盤面の状態に戻すプログラ

ムを考えます。 これには、 過去に打った石の位置を覚えていないといけないので、

石の有無やその色の情報を格納する為の配列S(I,J)を導入します。マス目の左

下が、I=1そしてJ=1に対応します。 そこから右に移れば、Iが一つ大きくなり、ま

た、上に移れば、Jが一つ大きくなります。 白石は、 黒石は、石がなければ

配列の各要素に整数の値を割り当てています。

 

上のプログラムにおいて、 初期盤面を描画する部分と配列のデータに基づいて石

を再描画する部分を外部副プログラム化して書き換えます。

 

DRAWBOARD(初期盤面の描画)

DRAWSTONE(石の再描画)

 

キャンセルする石に対応する配列の要素の値を2に戻し、  それ以外の石を描画さ

せるようにすれば、このプログラムは完成です。

 

最後に、 五目並べの勝敗を判定するプログラムを考えます。 同じ石が五個連続し

て並べばその石の側が勝ちになります。 従って、 勝ちパターンを次のように分けま

す。

 

(1)横方向に五個並ぶ

(2)縦方向に五個並ぶ

(3)右上がり方向に五個並ぶ

(4)右下がり方向に五個並ぶ

 

以下の外部副プログラムは上の四つの事をチェックするプログラムから構成されま

す。

 

JUDGE(五目並べの勝敗の判定)

 

(3)と(4)をチェックする部分に関しては、  対角線の上下で分けてチェックしていま

す。全体プログラムの詳細については、次のリンクにアクセスしてください。

 

五目並べのプログラム(人間対人間)

 

図3は白が先手で始まり、 黒が28手目で勝利したゲームの様子を示したものです

。詳細な棋譜も示しました。

 

GOMOKU-NARABE-3.GIF - 14,910BYTES

(図3、十進BASICによる2Dグラフィックス)

 

棋譜

 

白(10、10)→黒(9、9)→白(9、10)→黒(8、10)→白(10、9)→黒(10、8)→

白(11、7)→黒(8、11)→ 白(7、11)→黒(8、12)→ 白(8、9)→黒(9、11)→

白(10、11)→黒(11、12)→白(10、12)→黒(10、13)→白(11、8)→黒(9、

14)→白(8、15)→黒(8、13)→白(8、14)→黒(9、13)→白(7、13)→黒(9、

12)→白(9、15)→黒(7、10)→白(11、14)→黒(6、9)

 

課題(その1)

 

ゲームの勝ちパターンとして、 4−3の形状を作ることが重要になってきます(図4

参照)。  ゲーム中にこの形状を見つけ出してメッセージを出す外部副プログラムを

作成してください。

 

<先手の白が4−3の形状を作った状態>

GOMOKU-NARABE-4.GIF - 14,512BYTES

(図4、十進BASICによる2Dグラフィックス)

 

課題(その2)

 

4−3の形状と似た4−4の形状も勝ちパターンの一つです(図5参照))。これを検

出する外部副プログラムを作成してください。

 

<先手の白が4−4の形状を作った状態>

GOMOKU-NARABE-5.GIF - 19,564BYTES

(図5、十進BASICによる2Dグラフィックス)

 

 

 

 


 

Topへ