パパ先生のゲーム開発ブログ

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

[Scratch] サッカーゲーム(PK戦)を作ろう!-ゴール判定と先攻・後攻選択メニュー(5/6) -

スクラッチ
サッカーゲームPK戦を作ろう ゴール判定と先攻・後攻選択メニュー編(5/6)
前回までに、シュートを交互にうっていくPK戦の流れは一通りできました。

第5回では、シュートが決まったかどうかのゴール判定と、
先攻・後攻を自分で選べるメニュー画面を作ります。

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

[目次]

ゴールしたか判定しよう

f:id:papa-sensei:20200224232641p:plain シュートがゴールに入ったか、キーパーが止めたかを判定します。
自分が選んだ方向、相手が選んだ方向はそれぞれ変数の中にあります。
f:id:papa-sensei:20200303100712p:plain

この2つの変数を比べて、

自分が攻撃の時
選んだ方向(シュート方向) と 相手が選んだ方向(キーパーが飛ぶ方向)が違えばゴール
 
自分が防御の時
選んだ方向(キーパーが飛ぶ方向) と 相手が選んだ方向(シュート方向) が同じなら止めた

ということになります。

レフェリーのプログラム

ゴール判定はレフェリーのスプライトに追加していきます。
「判定」というイベントを受け取ったら、
自分が選んだ方向と相手が選んだ方向を比べて判定していきます。
f:id:papa-sensei:20200303101956p:plain

「選んだ方向」と「相手が選んだ方向」が同じ場合

どちらも方向が同じ場合
・自分がシュートした方向と、相手のキーパー方向が同じ = 止められた!
・自分がキーパー操作した方向と、相手のシュート方向が同じ = ナイスセーブした!

方向が同じということは、
シュート・キーパーどちらの場合でもゴールは決まらないということです。
まずはこの部分のプログラムを作りましょう。
f:id:papa-sensei:20200303102715p:plain

自分がシュートする番(自分の順番 = 今の順番)なら、シュートを「止められた」
自分の順番でなければ、キーパーとして相手のシュートを「ナイスセーーブ!!」
結果をレフェリーが喋ります。これで方向が同じ場合の判定はできました。
 

「選んだ方向」と「相手が選んだ方向」が違う場合

方向が違う場合
・自分がシュートした方向と、相手のキーパー方向が違う = ゴール!!
・自分がキーパー操作した方向と、相手のシュート方向が違う = 失点。ゴールされた

方向が違うということは、
自分がゴールをしたか、ゴールされたということです。
f:id:papa-sensei:20200303103915p:plain

自分がシュートする番(自分の順番 = 今の順番)なら、「ゴーーーール!!」
自分の順番でなければ、相手にシュートを「ゴールされた」 ということですね。
この時、自分のゴール数・相手のゴール数変数を用意して、ゴールした数を計算しておきましょう!

(プログラム全体) f:id:papa-sensei:20200303101723p:plain

背景のプログラム
最後に背景プログラムの方向を決めた時、シュートのイベントを送った後に「判定」のイベントを送るようにします。これで、レフェリーが結果を見て判定してくれるようになります!
f:id:papa-sensei:20200303104522p:plain  

先攻・後攻選択メニュー

f:id:papa-sensei:20200225214204p:plain 続いて、ゲームが開始したら、先攻・後攻を自分で選んでPK戦を始めるようにします!

メニュー下地

まずはメニュー画面の下地を作ります。
新規スプライトを「描く」から作成し、コスチュームを作成します。
f:id:papa-sensei:20200303110143p:plain 色や大きさは好きにカスタマイズしましょう!

次に下地のプログラムです。
f:id:papa-sensei:20200303110329p:plain 「順番決め」「順番決め消す」イベントを受け取ったら、それぞれ表示・非表示するだけです。下地なので最背面へ移動するブロックも念のため追加しておきましょう!
それぞれのイベントは背景から送られてきます。

先攻・後攻選手ボタン

先攻・後攻を選択するための選手ボタンです。
今回先攻は赤いユニフォームの男の子、後攻は緑ユニフォームの女の子です。

f:id:papa-sensei:20200227100115p:plainf:id:papa-sensei:20200227100127p:plain

 
選手を複製する
まずは前回までに作ったシュートする選手のスプライトを複製します。
f:id:papa-sensei:20200303114509p:plain
新規にスプライトを作って、また選手のコスチュームを設定するより、既存のものをコピーしてしまった方が早いからです^^
最初に先攻の選手ボタンを作ります。
先攻は赤いユニフォームの男の子なので、赤いコスチューム1つだけ残して消してしまいましょう!
f:id:papa-sensei:20200303125259p:plain

次にプログラムです。
複製した時にできたプログラムは全て削除してしまい、新たに作っていきます。
f:id:papa-sensei:20200303125805p:plain 下地と同じく、「順番決め」「順番決め消す」イベントを受け取ったら、表示・非表示します。そして、このスプライトが押されたら、「自分の順番を先攻(1)」にします。
その後試合開始のイベントを送って、PK戦に進む流れになります。
これで先攻選手のボタンができました。同様に後攻の緑ユニフォームの女の子も作りましょう!

後攻の選手ボタン
・コスチュームを緑の女の子だけ残す
・自分の順番を後攻(2)にする

選手ができたら、ステージを見ながら配置を調整しましょう。
f:id:papa-sensei:20200225214204p:plain

背景のプログラム

最後に背景のプログラムを修正し、
ゲームが開始したら先攻・後攻選択メニューを表示し、その後試合開始(PK戦)へ進むようにします!

まずはスタート(旗が押された)部分です。
f:id:papa-sensei:20200303131519p:plain

スタートしたら、最初に自分の順番やゴール数の変数を初期化しておきます。
次に、試合(PK戦)で使うスプライト、方向選択で使うスプライトの表示を一度消すために、「試合表示を消す」「方向を消す」イベントを送ります。
そして、先攻・後攻順番決めのため、「順番決め」イベントを送ります。
ここまでで、スタートしたら選択メニューが表示されるようになります。  
続いて、先攻・後攻を決めた後の、「試合開始」イベントでのプログラムです。
f:id:papa-sensei:20200303132046p:plain

試合開始を受け取ったら、まずは順番決めで使ったスプライトを消すために、
「順番決め消す」イベントを送ります。
その後、今の順番を先攻(1)にして、方向矢印を表示するための「方向えらぶ」定義を実行します。
これで、自分が選んだ順番でPK戦が始まります!
 

今回までの動き


ゲーム開始したら先攻・後攻を選び、その順番で交互にシュートをうつようになりました。レフェリーもゴール判定をしっかり見てくれてますね^^
さて、次回がいよいよ最後です!タイトル画面と結果画面を作って、ゲームを完成させましょう!!