JJ SHIMA Blog

二児のパパがゲーム開発アレコレを書いているブログ。Unity / UE / Scratch / プログラミングゼミ / プログラミング教育

[Scratch] サッカーゲーム(PK戦)を作ろう!-先攻・後攻で交互にシュートしよう(4/6)-

スクラッチ
サッカーゲームPK戦を作ろう 先攻・後攻で交互にシュートしよう(4/6))

第4回は、前回にまでに作った、シュートとキーパーの動きを元に、
先攻・後攻で交互にシュート、キーパー操作をできるようにします!
これで、PK戦のゲーム部分はほぼほぼ完成します^^

(解説まとめはこちら)
www.papa-sensei.com

[目次]

自分の順番と今の順番

f:id:papa-sensei:20200224232457p:plain 先攻、後攻で交互にシュートをうつ際に大事なのは、

・自分は先攻・後攻どっち?
・今は先攻がシュートうつ番?それとも後攻がシュートする番?

ということです。
自分が先攻で、今は先攻の攻撃なら、シュートをうつ。
逆に自分が先攻で、今は後攻の攻撃なら、相手がシュートしてくるのでキーパーを操作する。 ということになります。
まずはこの、「自分の順番」と「今の順番」をわかるようにしましょう。

順番を表す変数を用意する

背景のプログラム
背景のプログラムを修正していきます。
まずは、自分の順番・今の順番を表す変数を作り、スタート時に初期化しておきます! f:id:papa-sensei:20200302175922p:plain

[順番を表す値]

順番
先攻 1
後攻 2

自分はシュートかキーパーどっち?

今の順番と自分の順番を比べる

今の順番を見て、
自分の順番だったらシュート、相手の順番であったらキーパーを操作します。

まず背景のブロック定義に「方向をえらぶ」定義を用意します。
f:id:papa-sensei:20200302183432p:plain

このように、色々なところでよく使う動きは、ブロック定義にしておくと、同じプログラムを何度も書かずにすみ便利です!
「方向をえらぶ」定義の中では、

・もし 今の順番 = 自分の順番 だったらシュート準備
・もし 今の順番 ≠ 自分の順番 だったらキーパー準備

という動きを作ります。
例えば、自分の順番が先攻で、今の順番も先攻の番なら、シュート準備です!

f:id:papa-sensei:20200302183831p:plain

シュート準備・キーパー準備のイベントは、方向下地のスプライトが受け取り、
それぞれの状態に合わせて「シュートしよう!」「キーパー操作しろ!」と表示が切り替わります。

今作った「方向をえらぶ」定義をスタート直後に「シュート準備」を送っていた場所と置き換えます。
f:id:papa-sensei:20200302184031p:plain

選んだ方向にボールorキーパーを飛ばす

方向矢印を押した後、選んだ方向にボールorキーパーを飛ばします。

相手がえらんだ方向 まずは「相手がえらんだ」方向も変数として用意しておきます。
・自分は矢印で方向を選ぶ
・相手はランダムで方向を決める
f:id:papa-sensei:20200302190054p:plain

自分が選んだ方向をボール・キーパーに伝える 次に、今の順番を見て、自分がシュートの番ならボールに、相手の攻撃番であれば、キーパーに選んだ方向を伝えます。
f:id:papa-sensei:20200302190357p:plain

自分の順番 ボールの方向 キーパーの方向
攻撃(自分の順番=今の順番) (自分が)えらんだ方向 相手がえらんだ方向
防御(自分の順番≠今の順番) 相手がえらんだ方向 (自分が)えらんだ方向

ここまでで、先攻・後攻を見て、
自分が選んだ方向でシュート・キーパー操作ができるようになりました。 f:id:papa-sensei:20200302190753p:plain

先攻・後攻を交代する

シュートを打ち終わった後、攻守を交代します。

交代
まずは「交代」のブロック定義を用意し、この中に交代のプログラムを作っていきます。
f:id:papa-sensei:20200302192329p:plain

交代時にやることは次のことです!
・今の順番が先攻なら後攻に、後攻なら先攻に戻す
・再度シュートやキーパー操作ができるように、状態のリセットをする
・方向を選び直す

f:id:papa-sensei:20200302192614p:plain

この交代を、シュートをうったあとに行えば、攻守が交代できます。
f:id:papa-sensei:20200302192754p:plain

試合選手の見た目を変える

最後に、PK戦時にシュートする選手の見た目も先攻・後攻で変わるようにします。
選手のプログラム f:id:papa-sensei:20200303132747p:plain 選手はリセット・シュート時に今の順番をみて、
今の順番が先攻(1) なら、先攻のコスチュームに。
後攻(2)なら、後攻のコスチュームにしてあげるだけです。
これで、交互にシュートする際にユニフォームの色も変わります。

今回までの動き


シュート・キーパーの動きを交互にできるようになりました^^
交互にシュートできるだけでだいぶPK戦らしくなりましたね。
次回はゴールしたかの判定と、先攻・後攻を自分で選べるようにする部分を作ります!