【Scratch3.0】サッカー(PK)ゲーム

Scratch

スポンサーリンク

サッカーのPKゲームの作り方です。

動きとしては、
1.ボールを蹴る方向を左右上下キーで決定
2.キーパーの飛ぶ方向を上下左右キーで決定
3.キーパーとボールの飛んだ位置でゴールかスーパーセーブかを判定

完成動作

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

完成コード

以下のように"Jordyn"、"Ben"、"Soccer Ball"、"Referee"のスプライトを以下の図のように並べる。
背景は"Soccer"にする。
※この4つのスプライトと背景はScratchで用意されているスプライトの中にあります。

解説

前提

・以下の2つの変数を作成し、チェックボックスのチェックを外す。

初期動作

“Jordyn"スプライト(以下、「キーパー」)のコスチュームと初期位置を設定。

“Soccer Ball"スプライト(以下、「ボール」)の初期位置を設定。

キッカーの動き

“Ben"スプライト(以下、「キッカー」)の初期位置とコスチュームを設定。

蹴る方向を聞き上下左右キーのどれかを押されるまでずっと繰り返し、キーが押されたら"蹴る方向"関数に向きを引数として渡し、次のキーパーの飛ぶ方向を聞く際にこのスクリプトが影響されないように、このスクリプトを止める。
※このスクリプトを止めない場合、キーパーの飛ぶ方向を決めた際に、キッカーの蹴る方向も変わってしまう。

“蹴る方向"関数内
1.「〇と言う」ブロックの〇を空にすることで、上のブロックで「蹴る方向は?(上下左右キー)」と言っているキッカーが無言になる。
2."ボールを蹴る方向"変数に、蹴る方向を保存する。
3.次はキーパーの飛ぶ方向を決めるので、メッセージを送る。

キーパーの動き

“Jordyn"スプライトが"キーパーの飛ぶ方向"メッセージを受け取った際に1秒待つ。
※ここで〇秒待つを入れないと、キッカーの蹴る方向のキーを入力した際に、キーパーの飛ぶ方向を決める処理も一気に実行されてしまい、キッカーとキーパーの飛ぶ方向が絶対に同じになってしまう。

キッカーの時と同様の処理で、キーパーの飛ぶ方向を入力させる。

“飛ぶ方向"関数内
1.「〇と言う」ブロックの〇を空にすることで、上のブロックで「飛ぶ方向は?(上下左右キー)」と言っているキーパーが無言になる。
2."キーパー飛ぶ方向"変数に、飛ぶ方向を保存する。
3.次はレフェリーがホイッスルを鳴らしてPKを開始するので、メッセージを送る。

レフェリーがホイッスルを鳴らす

“Referee"スプライト(以下、「レフェリー」)がホイッスルメッセージを受け取る。
1.1秒待つ(これはあってもなくてもいい。キーパーの飛ぶ方向を入力した後に区切りをつけるためになんとなく入れた。)
2.ピーと3秒言う。
3.ボールを蹴るメッセージを送る。

キッカーがボールを蹴る

“Ben"スプライトが"ボールを蹴る"メッセージを受け取って、キッカーがボールを蹴る動作をする。
1.コスチュームを走る動作にする。
2.ボールの前まで移動する。
3.コスチュームを蹴る動作にする。
3."ボール飛ぶ"メッセージを送る。

ボールが最初に指定した方向に飛ぶ

“Soccer Ball"スプライトが"ボール飛ぶ"メッセージを受け取って、ボールが指定した方向に飛ぶ。
1."ボール蹴る方向"変数が"上"であれば、
2."キーパー飛ぶ"メッセージを送る。
3.1秒で座標を移動する。(ゴールの上側にボールが飛ぶ。)

以下、上記と同様に"ボール蹴る方向"変数の値が下、左、右のどれかによってボールが飛ぶ。

“ゴール判定"メッセージを送る。

キーパーが指定した方向に飛ぶ

“Jordyn"スプライトが"キーパー飛ぶ"メッセージを受け取り、指定した方向に飛ぶ。
1.キーパーのコスチュームを変える。
2."キーパー飛ぶ方向"変数が上下左右のどれかを判定し、
3.1秒で指定の座標に移動する。

レフェリーがゴール判定を行う

“Referee"スプライトが"ゴール判定"メッセージを受け取り、ゴールかを判定する。
1."ボール蹴る方向"変数と"キーパー飛ぶ方向"変数が同じであれば
2.スーパーセーブと2秒言う。
3."ボール蹴る方向"変数と"キーパー飛ぶ方向"変数が違えば
4.ゴールと2秒言う。

Scratch

Posted by ton