▶ 実 行
▶ 実行
クリア
敵を撃つっぽいゲーム(Ver1.2)
by てぃふと@うぇいく
画面横は描画中キャンバス["width"] 画面縦は描画中キャンバス["height"] 基地サイズは{幅:画面横×0.4, 高:4} 弾サイズは{半径:2} 砲サイズは{長:10, 太:4, 半径:5} 敵サイズは{サイズ:10} 敵文字は「👾」 爆発文字は「💥」 基地Xは画面横÷2-基地サイズ["幅"]÷2 砲台は[] 砲台に{X:画面横÷2, Y:画面縦-砲サイズ["半径"], 向:0, 弾速:1.5}を配列追加 砲台に{X:基地X+砲サイズ["半径"], Y:画面縦-砲サイズ["半径"], 向:0, 弾速:1.5}を配列追加 砲台に{X:基地X+基地サイズ["幅"]-砲サイズ["半径"], Y:画面縦-砲サイズ["半径"], 向:0, 弾速:1.5}を配列追加 向き補正は-90 描画中はオン スコアは0 エンカウンターは0 ゲームオーバーフラグはオフ 自弾は[] 敵群は[] 爆発中は[] 現砲は0 描画中キャンバスのマウス移動した時には 砲台数は砲台の要素数 もし、砲台数>0ならば Iを1から砲台数まで繰り返す 砲は砲台[I-1] 砲["向"]は砲から[マウスX,マウスY]へ自分向き取得 ここまで ここまで ここまで 描画中キャンバスのマウス押した時には 砲台数は砲台の要素数 もし、砲台数>0ならば Iを1から砲台数まで繰り返す 砲は砲台[I-1] 砲["向"]は砲から[マウスX,マウスY]へ自分向き取得 向きはDEG2RAD(砲["向"]+向き補正) 弾は{ 向:砲["向"], X:砲["X"]+COS(向き)×砲サイズ["長"], Y:砲["Y"]+SIN(向き)×砲サイズ["長"], DX:COS(向き)×砲["弾速"], DY:SIN(向き)×砲["弾速"] } 自弾に弾を配列追加 ここまで ここまで ここまで 「描画フレーム」を画面更新時実行 ●(砲からXYへ)自分向き取得とは DXは砲["X"]-XY[0] DYは砲["Y"]-XY[1] 向きはATAN2(DX, DY) (RAD2DEG(向き)+向き補正)を戻す ここまで ●弾進行とは 弾数は自弾の要素数 もし、弾数>0ならば、 Iを弾数から1まで繰り返す 弾は自弾[I-1] 弾["X"]は弾["X"]+弾["DX"] 弾["Y"]は弾["Y"]+弾["DY"] もし、弾["X"]<0||弾["X"]>画面横||弾["Y"]<0||弾["Y"]>画面縦ならば、 自弾のI-1を配列切取 ここまで ここまで ここまで ここまで ●敵出現とは 敵Xは(画面横×0.2+((画面横×0.6)の乱数)) 敵Yは敵サイズ["サイズ"] 敵向きは(50の乱数)+(50の乱数)-50 もし、敵向き<0ならば、 敵向きは敵向き-(90+30) 違えば、 敵向きは敵向き+(90+30) ここまで 速さは0.4+(20の乱数)÷10+スコア÷500 向きはDEG2RAD(敵向き+向き補正) 敵は{ X:敵X, Y:敵Y, 向:敵向き, 速:速さ, DX:COS(向き)×速さ, DY:SIN(向き)×速さ } 敵群に敵を配列追加 ここまで ●ランダムエンカウンターとは エンカウンターはエンカウンター+1 もし、エンカウンター>10ならば、 敵数は敵群の要素数 もし、(敵数の乱数)<(スコア÷100)+2ならば、 敵出現 ここまで エンカウンターは0 ここまで ここまで ●敵進行とは 敵数は敵群の要素数 もし、敵数>0ならば、 Iを敵数から1まで繰り返す 敵は敵群[I-1] 敵["X"]は敵["X"]+敵["DX"] 敵["Y"]は敵["Y"]+敵["DY"] もし、敵["X"]<0||敵["X"]+敵サイズ["サイズ"]>画面横ならば、 敵["向"]は0-敵["向"] 敵["DX"]は0-敵["DX"] 敵["X"]は敵["X"]+敵["DX"] ここまで もし、敵["Y"]>画面縦-基地サイズ["高"]ならば、 もし、敵["X"]+敵サイズ["サイズ"]÷2>基地X&&敵["X"]+敵サイズ["サイズ"]÷2<基地X+基地サイズ["幅"]ならば、 ゲームオーバーフラグはオン ここまで ここまで もし、敵["Y"]<0||敵["Y"]>画面縦ならば、 敵群のI-1を配列切取 ここまで ここまで ここまで ここまで ●爆発処理とは 爆発数は爆発中の要素数 もし、爆発数>0ならば、 Iを爆発数から1まで繰り返す 爆発は爆発中[I-1] 爆発["カウンタ"]は爆発["カウンタ"]+1 もし、爆発["カウンタ"]>10ならば、 爆発中のI-1を配列切取 ここまで ここまで ここまで ここまで ●命中判定処理とは 弾数は自弾の要素数 敵数は敵群の要素数 もし、弾数×敵数が0ならば、 戻る ここまで Tを弾数から1まで繰り返す 弾は自弾[T-1] Eを敵数から1まで繰り返す 敵は敵群[E-1] もし、弾["X"]-弾サイズ["半径"]<敵["X"]+敵サイズ["サイズ"]&&弾["X"]+弾サイズ["半径"]>敵["X"]ならば、 もし、弾["Y"]-弾サイズ["半径"]<敵["Y"]&&弾["Y"]+弾サイズ["半径"]>敵["Y"]-敵サイズ["サイズ"]ならば、 敵群のE-1を配列切取 自弾のT-1を配列切取 スコアはスコア+10 爆発は{X:敵["X"], Y:敵["Y"], カウンタ: 0} 爆発中に爆発を配列追加 敵数は敵群の要素数 抜ける ここまで ここまで ここまで もし、敵数が0ならば、 抜ける ここまで ここまで ここまで ●画面描画とは [0,0,画面横,画面縦]の描画クリア 爆発数は爆発中の要素数 もし、爆発数>0ならば、 「{敵サイズ["サイズ"]}px sans- serif」に描画フォント設定 Iを1から爆発数まで繰り返す 爆発は爆発中[I-1] [爆発["X"], 爆発["Y"]]に爆発文字を文字描画 ここまで ここまで 敵数は敵群の要素数 もし、敵数>0ならば、 「{敵サイズ["サイズ"]}px sans- serif」に描画フォント設定 Iを1から敵数まで繰り返す 敵は敵群[I-1] [敵["X"], 敵["Y"]]に敵文字を文字描画 ここまで ここまで 弾数は自弾の要素数 もし、弾数>0ならば、 1に線太さ設定 黒色に線色設定 白色に塗り色設定 Iを1から弾数まで繰り返す 弾は自弾[I-1] [弾["X"], 弾["Y"]]へ弾サイズ["半径"]の円描画。 ここまで ここまで 黒色に線色設定 [0,0]から[0,画面縦+2]まで線描画 [画面横-1, 0]から[画面横-1, 画面縦+2]まで線描画 白色に塗り色設定 砲台数は砲台の要素数 もし、砲台数>0ならば Iを1から砲台数まで繰り返す 砲は砲台[I-1] 砲サイズ["太"]に線太さ設定 向きはDEG2RAD(砲["向"]+向き補正) [砲["X"], 砲["Y"]]から[砲["X"]+COS(向き)*砲サイズ["長"], 砲["Y"]+SIN(向き)*砲サイズ["長"]]へ線描画。 1に線太さ設定 白色に塗り色設定 [砲["X"], 砲["Y"]]へ砲サイズ["半径"]の円描画。 ここまで ここまで [基地X, 画面縦-基地サイズ["高"], 基地サイズ["幅"], 基地サイズ["高"]+2]の四角描画 黒色に塗り色設定 「12px sans- serif」に描画フォント設定 [画面横÷2-20, 20]に「スコア:{スコア}」を文字描画 ここまで ●ゲーム終とは 描画中はオフ 描画中キャンバスのマウス移動した時には ここまで 描画中キャンバスのマウス押した時には ここまで 黒色に線色設定 黒色に塗り色設定 2に線太さ設定 「24px sans- serif」に描画フォント設定 [画面横÷2-20, 画面縦÷2]に「おわり」を文字描画 ここまで ●描画フレームとは 爆発処理 敵進行 弾進行 ランダムエンカウンター 画面描画 命中判定処理 もし、ゲームオーバーフラグならば、 ゲーム終わり ここまで もし、描画中ならば、 「描画フレーム」を画面更新時実行 ここまで ここまで ●(xとyの)ATAN2とは パラメータは[y, x] 「Math.atan2」をパラメータでJS関数実行を戻す ここまで
2fbfd4efb7468f801b9a4fdf7ca57b44
371