スクラッチ

【スクラッチ】時間が経つと敵が増えて難しくしたい、というリクエストを叶えるために

ニンジャ
点数が増えたら敵を増やして、難しくしたいんです。

子ども向け無料プログラミング体験場『CoderDojo熊本』で頂いたリクエスト。

アオキ
確かに、ずっと同じじゃおもしろくないもんね、
アオキ
時間が経つほどに敵を増やす方法か・・

例えばテトリスなら、時間が経つほどにブロックの落ちるスピードが早くなるし、

インベーダーなら敵の動きが早くなるし、

シューティングゲームなら敵の数や弾の数が増えていくし。

時間なりスコアなりが増えていくほど難しくする、というリクエストはあるよなぁと。

『CoderDojo熊本』に参加されていたメンターさんにも相談しつつ、

  • 変数を使う
  • 割り算を使う
  • 繰り上げ/繰り下げを使う

などを組み合わせて実現できたので、記事に残しておくことにしました。

Sponsored link

スクラッチで時間が経つほど敵を増やす方法 はじめの一歩

例えば、

  • 1秒ごとに1点ずつ点数が増えて、
  • 10秒になったら敵が1匹増えて、
  • 20秒になったらまた敵が1匹増えて・・・

というケースで考えてみるに、

  • 1秒ごとに1点ずつ点数が増えるという変数
  • 敵の数を数えるための変数

最低2つの変数は必要なのかなと思います。

2つの変数を使いつつ、メンターの方とも相談し、いくつかの方法を考えてみました。

スクラッチで時間が経つほど敵を増やす方法その1 〜より大きい 〜より小さい

1つ目の方法はわかりやすさ重視の作り方です。

scoreという変数と、
rank という変数があったとして、

scoreが9秒より多く、 19未満なら rankを1にして。
scoreが19秒より多く、29未満なら rankを2にして。

という形で組んでいけば、
10秒ごとにrankが1つずつ増えていくなと。

わかりやすいといえばわかりやすいけれど、

アオキ
例えば100秒とか200秒まで数えていくとしたら、
アオキ
その分行数が増えていくので大変になっちゃうよなぁ

とも思ったり。

Sponsored link

スクラッチで時間が経つほど敵を増やす方法その2 割り算・繰り下げ

2つ目は割り算を使った方法。

10秒ごとに敵が増えるので、

秒数を10で割ったらいいんじゃないかという発想です。

例えば、

  • 10秒 割る 10 = 1 あまり 0
  • 11秒 割る 10 = 1 あまり 1
  • 15秒 割る 10 = 1 あまり 5
  • 21秒 割る 10 = 2 あまり 0

といった具合ですね。

アオキ
割り算した時の答えを『商(しょう)』といいますね、懐かしい・・
アオキ
割り算した時の答え『商(しょう)』を変数にすればいいのかな?

と思い、子ども向け無料プログラミング体験場『CoderDojo熊本』開催中にいろいろやってみるもなかなかうまくいかず。

メンター岩元さん
割り算すると小数になりますね・・繰り下げがあるといいんだけど・・

どうやら『スクラッチ』の仕様か、

単純に割っただけだと『商(しょう}』が小数点になってしまうしょう。

『CoderDojo熊本』終了後、家に帰ってカレーを食べていたらFacebookメッセージが。

メンター岩元さん
帰ってきて確認したら、切り下げがありました・・・割って切り下げるが正解でした。

アオキ
さすがはプロプログラマーのメンター岩元さん、ありがたやありがたや。

というわけで、割り算パターンがこちら。

10で割って、『商(しょう)』の小数点を切り下げて、

  • 『商(しょう)』が1ならrankを1に、
  • 『商(しょう)』が2ならrankを2に、
アオキ
うーん、これでも200秒とかなら行数増えちゃうよね・・

と思い、『CoderDojo熊本』メンター専用Facebookグループにて相談してみることに。

スクラッチで時間が経つほど敵を増やす方法その3 割り算・繰り上げ

しばらくしてメンター岩元さんより連絡きまして。

メンター岩元さん
私も、作ってみました。
メンター岩元さん
いろいろ調整してみたら、切り下げでなく切り上げの方が読みやすくなりました。
メンター岩元さん
カウンタの代わりにタイマーを使うとうまく動作しない事も考慮して、
メンター岩元さん
等号でなく不等号で判定するようにしました。
メンター岩元さん
この書き方であれば複数のタイミングを持つループも書けるはずです。
メンター岩元さん
それでも理解が難しい式なので、出来ればもう少し改善したいです。

そのコードがこちら。

な、なるほど・・すごいっ!

実際に動くコードがこちら。

ねこ分身

変数を2つ用意するというのは変わらず、

  • カウント・・秒数
  • ねこの数・・その名の通りねこの数

ねこの数 < カウント / 10 の切り上げ

という条件式を使ってうまく実現されていました。

アオキ
これなら200秒でも300秒でも短いコード量ですみますね!
アオキ
僕一人ではここまで考えられなかったかも。。ありがたやありがたや。

スクラッチで時間が経つほど敵を増やす方法その4 割り算で1未満とする

2019/3/17 追記です。

この記事を書いてから約1ヶ月後、CoderDojo熊本メンターの方より別案をいただきました。

メンター渡邊さん
今更ではありますが、「((カウント)を(10)で割った余り)=0」ならクローンを作る、が小学生にもわかりやすいかな〜と。(=0がうまく動作しない場合は、1未満とするか、少数以下切り下げか)

さっそく試してみると、 <1 であっさり動きました。

アオキ
これが一番わかりやすいかも・・!
Sponsored link

おまけ スクラッチで時間が経つほどキャラを大きくする

おまけですが、

以前見つけた『Rimmed』という弾を避けるシューティングゲームでは、

時間が経つにつれて自分自身が大きくなるという方法をとっていました。

自分自身が大きくなるというコードはこちら。

scoreという変数を使いつつ、割り算でちょっとずつ大きくしているんですね。

変数が一つならこの形でいいんだろうなぁと。

アオキ
いやぁ、なかなか頭使うわぁ〜

Rimmed

スクラッチで時間が経つほど敵を増やす方法を考えてみて

ニンジャ
点数が増えたら敵を増やして、難しくしたいんです。

という要望をうけ、考えてみると、

  • 2つの変数
  • 割り算
  • 繰り上げ/繰り下げ

なんてことをうまく組み合わせてつくるという過程が、
簡単なようで最初はなかなか思いつかず、
とてもいい頭の体操になったなと思います。

答えは一つとは限らないので、たくさんの方法をいろいろと試していけたらなぁと。

これからも子ども向け無料プログラミング体験場『CoderDojo熊本』では、

たくさんの要望が出てくると思うので、

僕たちメンターとしても、しっかりと引き出しを増やして、どんな要望にも応えられるようにししたいなと思います。

アオキ
『CoderDojo熊本』参加者どしどし募集中です、お気軽に起こしくださいませ〜

CoderDojo熊本 参加者募集中!

『スクラッチ』ではこんな記事も読まれています。

1. 【スクラッチ】でシューティングゲームのかんたんなつくり方

2. 【スクラッチ】ジャンプをする方法〜3ステップでジャンプできるようになる〜

3. 【スクラッチ】角度や回転を使う方法【動画】【初心者向け】

4. 【スクラッチ】で花火をつくる方法【動画あり】【初心者向け】

5. 【スクラッチ】シューティングで敵の弾をつくる方法【画像たっぷり】

6. 【スクラッチ】でセーブする方法を考えてみる〜基本的な考え方〜

7. 【スクラッチ】でマリオ風の横スクロールアクションゲームを参考にいいとこ取りしてみる

8. スクラッチ(scratch)とマインクラフト(minecraft)を連携させて子ども向けプログラミングのネタを増やしてみた

9. 【スクラッチ】時間が経つと敵が増えて難しくしたい、というリクエストを叶えるために

10. 【スクラッチ】で【三角関数】の使い方をわかりやすくまとめてみた

↓↓ スクラッチのその先へ ↓↓

1. パソコンのキーボード練習の4つのステップをまとめてみた

2. プログラムで数学も身につく 一石四鳥なクリエイティブコーディング

3. 【三角関数】の使い方〜わかりやすさ重視でまとめてみた【動画あり】

アオキ
ツイッターでも記事ネタ含めちょろちょろ書いていくので、よろしければぜひフォローお願いしますm(_ _ )m

アオキのツイッターアカウント


関連記事一覧 (一部広告あり)

コメント

  1. この記事へのコメントはありません。

  1. この記事へのトラックバックはありません。

CAPTCHA


最近の記事

アーカイブ

  1. 生成AI

    Dify講座をリリースしました【非エンジニア向け】
  2. オンライン教材

    【ChatGPT】エンジニア編をリリースしました
  3. オンライン教材

    【AWS】【初心者向け】インフラの基礎からわかる講座をリリースしました【Udem…
  4. オンライン教材

    【React】初心者向け講座をリリースしました【MUI】【Udemy】
  5. オンライン教材

    ChatGPTをビジネス活用する講座をリリースしました【Udemy】
PAGE TOP
Ads Blocker Image Powered by Code Help Pro

広告ブロックを摘出しました!!

ブラウザ拡張を使用して広告をブロックしていることが摘出されました。

ブラウザの広告ブロッカーの機能を無効にするか、
当サイトのドメインをホワイトリストに追加し、「更新」をクリックして下さい。

あなたが広告をブロックする権利があるように、
当方も広告をブロックしている人にコンテンツを提供しない権利と自由があります。

Powered By
100% Free SEO Tools - Tool Kits PRO