Javascriptゲーム04 step 2

ネズミを池の中へ落として追い出すゲーム。
マウスでネズミをポイント、クリック等するとランダムに動く。
チーズは、[Alt]+矢印キーで移動できる。 チーズを移動すると、ネズミが寄ってくる。 (Firefox用)
background
ねずみ1
ねずみ2
cheese

解説

ゲームらしくするために、チーズを導入した。チーズは、[Alt]+矢印キーで上下左右に移動可能である。チーズを移動するたびに、ネズミがチーズに近づく。チーズを使って、ネズミを池に誘い込むというゲームにした。

このために、以下の機能を追加しなければならない:

  1. [Alt]+矢印キーでチーズを上下左右に動かす。
  2. チーズが動いたとき、ネズミをチーズに近づける。
  3. ネズミがチーズを食べたときの処理
  4. チーズが池に落ちたときの処理

2のネズミをチーズに近づける処理を実装するために、ネズミがランダムに動くだけではだめである。 ネズミを指定した方向へ動かすことができるように、まずは宿題03のプログラムを書き換えるところから始めよう。

2. チーズが動いたとき、ネズミをチーズに近づける

キーボードのキーを押してチーズを動かしたときに、ネズミをチーズに近づけるために動かす関数は、function move2cheese(element, Delta)で定義している。 本来はmove_to_cheeseという名前にすべきであったが、_to_で名前が長くなりすぎるので同じ発音の2を使った。プログラミングではtoの代わりに発音が同じ2を名前に使う場合がよくある。

function move2cheese(element, Delta)の定義のなかの

	if(cheese.style.display == "none" ){
		return;
	}
	if(element.style.display == "none" ){
		return;
	}

は、チーズが非表示の時、あるいはネズミ自身が非表示のときは、何もしないで戻るということで、ネズミを動かさないという意味である。

var vec = {x: q.x - p.x, y: q.y - p.y };

は、ネズミからチーズの方向へ向かうベクトルを表わす連想配列である。

var nv = Math.sqrt(vec.x * vec.x + vec.y * vec.y);

は、このベクトルの長さで、ネズミからチーズまでの距離である。 Deltaが、ネズミのチーズ方向への移動距離である。

function KeyDownFunc(e)の定義でmove2cheese(element, Delta)を呼び出すときに、

move2cheese(nezumi1, D_nezumi/2);

として、DeltaがD_nezumi/2になるように呼び出しているので、ネズミの移動量はD_nezumiの半分になっている。