スモウルビー-バナナの得点を高く

前回では飛んでいる猫を操ってりんごをとりスコアを変更させていくところまでやりました。

まだの人がいたら下の記事を見ながらぜひ作ってみてください。

今回はリンゴだけでなく他のアイテムも表示させてみましょう。

他のアイテムを表示させることで違う得点を設定したりするとよりゲームが面白くなってきます。

それではチャレンジしてみましょう!

新しいアイテムを追加する

まずは新しいアイテムを追加しましょう。

追加するのは『スプライト』エリアの右下にあるボタンで行います。

今回はバナナを追加してみましょう。

スクラッチ-バナナを表示する

バナナが追加できたら、選択しているスプライトをりんごに変更しましょう。

りんごに書いてあるプログラムをコピーします。

コピーしたらバナナに変更しましょう。

バナナのルビータブを開きコピーしたプログラムを貼り付けましょう。

貼り付けできたら緑のはたをクリックしてみましょう。

スモウルビー-バナナも表示させる

バナナがりんごと同じように表示されるようになりましたね。

アイテムの得点を変えてみる

今のままではりんごをとってもバナナをとっても同じポイントなので少し面白みにかけますね。

バナナの得点を多くしてみましょう。

どこを変えることで多くできるかわかりますでしょうか?

バナナのプログラムにある『$score += 1』ですね。

『1』を『3』にして動かしてみましょう!

スモウルビー-バナナの得点を高く

りんごをとると1点、バナナをとると3点が増えるようにできましたね。

アイテムの表示をランダムにする

現在のままだと常にりんごとバナナが一緒に表示されていますね。

もう少し工夫をくわえてみましょう。

高得点であるバナナの表示回数を少なくしてみます。

どうすれば表示回数を少なくすることができるでしょうか?

いろんな方法がありますがこの記事では『乱数』と『割り算のあまり』の2つを使って制御してみましょう。

まずはりんごを選択して分岐を追加しましょう。

『show』を『if』で囲うように追加します。

分岐の命令は『if』ですね。

条件は乱数を使ってみます、乱数は1〜100を使います。

乱数を2で割った余りが0だったらという条件にしましょう。

if rand(1..100) % 2 == 0
end

分岐の条件ができたら条件を満たすときに表示したいので『show』命令を追加しましょう。

self.when(:flag_clicked) do
  loop do
    go_to([300, rand(-130..130)])
    if rand(1..100) % 2 == 0
      show
    end
    until x < -250
      move(-10)
      if touching?("Toucan")
        hide
        play("Chomp")
        $score += 3
      end
    end
  end
end

上記のようなプログラムができたら早速実行してみましょう。

スモウルビー-りんごがでたり出なかったり

りんごがでたりでなかったりしますね。

それではバナナにも同様のプログラムを追加してみましょう。

ただバナナは得点が高いので少し出現する回数を減らしてみましょう。

減らすにはどうすると良いでしょうか?

あまりを計算しているブロックの右の値を大きくすると良いですね。

バナナは4ぐらいにしてみましょう。

self.when(:flag_clicked) do
  loop do
    go_to([300, rand(-130..130)])
    if rand(1..100) % 4 == 0
      show
    end
    until x < -250
      move(-10)
      if touching?("Toucan")
        hide
        play("Chomp")
        $score += 3
      end
    end
  end
end

上記のようにバナナもプログラミングしたら実際に動かしてみましょう!

スモウルビー-バナナの表示を少なく

バナナが表示される回数が少なくなりましたね!

アイテムが表示され続けちゃう

実はこのままだとある不具合が発生しています。

わかりますか?

アイテムを取らない限りずっと表示され続けちゃうのです。

せっかく乱数を使って表示されるのをランダムにしたのに台無しですね。

プログラムのどこが良くないのでしょうか?

最初に表示するとなった後に隠すのは触れた時になっているところが怪しいですね。

1度表示された後は隠していないことが問題となってそうですね。

表示したいのはあまりが0になった時だけなのでその前に1度隠しておくと良さそうですね。

『loop』ブロックの一番最初に『hide』命令を入れてみましょう。

self.when(:flag_clicked) do
  loop do
    hide
    go_to([300, rand(-130..130)])
    if rand(1..100) % 2 == 0
      show
    end
    until x < -250
      move(-10)
      if touching?("Toucan")
        hide
        play("Chomp")
        $score += 1
      end
    end
  end
end

『hide』命令を追加して動かしてみるとアイテムを取らなくて表示されなくなっていますね。

ダイヤを追加してみよう!

チャレンジとしてダイヤを追加してみましょう。

ダイヤの条件はしたの通りです。

  • ダイヤは10点
  • 表示されるのは10で割った時のあまりが0のとき

バナナよりさらに出現回数が少なく表示され、高得点のアイテムという設定です。

やり方はこの記事に書かれている内容でできますのでぜひ自分で追加してみましょう!

おすすめの記事