スクリーンショット_2018-11-07_23

Scratchでポケモンぽいゲームを作る制作過程 #5

今回はPachiMon-5の内容を解説します。

PachiMon-5でいよいよ本格的にバトルシステムっぽくなってきます。攻撃するとHPが減るようにしたり、敵モンスター(enm)が自動で攻撃してくるようにします。

PachiMon-4からの主な追加要素は以下の通りです。

・攻撃を受けたらHPbarが減っていくようにする
・残りHPに応じてHPbarの表示を変える
・mpmの攻撃が終わったら、enmが自動で攻撃してくるようにする

*前回までは敵キャラをemp(EnemyPachiMon)としていましたが、今回からenm(Enemy)にします。

今回は少し複雑なので、今まで以上に実物を操作しながら確認しましょう。


攻撃を受けたらHPbarが減っていくようにする

攻撃を受けた時にダメージを計算する部分は「damage-culculation」で行なっています。この時点では単純にmpm-attack/enm-attackにしています。今後、どんなパラメータでも納得いくダメージを計算できるようにしていく予定です。

HPを減らすのは演算ブロックで行なっています。「mpm-hpを<mpm-hp>-<mpm-damage>にする」という部分ですね。

これで数値上はHPが減りますが見た目は変わってないので次は見た目をいじります。


残りHPに応じてHPbarの表示を変える

画像2枚目はスプライト「mpm-HP-Bar」のスクリプトです。この部分でダメージを受けるとHPbarが減っていく部分を実装しています。


まずはコスチュームをMaxHPに対する残りHPの割合に応じて1%刻みで用意します。残りHP0%〜100%までの101パターン用意するのはほぼコピペとはいえとても面倒でした(笑)。しかしこれによってポケモンぽいHPの減り方が実現できたので良しとしましょう。

あとはスクリプトでMaxHPに対する残りHPの割合を計算し、それに応じたコスチュームまで一つずつ変えていくだけです。

ダメージが計算上0よりは大きいけど1未満になる場合はダメージを1としてコスチュームを1つ(1%分)だけ変えるようにしてあります。また、ダメージがMaxHpの50%より大きい時はノータイムでループ部分を繰り返し、HPbarが速く減っていくようにしてあります。一方、ダメージがMaxHpの50%以下の場合はコスチュームを変えてから0.5秒待たせることでHPbarがゆっくり減っていくようにしています。


mpmの攻撃が終わったら、enmが自動で攻撃してくるようにする

ポケモンの戦闘はいわゆるターン制と呼ばれるやつで、一方が行動し終わったらもう一方が行動するタイプです。

上記画像のスプライト「mpm-HP-bar」のスクリプトに「turn-end?」というのがありますが、ここでその判定を行なっています。

具体的には上記のようになっています。1枚目はスプライト「MyPachiMon」のスクリプト、2枚目はスプライト「mpm-HP-bar」のスクリプトです。

現時点ではmpmが先に行動してそのあとでenmが行動していますが、将来的にはspeedに応じて行動順を決めたいです。どちらが先に行動するかはその時によって異なるのでnumber-of-actions-in-a-turnという変数を用意して、1ターンの間の行動回数をカウントしそれに応じて送るスクリプトメッセージを変えました。変数名がいまいちなので今後変更するかもしれません。

number-of-actions-in-a-turnは初期値で0にしておいて、mpmかenmがの行動開始時に1増やすようにします。HPを減らすスクリプトの最後に「turn-end?」でターン終了なのかどうかの判定をします。number-of-actions-in-a-turn=1、つまり先攻の場合は「mpm-attack-end」と「display-enm-turn-message」というスクリプトメッセージを送っています。このメッセージをenm側で受け取ってenmの行動を開始します。逆も同じです。


この時点ではmpmが先攻で二回攻撃するとenmのHPが0になり、倒したようなエフェクトがかかるようになっています(下記画像参照)。


また、「FIGHT」などのコマンドボタンがクリックしにくかったので枠線だけ(内側は透明)のスプライトを追加してクリックしやすくしました(下記画像参照)。


今回はここまでですね。徐々に難しくなってきました。次回はバトルで使えるスキルを増やします。

初めましてヒロです。勉強プロデューサー/コーチ:Lv50。無人島:Lv2。サバイバル:Lv2。YouTuber:Lv1。ブログ:Lv3。Twitter:Lv5。Note:Lv2。Lvは全て自称です。