横移動するアクションゲームを作ってみます。
左右とジャンプをしてゴールを目指すゲームです。
このゲームの中にはいろんなテクニックが詰まっています。
少しずつ解説していきます。
初回はゲームとそのプログラムの全体像を紹介します。
ゲームの遊び方
「←」キー、「→」キーでネコを動かします。
「スペース」キーでネコをジャンプさせることができます。
ゴールは赤い旗のポールにタッチすることです。
土管から出てくる「人食い花」と「空飛ぶ亀」をよけてゴールを目指します。
「人食い花」と「空飛ぶ亀」にぶつかると失敗です。
スタート地点に戻ってやり直しです。
無事にゴールに到達するとゲーム終了です。
もう一度プレイした場合は、スタートを押してください。
プログラムの紹介
スプライト
ステージ一つと、スプライトを6個用意しています。
ネコの絵以外は簡単にお絵描きしています。
プログラム
大まかにどんなプログラムを作ったか解説していきます。
細かい説明やテクニックは別の記事で解説するので、「この通り真似すればいいんだなー」ぐらいに思ってください。
スプライト1
ネコの絵のスプライトを動かして、ゲームを遊ぶことにします。
大きさと、スタート位置を適当に決めます。
あたり判定を簡単にするために、足の先の色を変えておきます。
地面に触れている時と障害物にぶつかっている時の”当たり判定”を簡単に作るためです。
・障害物にぶつかったときの当たり判定で、髭がちょっと邪魔です。消してもいいかもしれません。
・頑張ってプログラムを作れば足の色を変えずに当たり判定を作ることもできます。
スタートが押されたときに、変数をリセットする初期化処理を行います。
そして、各スプライトにプログラムが開始された合図として「メッセージ1」を送ります。
メッセージではなく、各スプライトにスタートイベントを配置してもOKです。今回は初期化がきっちり終わってから他のスプライトを動かしたかったのでメッセージを使いました。
初期化処理では、ネコのスプライトをスタート位置に戻したり、変数をリセットしています。
メッセージ1(ゲームがスタートしたら)を受け取ったら、ジャンプブロックを呼び出しています。
ジャンプのプログラムが長くなるので、ブロックを使いました。しかし、今回はあまり意味がありませんでした。メッセージ部品を使ったことでブロックの役割も果たしてくれています。
ジャンプの概要を説明します。(詳細は別記事で解説するかもしれません。)
「ずっと」部品を使って、ジャンプボタン(スペースキー)が押されるのを待ち続ける処理にしています。
「ずっと」部品を使った理由はこちらの記事を参照してください。
スプライトの動きをスムーズにするためです。
ネコの足が地面(黄緑)または土管の上部(濃い灰色)にくっついている時はジャンプが可能になっています。
スペースキーが押されたら、変数「ジャンプ回数」と「y座標を〇ずつ変える」でジャンプの高さとスピードを調整しています。
左右に移動中にジャンプした時は斜めにジャンプしたいのでX座標の変更もしています。
天井などにぶつかったときはジャンプを止めたいので「黄緑に触れたらジャンプ回数を0」にすることで実現しています。
ジャンプの後の落下と、高いところから落ちるときの動きを作るために、地面または土管に足がくっ付いていないときはy座標を減らして下に移動させます。
メッセージ1(ゲームがスタートしたら)を受け取ったら、左右ブロックを呼び出しています。
まず、土管(灰色)と足場(黄緑)の側面に触れたとき、左右の移動を止めるための処理をしています。
「灰色に触れた または 白(ほぼ白に見えますが、ネコのスプライトの縁取りの色)が黄緑に触れたときで判定しています。
移動速度が0より小さい場合は左移動をしているので、右に跳ね返す処理をしています(X座標を1増やす)。
移動速度が0以上なら左に跳ね返す処理にしています。
・きっちりプログラムを作るなら、左に跳ね返す処理は「0より大きい(0<移動速度)」の条件文を使うべきです。
・スプライトの足を青くしたのはここで側面に触れたときの処理を作りたかったからです。
ジャンプをしている最中に土管に触れたときはジャンプを止める処理を作っています。
この処理があることで、土管に触れているとジャンプができません。
そのせいで少し操作が難しくなるので、このプログラムは消しても構いません。土管に触れたときのジャンプが少し変な動きになりますが。
敵にぶつかったときのプログラムです。
スプライトの動きを止めて、0.1秒待ってプログラムの開始状態に戻します。
0.1秒待つことで敵にぶつかったことをわかりやすくしています。
ゴールした時はいったんスプライトの動きを止め、0.3秒待って最終ゴール地点に移動させています。
土管
土管のスプライトの大きさと設置場所を調整します。
土管はお絵描きして作ります。
土管の上部は歩くことができるので、側面と区別するために色を分けておきます。
土管にプログラムはありません。
フラワー
人食い花(フラワー)もお絵描きして用意しておきます。
配置場所は土管に重なるように、土管より小さくなるようにします。
プログラムが開始した時のフラワーの動きをプログラムします。
土管に隠れるために「最背面」に移動させます。
後は一定周期で上下するようにプログラムしています。
もう一つは、スプライト1(ネコ)がフラワーに触れたときの判定で。
「ヒットを送る」で敵にぶつかったことをメッセージで送っています。
ポール
はた
かめ
敵のカメのスプライトです。
これもお絵描きして用意しました。
プログラムが開始したときのカメの動きをプログラムしています。
カメにスプライト1(ネコ)がぶつかったときの判定をプログラムしています。
おわりに
いかがでしたでしょうか。
細かい説明は省略していますが、仕組みは理解できたでしょうか。
割と少ないプログラムで横移動のアクションゲームが作れることがわかりました。
移動やジャンプなどいろいろなテクニックが詰まっています。
今後、このテクニック部分を別記事で解説しようと思います。
このゲームを7歳の息子にプレイさせたところ、難しくて泣いてしまいました。
市販のゲームと比べると操作感が悪いので敵の動きにタイミングを合わせるのが難しかったみたいです。
動きを工夫して、難易度を調整してみてください。
コメント