プログラム的な話その1 |
突然ですが連想配列って超便利ですよ? という話から。まずは下のコードをご覧ください。 |
switch(i){ case 0:f0();break; case 1:f1();break; case 2:f2();break; } |
これを連想配列を使うと |
var t={0:f0,1:f1,2:f2}; if(t[i]) t[i](); |
実際はちょっと違う感じで使いましたが、これはステージを作るのにすごく役に立ちます。 tはあらかじめ定義しておいたほうがいいです。 |
プログラム的な話その2 |
メニュー画面かなり頑張りました(悪い意味で)。 私は頭が悪かったので、メニュー画面全てを管理する関数を作ってしまいました。 これは悪いことではないのですが、本当に全てをその関数でやっていたのです。 場合分けの嵐。柔軟性の欠如。最悪です。 「メニュー」というクラスを作れば良かったのですが、なんかよくわからなかったのです。 |
その3 |
functionの入れ子はめっちゃすごい。というお話。 論ずるよりも見るが早し(嘘。以下は実際に使ったコード(を少し編集したもの)です。 |
var f=function(s,w){ var e=CrtElm('img'); e.src=s+'.gif'; return function(){ var t=CrtElm('img'); t.src=e.src; var s=t.style; s.position='absolute'; s.width=s.height=w+'px'; return t }; }; var ImageCol={ weeky:f('weeky',60), gulf:f('gulf',60), anty:f('anty',60), skala:f('skala',60), epsy:f('epsy',60), /*中略*/ peshiwoka:f('peshiwoka',60) }; //画像を呼び出すときはImageCol.weeky()などとします。 |
CrtElmというのはdocument.createElementと同じです。 最も注目すべきは、関数fの中でreturnされている無名関数の中で、eとwが使えるということです。 つまり関数の中には変数を保存できる(嘘かも)。 この事実は有用すぎてやばいです。使いまくりです。 |
No.15について1 |
総制作時間の6分の1ほどを占める時間でつくったのがNo.15「STG+」です。 ここではそのシステムを簡単に(長々と)。 |
・HPではなくLifeが両者にあります。初期値は3(最大値)です。 ・APがやっぱりあります。このゲームらしく。 ・チャージがあります。本編のEXPと同じタイミングで増えます。 これが満タンのときにボムが撃てます。 ・ボムがあります。ボムを撃つと、自分の画面の敵・弾が全て消えます。 また、Lifeが1回復、APが全回復し、チャージが0になります。 ・ボムLvがあります。ボムを撃ったとき、相手の画面にこれに応じたボスが出ます。 ダメージを受けると1減り、ボムを撃つとLifeに応じて上昇します。 最小値は0、最大値は5です。 ・似非喰らいボムがあります。 ゲームオーバーの判定は、ボム発動よりも後に行われます。 従って、Lifeが0になったフレーム(カットイン終了時)にもボムが撃てます。 ・自然発生弾の出る範囲、速さ、弾の大きさは変化します。 範囲と大きさは後述、速さは時間とLifeで決定します。 ・弾送りがあります。チャージが満タンのときに敵を倒すと相手画面に弾を送ります。 このときに相手の自然発生弾の出現範囲が少し広くなります。 これが限界に達すると弾が大きくなります(主にこれで奴を倒す)。 ・Lv0のボムを撃つと、相手の自然発生弾が割と強くなります(序盤は多用)。 ・ダメージを受けると、チャージが大きく回復し、APも全回復、また、 自分の自然発生弾の大きさもリセットされ、範囲はわずかに縮まります。 |
No.15について2 |
毎回恒例の、例外処理なしで別ゲームを実装する酔狂です。 個人的には本編よりもシステムがいい感じになっている気がする… CAUTION!とかDAMAGE!とか動きを止めて表示するのは気持ちが良いですね。 あれはステージを運用する関数の中で画面管理、敵や弾の動きを実行してるわけです。 ゲームオーバーのときとクリアのとき、自機の動きくらいしか基本システムを使ってないのです。 しかしあれですね、相手のAI(人工無能)を作るのは面白い。 適当なAIで実装していますが、本当はもっと凝ったものも作っていました。 とはいえ、あくまでNo.15であって対戦ゲームではないので、 奴を倒すためのシステムが出来上がってしまいました。 それはそれで問題なのかも。きっと対人戦は楽しいんだろうな。 |
難易度について考察 |
難易度って何なのかと問うてみます。 あまり簡単だとつまらない。難しすぎても微妙。 だから中くらいがちょうどいい。 そんなことを考えるのなら難易度に意味などありません。 |
つまるところ、そのゲームをどうしたいか、に尽きると思います。 ここは不条理であるべき、とか、つまらないのは仕様、とか。 ゲームデザインから出発する必要があるのです。 ただ、私は個人的に「激しくて避けれる弾幕」は素敵だと思います。 |
エンディングとか、デモプレイとか、リプレイ機能とか、余計ですよ、ね? |
戻る top |