P5.エアホッケー.12「YOU WIN / YOU LOSE」
パックの初期挙動が単調なうちにゲームオーバー処理(どっちか10点取った方が勝ち)を追加しておきたい。パックが出ていく方向がランダムになっちゃうと、意図的にゴールさせて確認出来なくなるからな。今のうちだ。
初期設定に追加
何点取ったら勝ちなのかという情報と(❶)と、今が試合中なのかゲームオーバー中なのかという情報(❷)の2つを追加する。場所はもちろん「神」のOn Init
に続けて配置だ。
❶ 10点取ったら勝ちとするので、"katiTen" に "10" をセット。ゴールして点数が入った時、この値と比較し、ゲームオーバーとするか判断する。ま、ここは個人的に11点で勝ちにしたけりゃ、"11"にすればいい。
❷ Boolean型で "gameSet" を設定。試合中なら False、試合終了中(ゲームオーバー)なら True とするフラグ。ゲームスタート時点では、0対0で試合中というかたちで始めるので Value にはチェック無し(False)。
- 試合中: gameSet = False
- 試合終了中: gameSet = True
メインループに追加・修正
ちょっと不格好になるが、メインループ(On Update
以下)を下図のようにして、試合終了中なら「リトライヵ("RETRYka")」に行き、試合中ならイベント「玉出すヵ("TAMADASUka")- ちかちかヵ("TIKATIKAka")」に行くようにする。イベント "RETRYka" は今後作成。
❶ Gate
で "gameSet" と True を比較し、
❷ 以下の分岐。
- 「"gameSet" = True」でイベント "RETRYka" へ
- 「"gameSet" = False」でイベント "TAMADASUka" - "TIKATIKAka" へ
で、結構Boolean型はどっちの場合が True だっけー? ってなるので、名前は分かりやすいのにした方がイイぞ。例えば、"inGame" とかにした場合は、「inGame = True で試合中」とかにすればいいから、こっちの方が分かりやすいかもな。自分にとって分かりやすいものにしてくれ。
Retry ? (Y/N)
イベント「リトライヵ("RETRYka")」ってのは何かって言うと、試合終了のあと再試合するかどうか聞いてくる処理のことね。GAME OVER になったらよく「Retry ? (Y/N)」ってゲームで出るでしょ。あれ。
でも、ココを作るのはもうちょっと後にする。先にどっちが勝ったのかの処理を追加しておきたいからね。イベントの「頭」だけ作っておいてくれたまえ。
どっちが勝ったかの処理追加
試合にどっちが勝ったのかという処理を追加する。勝利とする点数は "katiTen"(10点)なので、ゴールした時にこの値と比較すればいい。
〇 先ずは自分が勝った場合を作る。前回作った "PLAYER_TOKUTEN" の最終部分に追加していく。
❶ プレイヤーの得点("playerTen")と勝ちとする点数("katiTen")との比較。イコールならプレイヤー勝ちって事。Gate
の中、"Equal" が不安なら別に "Greater Equal" でもいいぞ。
❷ 勝ちな場合、こっち来るよね。ここで、キャンバスに「YOU WIN」と表示させてる。文字の色はこっちのスクリプトから指定できないみたいなので、キャンバスの方で先に指定しておいてくれ。
で、[Save] ボタン押すの忘れずに・・・。これぜったい忘れる。
❸ "gameSet" = True に。
ここで一旦テストプレイした方がいいかもな。10点取って「YOU WIN」出て、何も動かなくなったら正解だ。(現状 "RETRYka" が空のイベントで、"gameSet" = True の時は永遠にここに飛ばされるからな。)
〇 次は敵側。"COM_TOKUTEN" の最終部分に追加。ほぼ同じだから簡潔に。
❹ 比較するのは "comTen"。
❺ エレメントは "Text10"、内容は「YOU LOSE」。別にエレメント "Text9"(自分が勝った時の表示領域)に入れてもいいんだけど、色を変えたいじゃん。だから。
テストプレイ
パックの "myDir" を変えて両方のゴールでちゃんと動くか試してな。
で、肝心のゲームオーバー処理、つまりイベント "RETRYka" の作成はーーー、また今度にするわ。また。
本日のフラグ
- どっちが True? どっちが False? 分かりやすくしとけ。
〇 次回、Retry ? (Y/N) ...?????????・・・?