今までのプログラムに敵を表示して、敵に弾を当てるとその敵はやられます。殆どインベーダーゲームみたいですね。敵もちゃんとアニメしてたり、やられたら縮小しながら消えていったり、かなりしっかりしたプログラム内容です。
ちなみにこのプログラムは改造して当サイトトップページの右側ウィジットでも使っています。サクっとこんな使い方しちゃうと「何だコレ?」って注目を浴びて面白いかもです。何処を改造したかって?それは…女の子とUFOを倒した後に判ります♡
実行すると…
プログラム内容は、これだっ!
// // << ex03.js >> // クソゲーGO! // 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; } } } }
- 投稿タグ
- HTML5作る