初心者のためのゲームプログラミング入門

プログラミングとゲームの杜

初心者のためのプログラミング入門 & ゲームプログラムの作り方入門

Processing 入門

11.みどりを救え3 当たり判定

 

今回は [ みどりを救え2 配列と関数の引数 ] の続きです。

今までのプログラムには、ほとんどコメントが入っていません。
パッとみて内容が分からないようであれば、コメントをどんどん入れていきましょう。
プログラミングスキルが高い人ほど、しっかりしたコメントを入れています。

 

 

落下タイミングを変更しよう

落下するタイミングが変わるような仕組みを入れます。
オブジェクトごとに待ち時間を設定し、
その時間がなくなるまで移動しないようにするだけです。

 

落下タイミングを変更する

 

47行目から51行目までの条件文 if else は初めて使いますね。

if ( 条件式 ) {
....条件式が真のとき、こちらが実行される
} else {
....偽のとき、こちらが実行される
}

1つの条件式で処理を分岐させることができます。
if 文はプログラミングの中で利用回数の多い命令です。

60行目の random ( 60, 240 ) は、60以上240未満の数を発生させます。
発生させた数を整数化して待機時間としています。
ちなみに、この待機時間の長さは適当に決めました。
実際に動かし、時間が短いと「まとまって落ちてくるなぁ」とか
時間が長めだと「間が持たないなぁ」とか思いながら調整しました。

 

 

実行してみましょう。
なんかゲームっぽくなってきましたね。

 

落下タイミングを変える

 

 

当たり判定を入れよう

自機と落下オブジェクトの当たり判定を入れます。
当たり判定とは、2つのものが重なったかを調べることです。
アクションやシューティングのゲームでは、当たり前に使われている技術です。
今回使う方法は、一番シンプルでもっとも使われているやり方です。

当たり判定用の関数 hitCheck () を追加します。

 

当たり判定を入れる

 

64行目で変数の宣言をしています。
今までプログラムの先頭で宣言していたのに、なぜここで宣言しているのでしょうか。
それは、この変数はこの関数の中だけでしか使わないからです。

関数の中で宣言した変数は、その関数の中でしか使えないというルールがあります。
もしこのルールがなければ、沢山の関数を作ったとき
他の関数で同じ名前の変数を使っていないか気にしながら制作することなり
大変面倒です。
変数を宣言する時には、このことを意識するようにしましょう。

 

 

67と68行目を見てください。
2行になっていますが、1つの if 文で作られた1つの命令なのです。

論理演算子について

 

&& に注目してください。
これは論理演算子といい、左右の2つの式が真のときだけ真の結果を返します。
例えば次のようなプログラムだったら

if ( (x > 5) && (x < 10) ){
...println("この数は5より大きく、10よりも小さいです");
}

x = 4 のとき、メッセージは表示されない
x = 6 のとき、表示される
x = 10 のとき、 表示されない
というように左右両方の条件式が真にならないと、真の結果を返しません。

67,68行目は、4つの条件式を3つの&&でつないでいます。
つまり、4つの式すべてが真のときだけ、{} 内の処理が行われます。

 

 

さて、当たり判定の仕組みはあとで説明します。
とりあえず実行して、自機と落下オブジェクトが接触したら
オブジェクトが上に戻るか確認してみましょう。

 

当たり判定を入れよう

 

 

当たり判定の仕組み

当たり判定の仕組みを解説します。
今回は座標上の重なりを調べています。
67行目がx座標、68行目がy座標です。

 

重なり判定

 

 

x座標のみ注目してみましょう。
実は3つのパターンしかありません。
自機と重なっている、自機より左にある、自機より右にある
の3つです。
重なっている時だけ、2つの条件式が真となります。

 

当たり判定の仕組み

 

y座標も同じ方法で上下の重なりを調べています。
そして、xとy座標の4つの式がすべて真なら重なっていると言えるのです。

これから何度も同じようなプログラムを組むことになると思います。
もし今、分からなくても大丈夫ですよ。