月面着陸(万有引力・ケプラーの法則) 第二回

~ゲーム 月面着陸 の作成~

1.企画

万有引力をテーマとしたゲームを作成するにあたって
どのようなシチュエーション、条件をつけるかを考えます……

  • 月周回軌道に入った着陸船を操作
  • キー入力に反応して逆噴射、軌道調整を行う
  • 月面に軟着陸するとゲームクリア

今回は 以上のような条件でゲームを作成することにしました

▲TOP

2.HTML作成

img

船や宇宙空間の画像のほかにも、演出用の炎の画像等を貼りこんでいきますが
最終的にはスタート画面を残して隠してしまいます

▲TOP

3.プログラム解説

基本的な処理は 前章の万有引力シミュレータと同じなので
追加された処理のみ解説します

(1)キーボード入力処理

function main()
{
    ...
    
    $(window).keydown( OnKeyDown );

    ...
};
	    

ウィンドウ全体の keydownイベントに OnKeyDown 関数を関連付けています
ウィンドウにフォーカスがある状態で、キーが押されると OnKeyDown 関数が呼び出されます

function OnKeyDown( event )
{
    switch( event.keyCode )
    {
	case 65:				//  A
	    Thrust(Math.PI);
	    break;
	case 68:				//  D
	    Thrust(0);
	    break;
	case 83:				//  S
	    Thrust(Math.PI / 2);
	    break;
	case 87:				//  W
	    Thrust(Math.PI * 3 / 2);
	    break;
    }
}	    

イベントハンドラによって呼び出された OnKeyDown関数には 引数として event オブジェクトが渡されます
eventオブジェクトのkeyCodeプロパティを調べると、どのキーがが押されたかを知ることができます
この場合、WASDの4つのキーに反応して、該当方向のスラスターを作動させ、軌道修正をしています

(2)着地判定

function CheckLand()
{
    if( Ship.GetR() > R_MIN )	return;
    
    Ship.land = true;

    if( Ship.GetV() > V_MAX )
    {
	Bomb();
	Failed();
	return;
    }

    if( Ship.play )
    {
	Clear();
	return;
    }
}		
	    

着陸船が規定の半径より内側に入ると着陸処理が始まります
まず、Ship.land フラグをオンにします このフラグで船が着地済み可動化判定しています

着陸船の速度が規定値より上だった場合 船が爆発する演出を入れて ゲームオーバー画面を表示します

ゲーム続行中かつ速度が規定値以下だった場合は、クリア画面を表示します

▲TOP

4.動作確認

ゲーム動作確認

img

WASDのキー操作で、4方向のスラスターを作動させ、軌道調整します

img

調整に失敗し、高速で月面に接触するとゲームオーバー
また、時間経過とともに減ってゆく空気や スラスター作動のたびに消費する噴射剤が0になってもゲームオーバーです

img

うまく月面に軟着陸するとスコア表示
空気、噴射剤の残量は多いほど
着地時の速度は小さいほど高得点になります

▲TOP