gal09

今までのプログラムに敵を表示して、敵に弾を当てるとその敵はやられます。殆どインベーダーゲームみたいですね。敵もちゃんとアニメしてたり、やられたら縮小しながら消えていったり、かなりしっかりしたプログラム内容です。

ちなみにこのプログラムは改造して当サイトトップページの右側ウィジットでも使っています。サクっとこんな使い方しちゃうと「何だコレ?」って注目を浴びて面白いかもです。何処を改造したかって?それは…女の子とUFOを倒した後に判ります♡

実行すると…

プログラム内容は、これだっ!

//
//	<< ex03.js >>
//	魔女っ子ニャンコ研究所
//	2014.12.27
//
///////////////////////////////////////////////////

///////////////////////////////////////////////////
// システム変数
//	cxsiz キャンバス幅
//	cysiz キャンバス高
//	click マウス状態
//	mx マウス_X_座標
//	my マウス_Y_座標

///////////////////////////////////////////////////
// スプライト変数
//	smod[] 状態
//	xpos[] X_座標
//	ypos[] Y_座標
//	xsiz[] 画像幅/2
//	ysiz[] 画像高/2
//	scal[] 拡大縮少
//	zrot[] 回転
//	flg0[] 自由変数
//	flg1[]
//	flg2[]
//	flg3[]
//	tim0[] 自由変数
//	tim1[]
//	tim2[]
//	tim3[]

///////////////////////////////////////////////////
// ゲーム定数
const BG = 0;
const PLY = 1;
const UFO = 2;
const GAL = 3;
const PWP = 4;
const PWPMAX = 10;
const SPRMAX = PWP+PWPMAX;

///////////////////////////////////////////////////
// 画像番号定数
const IMG_BG = 0;
const IMG_PLY = 1;
const IMG_GAL0 = 2;
const IMG_GAL1 = 3;
const IMG_UFO0 = 4;
const IMG_UFO1 = 5;
const IMG_PWP = 6;

///////////////////////////////////////////////////
// ユーザー変数

///////////////////////////////////////////////////
// 読込み画像の定義
var manifest = [
	{id:"bg", src:"../wp-content/myImg/comn/bg00.png"},
	{id:"play", src:"../wp-content/myImg/comn/play.png"},
	{id:"gal0", src:"../wp-content/myImg/comn/gal040.png"},
	{id:"gal1", src:"../wp-content/myImg/comn/gal041.png"},
	{id:"ufo0", src:"../wp-content/myImg/comn/ufo0.png"},
	{id:"ufo1", src:"../wp-content/myImg/comn/ufo1.png"},
	{id:"pwpn", src:"../wp-content/myImg/comn/pwpn.png"},
];

///////////////////////////////////////////////////
// ゲーム初期化
function initGame()
{
	// 画像の読み込み
	loadImg(IMG_BG, "bg");
	loadImg(IMG_PLY, "play");
	loadImg(IMG_GAL0, "gal0");
	loadImg(IMG_GAL1, "gal1");
	loadImg(IMG_UFO0, "ufo0");
	loadImg(IMG_UFO1, "ufo1");
	loadImg(IMG_PWP, "pwpn");

	// 画像番号の設定
	setImg(BG, IMG_BG);
	setImg(PLY, IMG_PLY);
	setImg(UFO, IMG_UFO0);
	setImg(GAL, IMG_GAL0);
	for (var i=0; i<PWPMAX; i++) {
		setImg(PWP+i, IMG_PWP);
	}

	// 背景の初期化
	smod[BG] = 1;
	xpos[BG] = cxsiz/2;
	ypos[BG] = cysiz/2;

	// プレイヤーの初期化
	smod[PLY] = 1;
	xpos[PLY] = cxsiz/2;
	ypos[PLY] = cysiz - ysiz[PLY];

	// UFO の初期化
	smod[UFO] = 1;
	xpos[UFO] = cxsiz/2;
	ypos[UFO] = 0 + ysiz[UFO];

	// GAL の初期化
	smod[GAL] = 1;
	xpos[GAL] = cxsiz/2;
	ypos[GAL] = 0 + ysiz[UFO]*2 + ysiz[GAL];
	
	// プレイヤー弾の初期化
	for (var i=0; i<PWPMAX; i++) {
		smod[PWP+i] = 0;
	}
}

///////////////////////////////////////////////////
// ゲーム実行
function execGame()
{
	// プレイヤーの移動
	if (flg0[PLY] == 0) {
		xpos[PLY] -= 2;
		if (xpos[PLY] < 0+xsiz[PLY]) {
			flg0[PLY] = 1;
		}
	}
	else {
		xpos[PLY] += 2;
		if (xpos[PLY] > cxsiz-xsiz[PLY]) {
			flg0[PLY] = 0;
		}
	}

	// GAL の移動
	if (smod[GAL] == 1) {
		tim0[GAL]++;
		if ((tim0[GAL] & 0x07) == 0) {
			if (flg0[GAL] == 0) {
				xpos[GAL] -= 5;
				if (xpos[GAL] < 0+xsiz[GAL]) {
					flg0[GAL] = 1;
				}
			}
			else {
				xpos[GAL] += 5;
				if (xpos[GAL] > cxsiz-xsiz[GAL]) {
					flg0[GAL] = 0;
				}
			}
			// GAL のアニメ
			if ((tim0[GAL] & 0x08) == 0) {
				setImg(GAL, IMG_GAL0);
			}
			else {
				setImg(GAL, IMG_GAL1);
			}
		}
	}
	else if (smod[GAL] == 2) {
		scal[GAL] -= 1 / (360/20)
		zrot[GAL] += 20;
		if (zrot[GAL] >= 360) {
			smod[GAL] = 0;
		}
	}

	// UFO の移動
	if (smod[UFO] == 1) {
		tim0[UFO]++;
		if ((tim0[UFO] & 0x00) == 0) {
			if (flg0[UFO] == 0) {
				xpos[UFO] -= 1;
				if (xpos[UFO] < 0+xsiz[UFO]) {
					flg0[UFO] = 1;
				}
			}
			else {
				xpos[UFO] += 1;
				if (xpos[UFO] > cxsiz-xsiz[UFO]) {
					flg0[UFO] = 0;
				}
			}
			// UFO のアニメ
			if ((tim0[UFO] & 0x08) == 0) {
				setImg(UFO, IMG_UFO0);
			}
			else {
				setImg(UFO, IMG_UFO1);
			}
		}
	}
	else if (smod[UFO] == 2) {
		scal[UFO] -= 1 / (360/20)
		zrot[UFO] += 20;
		if (zrot[UFO] >= 360) {
			smod[UFO] = 0;
		}
	}

	// プレイヤー弾の移動
	for (var i=0; i<PWPMAX; i++) {
		if (smod[PWP+i] != 0) {
			ypos[PWP+i] -= 10;
			if (ypos[PWP+i] < 0) {
				smod[PWP+i] = 0;
			}
			// GAL ヒット検査
			if (smod[GAL] == 1) {
				var xd = Math.abs(xpos[PWP+i] - xpos[GAL]);
				var yd = Math.abs(ypos[PWP+i] - ypos[GAL]);
				if (xd < 10 && yd < 10) {
					smod[GAL] = 2;
				}
			}
			// UFO ヒット検査
			if (smod[UFO] == 1) {
				var xd = Math.abs(xpos[PWP+i] - xpos[UFO]);
				var yd = Math.abs(ypos[PWP+i] - ypos[UFO]);
				if (xd < 10 && yd < 10) {
					smod[UFO] = 2;
				}
			}
		}
	}
	
	// クリック検査
	if (click != 0) {
		click = 0;
		// プレイヤー弾の発射
		for (var i=0; i<PWPMAX; i++) {
			if (smod[PWP+i] == 0) {
				xpos[PWP+i] = xpos[PLY];
				ypos[PWP+i] = ypos[PLY]-20;
				smod[PWP+i] = 1;
				break;
			}
		}
	}
}