株式会社リサイクルループ

ブログ

回収依頼お問合わせ

株式会社リサイクルループ

回収依頼

MENU

【HSPプログラミング講座#11】ボールに重力を与えてジャンプさせよう

プログラミング講座アイキャッチ

やぁ~、前回のHSP言語プログラミング講座は面白かったですね! もしも◯◯だったら◯◯の処理を実行するという if 命令。 プログラミングの基本となる変数、繰り返し処理、条件処理の使い方がわかりましたね! これを使って組み合わせることで無限に色々なことができるようになります。

なので早速、面白いことを思いつきましたよ! 今回は25行もあって、ちょっとプログラムが長いですよ! そしてちょっと複雑なので、ひとつひとつ理解してやっていきましょうね!

ボールに重力を与えて下方向に引っ張るプログラム

プログラムを見る前に、どんな設計をしたのか解説します。まずはジャンプさせるボタンと、プログラムを終了させるボタンを用意します。

つぎにボールの位置はx座標が100で、y座標が300に設定しています。y座標は0だと画面の一番上ですね。数字が大きいほど下になります。ここが数学と違うところですね。数学だと0が下ですよね。

次にボールが上方向にジャンプする速度(ジャンプ力)を20にしました。y座標なので20ずつマイナスすると上方向に移動して見えますね。

そしてこのプログラムで一番のポイントとなるのは重力です。重力は下方向に落ちる力ですね。y座標ではプラス方向です。

この設計では、ボールをジャンプさせる繰り返し処理をしていますが、処理が1回まわってくるたびにジャンプ力から重力を引き算していきます。 それではプログラムを確認してみましょう!

HSPプログラミング_ボールジャンプ01

こんな感じにプログラムを書いてみました。7行目まではわかりますよね!? ボールの位置、ジャンプ力、重力の変数を用意して数字を入れています。それからボタンを画面の左上の方に表示させています。そしてジャンプボタンを押したら10行目からのジャンプ処理に移動して、終了ボタンを押したらプログラムが終わります。

さて、ジャンプ処理ですが、11行目で無限ループを設定していますね。ボールがジャンプして着地するまで何回繰り返すかわからない(計算すればわかりますけど・・・めんどくさい)ので、20行目で、もしもボールの高さが着地場所(スタート地点のy座標300)を超えたらループを抜ける。という処理をしています。こうしておけば無限ループに設定しておけるし、最初の設定でジャンプ力と重力とかの数字を変えて、繰り返し処理の回数が変化しても対応できますよね。

13行目のpos命令ではx座標は100で固定しています。ボールは垂直にジャンプするだけなのでy座標だけ変化すればいいですよね。 14~16行目まではボールを表示して、ついでに現在のボールの高さ(y座標)と、ジャンプする力を表示しています。 だんだんジャンプする力が失われて行ってマイナスになる様子がわかると思います。

17行目の wait は説明の必要はないですね。速すぎて見えないので、わざと遅くしています。

18行目は、今現在の高さ(x座標)に、ジャンプ力を加えて、高さの変数に戻しています。ここで注意しなければならないのが、ジャンプ力を加えると行っても、ココは引き算ですよ!? わかります? 上方向に移動させるには数字を減らしていかないとダメですよ! y座標ですからね!

そして一番のポイント19行目です。「ジャンプ力」から「重力」を引いて上方向へ進もうとする力を少し奪っています。 繰り返される度に「ジャンプ力」がなくなって、そのうちマイナスになって下に落ちていく力に変わっていきますよ。

20行目は先ほど説明した通り、ボールの位置がスタート地点より下がろうとしたらループを抜けて停止します。

HSPプログラミング_ボールジャンプ02

これができれば、マリオみたいにジャンプできるじゃないですかぁ~ こんな風になっていたんですね。なんだかプログラムを書いてたら楽しくなってきちゃいました! 今度は少しだけ変更を加えてジャンプする高さをランダムにしてみたいと思います。 広辞苑を・・いや説明書を調べてみると乱数を発生させる命令がありました。乱数とはランダムのこと。つまりなんの数字かわからないということです。まずはプログラムをご覧ください。

HSPプログラミング_ボールジャンプ03

3行目だけを変更しました。「ジャンプ力」変数に40未満の数字が入ってきます。具体的には0~39までの数字です。rnd(100)と入れた場合は0から99までの数字が入ります。これでジャンプボタンを押すたびに、毎回ジャンプする力が変わります。面白いですね! ぜひやってみてください。