Flash Action Script版

本編で説明した話は省略するので、本編を読んだ後に読みましょう。

ムービークリップの作成

マスは何も書いてない状態と○または×の書いてある状態の3つの状態があります。「無し」、「○」、「×」の3フレームからなるムービークリップオブジェクトを作成します。

手番ごとに「○」「×」を交互にする

ムービークリップにAction Scriptをつけてクリックしたら手番によって○か×になるようにフレームが変わるようにします。まず、親フレームに手番を表す変数を作成します。

親フレーム

teban=0;

クリックされたとき(正確にはボタンが離されたとき)の動作をon(release)関数で書きます。このようなイベントで起こることを記述するのがイベントドリブンプログラムの基本となります。

自分自身のフレームを移動するのでthisを指定してgotoAndStop命令を使用します。変数tebanの値を使って○か×かのフレームに飛ぶようにします。if文で作るのが普通ですが、「手番の値を2で割った余り」をうまく使うと、一文で書くこともできます。クリックされたら手番を一つ進めるのを忘れないようにしましょう。

ムービークリップ

on (release) {
	this.gotoAndStop((_parent.teban%2)+2);
	_parent.teban++;
}

これで、クリックするたびに「○」「×」が交互に表示されます。

重複チェック

同じマスへは入力できないように変更します。各マスに情報を記憶する変数masuを作成します。変数masuの値は、onClipEvent(load)を使って初期化しておきます。

ムービークリップ

onClipEvent (load) {
	this.masu = 0;
}

クリックされた時に、どちらの手番であるか(先手=1, 後手=-1, 未入力=0)を代入することにし、すでに入力済みの際には処理をしないようにします。

ムービークリップ

on (release) {
	if (this.masu == 0) {
		this.gotoAndStop((_parent.teban%2)+2);
		this.masu = 1-((_parent.teban%2)*2);
		_parent.teban++;
	}
}

複数マスの配置

各マスのムービークリップにb0〜b9のインスタンス名をつけて配置します。

勝敗チェックルーチン

親フレームにチェック用の関数を作成します。先手=1, 後手=-1, 未決定=0の値を返します。インスタンス名.masuで各マスの変数を参照します。

親フレーム

function check_winner () {
 	if (b0.masu+b1.masu+b2.masu == 3 ||
		b3.masu+b4.masu+b5.masu == 3 ||
		b6.masu+b7.masu+b8.masu == 3 ||
		b0.masu+b3.masu+b6.masu == 3 ||
		b1.masu+b4.masu+b7.masu == 3 ||
		b2.masu+b5.masu+b8.masu == 3 ||
		b0.masu+b4.masu+b8.masu == 3 ||
		b2.masu+b4.masu+b6.masu == 3 ) {
		return 1;
	} else if 
		(b0.masu+b1.masu+b2.masu == -3 ||
		b3.masu+b4.masu+b5.masu == -3 ||
		b6.masu+b7.masu+b8.masu == -3 ||
		b0.masu+b3.masu+b6.masu == -3 ||
		b1.masu+b4.masu+b7.masu == -3 ||
		b2.masu+b5.masu+b8.masu == -3 ||
		b0.masu+b4.masu+b8.masu == -3 ||
		b2.masu+b4.masu+b6.masu == -3 ) {
		return -1;
	} else { 
		return 0;
	}
}

勝敗処理

勝敗(○、×、引き分け)を表示するフレームを作成し、フレームにmaru, batu, wakeの名前を付けて、ジャンプするようにします。また、勝敗がすでについている場合には、クリックしても反応しないようにします。

ムービークリップ

on (release) {
	if ((this.masu == 0) && (_parent.check_winner() == 0)) {
		this.gotoAndStop((_parent.teban%2)+2);
		this.masu = 1-((_parent.teban%2)*2);
		_parent.teban++;
		if (_parent.check_winner() == 1) {
			_parent.gotoAndStop("maru");
		} else if (_parent.check_winner() == -1) {
			_parent.gotoAndStop("batu");
		} else if (_parent.teban == 9) {
			_parent.gotoAndStop("wake");
		}
	}
}

その他

ゲーム開始の画面、開始ボタン(start)と開始画面に戻るボタン(retry)をつけます。この辺はよくあるAction Scriptなので省略。