Scratchでプログラミング

誰かしらに何気ない気づきを!

Scratchで野球ゲーム (Part 1) をつくろう!

f:id:kobayashinitya:20211224160438p:plain

今回は、野球ゲームPart 1をつくっていきます。

たぶん、中の人の気分が向いたらPart 2も公開します。

みんなはバッター!

自分のタイミングで(スペースキーを押したら)ボールを打つゲーム!

ピッチャーは緑のはたを押してから3秒後に発射。

キャッチャーがボールを受け取ったら「アウト」終了で、

みんなバッターが打ったら「ヒット!」「ファール」とかですかね?

イメージはこんな感じ↓

https://scratch.mit.edu/projects/620967547

今回習う単元は、

  • コスチューム変更(バッターとピッチャー)
  • 〇〇秒で座標へ行く(ボールを投げる)
  • メッセージ機能
  • 変数=0まで繰り返す
  • ずっと(スプライト)へいく(キャッチャーとピッチャーを同じ位置にする)

さっそくつくろう!

バッターとボール、ピッチャーとキャッチャー、そして背景を選ぼう

f:id:kobayashinitya:20211213232323p:plain

お決まりのねこちゃん登場。削除して、バッターとボール、ピッチャーとキャッチャーを選ぼう!

f:id:kobayashinitya:20211213232427p:plain

f:id:kobayashinitya:20211227142129p:plain

今度は、背景を選びまっせー!

f:id:kobayashinitya:20211225231802p:plain

うん!いい感じ!次に進もう!

 

バッターが打つコードを組み立てよう

野球はバッターがバットを持って打つ動作が必ずあるので、まずはそれから作って行くぜ!

今回はスペースキーが押されたときコスチュームを変更して、バットを振るように見せます。

コスチュームはバットを振っている女の子のスプライトを選んだときに運良く4つの画像があったので、それを使っていくよ!

f:id:kobayashinitya:20211225232901p:plain

これ動かしたらバットを振っている感じに見えそうだぜ!

 

まずは、文字ベースのヒントから!

最初はかまえているコスチューム。

スペースキーが押されたときにコスチュームを変更してバットを振るように見せる。

f:id:kobayashinitya:20211222142251p:plain

f:id:kobayashinitya:20211215172819p:plain

f:id:kobayashinitya:20211225232814p:plain

f:id:kobayashinitya:20211215173409p:plain

実際に、スペースキーを押して動くかどうか確認してみよう!

いい感じかな?

では、今度はスペースキーをずっと長押ししてみよう。

うーん・・ずっと動きっぱなしだね!この部分を少し修正するぜ。

連打を阻止するコードを組み立てよう

まずは文字ベースのヒントから

スペースキーを押すとコスチュームが動いてバットを打つよね。

スペースキーが押されていないときはどうなるかな?

f:id:kobayashinitya:20211223130735p:plain

f:id:kobayashinitya:20211227131057p:plain

f:id:kobayashinitya:20211227131106p:plain

連打を阻止するには、「スペースキーが押されたではない」を入れるといいよ!

押されていないときまで待つというと結構難しいかもしれないが、、

押されていないときはコスチュームが動かない、つまりバットを打たないということだね!


ピッチャーをつくろう

f:id:kobayashinitya:20211227131520p:plain

野球はボールを投げる人、つまりピッチャーが必要です。

Scratchにいい感じの方がいらっしゃったので、それを選びました。

f:id:kobayashinitya:20211227131639p:plain

3番目だけボールを投げている感じに腕の傾きを変えました。

もし、いい感じのピッチャーがいない場合は自分で描こう!

(わたしは画力が致命的なので、コスチュームは選びました)

 

これも3つあったので、動かしてみたいっすねー!

今回は、緑のはたを押してから3秒後で自動的に投げられるようにします。

 

緑のはたを押してから3秒後で自動的に投げられるコードを組み立てる

とりあえず、秒数はカウントする必要があるので変数をつくりましょっか・・

f:id:kobayashinitya:20211227132428p:plain

f:id:kobayashinitya:20211227132629p:plain

 

補足(ほそく)変数とは?

変数とは、サイコロみたいなものだよ。

「5」みたいに決まった数字ではなく、変化する数字。

例えば、1+1=Aとするとき、A=2だね。

しかし、1+2=Aとなった場合、A=3になる。

こんなふうに、Aが変化する数字のことを変数と言います。

 

では、文字ベースのヒントからいきますよー!

まずは最初は座標指定をする。

その後3秒カウントして、、ずっとボールとくっついているようにする。

3秒経ったあと、ボールを投げられる(コスチュームを変化する)

f:id:kobayashinitya:20211227131055p:plain

f:id:kobayashinitya:20211227131057p:plain

f:id:kobayashinitya:20211227133351p:plain

ボールを投げるまで最初は3秒にして、それが0になるまでずっとボールとくっついく。

つまり、スプライト1(ボール)へいく。

また、0になるまで1ずつ減らすコードを組み立てます。

こうすることによって、0になったらずっと0のままでマイナスにならずに、

コスチュームを変更することができますね!

 

ピッチャーからボールにメッセージを送る

ピッチャーがボールを投げるとき、どうしてもボールの位置が動きます。

そのため場所の指定をしていきまっせー!

f:id:kobayashinitya:20211227134101p:plain

こんな感じ!

補足(ほそく)メッセージ機能とは?

メッセージ機能は「お手紙」みたいな感じです。

今の場合、ピッチャーからボールへメッセージ(お手紙)を送るときに使います。

つまり、2個以上のスプライト間で動作を連立して起こしたいときに使います。

f:id:kobayashinitya:20211227134602p:plain

ピッチャーも上手くコスチュームが動いたかな?先に進もう。

 

ボールのコードを組み立てよう!

ボールも野球には必要な要素ですな!ボールをうまく投げられるようにプログラムを組み立てていくよ。

ボールの位置指定をしよう!

最初の位置(緑のはたを押したとき)とメッセージボールの位置を指定するのメッセージを受け取ったときの位置を決めていくよ。

f:id:kobayashinitya:20211227131055p:plain

f:id:kobayashinitya:20211227131057p:plain

f:id:kobayashinitya:20211227134800p:plain

こんな感じかな?

この座標はピッチャーの場所によって変わるから、みんなも実際にピッチャーやボールを動かしてみて調整しよう。

「ボールを投げる」メッセージを受け取ったときのコードを組み立てよう

つまり、ボールを投げるというメッセージを受け取ったときの下に続くコードを組み立てるよ。

最前面に移動して、何秒かでキャッチャーのグローブにいく。

また、グローブに触れたら「アウト!」

バットに触れたらどこかに飛んで、そのいちによって判定を行う。

それぞれ動かないように、スプライトを止める。

f:id:kobayashinitya:20211227140039p:plain

f:id:kobayashinitya:20211227131057p:plain

f:id:kobayashinitya:20211227140100p:plain

こんな感じかな?

大きさを-0.5ずつ変えるを入れると遠近法でちょっとずつ小さくなるようにプログラムしたが・・

無くてもあっても、どっちでも大丈夫!

グローブかバットかに当たったら、このスクリプトを止めるを送ろう。

勝手に動く可能性もありますので・・

f:id:kobayashinitya:20211227134602p:plain

グローブに吸い込まれる感じで、3秒後にボールが動き止まるかな?

上手く成功したら先に進もう!あともう少しだから、頑張れー!

判定のメッセージを受け取ったときのコードを組み立てよう

判定のメッセージをバットに当てたあとに送りましたな。

その後は、ヒットかファールかを表示しよう。

色指定で、ヒットかファールかを判定する

f:id:kobayashinitya:20211227131055p:plain

f:id:kobayashinitya:20211227131057p:plain

f:id:kobayashinitya:20211227141433p:plain

こんな感じかな?

白色の線にボールが乗ったときは、

どっちか分からないということで「微妙・・」としてみたぜ・・

 

チャレンジ

みんなも色々とデザインを作ったり、機能を追加してみたりしてね!

Levelを5段階で分けてます。もし良かったらチャレンジしてね!

  • ボールが4つで一塁に進む。フォアボール(Level3)
  • ホームランをつくる(Level3)
  • アウトが3つで交代する(Level2)

Scratchでサッカーゲームをつくろう!

f:id:kobayashinitya:20211223014648p:plain

今回は、有名なスポーツの1つであるサッカーをScratchでつくっていきます。

ルールとしては、5秒後にランダムに飛んでくるボールを、ゴールキーパーである、ねこちゃんを動かしてゴールを阻止するゲームです!いわゆるPK戦ですな!

(わたしは全くサッカーについて詳しくないんで、感覚で作ってまっせー)

イメージはこんな感じ↓

https://scratch.mit.edu/projects/619769240

今回習う単元は、

  • 枠の中でスプライトを動かす(色での判別)
  • もし〇〇に触れたなら・・の処理
  • 乱数の角度に向ける
  • 「かつ」の処理

 

ゴールキーパーの動きを組み立てる

ゴールキーパーを選ぼう

f:id:kobayashinitya:20211213232323p:plain

サンプルは、こんな感じで今回はねこちゃんをゴールキーパーにしてます。
みんなは自分の好きなスプライトを選んでね!

ボールを選ぼう

好きなボールを選んでみよう!(以下省略)

背景を選ぼう

f:id:kobayashinitya:20211223125224p:plain

背景はサッカーの感じの背景を選ぼう!

f:id:kobayashinitya:20211223125658p:plain

全部揃ったかな?

f:id:kobayashinitya:20211223130109p:plain

では先に進もう!次は実際にゴールキーパーの動きのコードをつくっていくよ。

いつも通り、文字ベースのヒントから

最初は真ん中にゴールキーパーがスタンバイ。

白色のゴールの端から端までしか動かないように設計(色判別・「かつ」を使用)

白色に触れたらちょっと戻る感じ!

 

今回は考える時間3分は短いかな・・5分10分考えてみよう!!

f:id:kobayashinitya:20211223130735p:plain

ちょっと複雑だったかな?ヒントその2もいくぜー!

矢印キーが押されていて、また白色のゴールの端に触れていないときに動く。

また、白色に触れたら1歩戻る

f:id:kobayashinitya:20211215172819p:plain

f:id:kobayashinitya:20211223131627p:plain

まず最初は、スタートの座標を指定。

その後、ずっと「回転方向を左右のみにする」を挿入。

もし入れなかったら、ひっくり返ってしまう可能性があるかも(ならない場合もありますが、念のため・・)

 

次に、もしキーが押された「かつ」白色(ゴールの端の色)に触れたではないなら、

左右に動かすをずっとの中に入れる。

 

また、もし白色(ゴールの端の色)に触れたなら-1歩動かすを組み立てる。

白色(ゴールの端の色)に当たったら、少し下がることによって、枠の中だけで動くことが可能。

これがないと白色(ゴールの端の色)に触れたら、キーを押しても動かなくなってしまうので、めっちゃ重要!

f:id:kobayashinitya:20211215173409p:plain

実際に、白色(ゴールの端の色)の中でしかゴールキーパーは動かないかな?

ボールのコードを組み立てる

今回は、5秒経過したらボールが発射?される感じのコードを組み立てるぜ!
まずは、投げる前と投げた後のコスチュームを描きます。

f:id:kobayashinitya:20211224142941p:plain

投げる前はどの方向に飛んでいくか分からないと大変なので、

右クリック+複製をして

f:id:kobayashinitya:20211224143140p:plain

「矢印」を描きます。

投げられた後は矢印を消すためいつものコスチュームで大丈夫!

 

秒数を計測するコードから!

最初の秒数は0で1秒待って1ずつ変数を変える

以前にもずっと、変数は出てきているね。念のため今回も紹介するよ。

補足(ほそく)変数とは?

変数とは、サイコロみたいなものだよ。

「5」みたいに決まった数字ではなく、変化する数字。

例えば、1+1=Aとするとき、A=2だね。

しかし、1+2=Aとなった場合、A=3になる。

こんなふうに、Aが変化する数字のことを変数と言います。

f:id:kobayashinitya:20211213233426p:plain

f:id:kobayashinitya:20211215172819p:plain

まずは時間の変数を作ります。

f:id:kobayashinitya:20211214153807p:plain

変数をつくるをクリック!

f:id:kobayashinitya:20211214001203p:plain

(制限)時間と入力→OK!

これで変数が完成!

コードはこんな感じ!

f:id:kobayashinitya:20211224142242p:plain

緑の旗が押されたとき、まず制限時間を0にすることでどんな時でも最初からカウント可能!

また、ずっと1ずつ変えることで変数が増えていく。またそれだけだと急激に数字が変わるので「1秒待つ」で待ってあげる!

f:id:kobayashinitya:20211215173409p:plain

数字が1秒ずつ増えていくかな?

これでカウントできたぜ!先に進もう。

最初のボールの位置を決めよう

最初のボールの位置を決めるにはどのブロックが必要かな?

f:id:kobayashinitya:20211215173411p:plain

f:id:kobayashinitya:20211215172819p:plain

f:id:kobayashinitya:20211224142822p:plain

x座標を〇〇、y座標を〇〇にするをつけ加える。

これで最初の座標を決められます。

次にコスチュームも指定しておきましょう。

f:id:kobayashinitya:20211224145133p:plain

なぜか念のため表示するをはさみましたが、全然なくて大丈夫でっせ。

コスチュームを〇〇(矢印付き)にするを入れます。

次に行きましょう!

 

5秒経つまでの動作を組み立てる

5秒経ったら、サッカーボールが発射されますが、その前は色々な角度に傾けて

どこに飛んでいくか分からないようにしていきまっせ!

まずはヒントから

5秒経つまで乱数の角度に向けるのを繰り返す

f:id:kobayashinitya:20211222142251p:plain

f:id:kobayashinitya:20211215172819p:plain

f:id:kobayashinitya:20211224145457p:plain


時間=5まで中のコードを繰り返す。
-30〜30までの乱数度に向けるで5秒経つまでどんな角度にするのかを決めます。

-30〜30は仮に入れているので、みんなはいい感じの数字を入れてみてね!

-30〜0は左側・0〜30は右側に傾く角度だよ。

 

※ちなみにこの時は、矢印が上に向いている状態を0度としていますので、最初の角度によって数字が変わる可能性が高いです。

f:id:kobayashinitya:20211215173409p:plain

めまぐるしく5秒間角度が変わっているかな?

先に進もう!

5秒経った後のコードを組み立てよう

5秒間繰り返すの下に5秒以降のコードを組み立てるよ。

まずは、ヒントから

コスチュームを変えて飛んでいく

f:id:kobayashinitya:20211215173411p:plain

f:id:kobayashinitya:20211215172819p:plain

f:id:kobayashinitya:20211224145915p:plain

こんな感じかな?

飛んでいく部分は「〇〇歩動かす」の部分だよ。

x座標やy座標にすると縦や横にしか飛ばないので、せっかく角度を変えても意味がなくなってしまう。

だから今回は「〇〇歩動かす」がバッチリ!

 

それぞれ当たり判定やはずれ判定を加える

ボールをねこちゃんがキャッチできたら「はずれ」にする+「すべて止める」

ボールをねこちゃんがキャッチできずにゴールしたら「あたり」にする+「すべて止める」

ボールがゴールから外れてしまったら「すべて止める」

この条件はみんなで各自変えてみてね。

f:id:kobayashinitya:20211223130735p:plain

f:id:kobayashinitya:20211215172819p:plain

f:id:kobayashinitya:20211224150415p:plain

ちなみに、わたしはこんな感じに組み立てたよ。

スプライト2はねこちゃんです。

「ずっと」の中に色々な条件(もし・・・なら)を加えていくといいよ!

f:id:kobayashinitya:20211215173409p:plain

自分の思い通りに動いたかな?

チャンレンジ

みんなも色々とデザインを作ったり、機能を追加してみたりしてね!

Levelを5段階で分けてます。もし良かったらチャレンジしてね!

  • サッカーボールを何回も投げられるようにする(クローンを使ってみよう)(Level3)

    クローンの技術は射撃(しゃげき)の弾の部分と同じだよ

    kobayashinitya.hatenadiary.jp

     

  • 得点をつける(Level2)

    金魚すくいを見ると参考になるかも?

    kobayashinitya.hatenadiary.jp

  •  ゲームクリアやオーバー画面を実装する(Level2)
    「もし・・なら」の条件の中に「背景を変えるコード」をいれる