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

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

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

Processing 入門

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

 

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

これまでのプログラムには、コメントがほとんど入っていません。
パッとみて内容が分からないなら、どんどん入れていきましょう。

プログラミングスキルが高い人ほど、しっかりしたコメントを入れています。

 

 

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

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

 

ばらつきのある落下システムにする

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

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

else を使うことで、真のときと偽のとき両方の処理が書けます。
とても便利です。

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

 

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

落下タイミングがバラバラなのを確認する

 

 

当たり判定を入れよう

これからのプログラムで & キーの入力があります。
アンド(アンパサンド)記号はつぎのところにあります。
シフトキーを押しながら入力します。

アンドキーの場所

 

 

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

 

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

自機と落下オブジェの当たり判定

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

関数の中で宣言した変数は、その関数の中でのみ使えるというルールがあります。
もしこのルールがなければ、すべての変数をしっかり管理しなければ不具合が起こりやすくなります。
「この変数は以前に宣言したかな?」なんていちいち調べるのも面倒です。
その場所でのみ使うものであれば、関数内で宣言すべきです。

 

 

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

論理演算子andを使う

 

&& に注目してください。
これは論理演算子といい、左右の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軸とy軸の当たり判定部分

 

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

 

x軸の当たり判定

 

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

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