スクラッチでオンラインゲームを作る⑩ 退場処理を実装する

スクラッチでオンラインゲームを作る⑩ 退場処理を実装する
グリフパッチ(動画)
ok-scratch(解説記事)

和訳解説は動画作者のグリフパッチさんご本人から許可をいただいて掲載しております。
チャンネルはYOUTUBE ( by griffpatch )からどうぞ。

他の人がゲームからいなくなったら、自分の画面から消すように退場処理を作ろう。
スターター
プロジェクト
なし
難しさ

任意)自分の作業中のスクラッチ作品URLを記録しておこう!再開するときに便利だよ。

LOADING...

※ この記録は今使ってるPCに保存されます。別のPCで作業するときは表示されません。

スクラッチプログラミングに挑戦している皆さん、どうも!スクラッチコーチです。

前回(ぜんかい)はクラウド変数(へんすう)()やすスケールアップを実装(じっそう)したぞ!これで理論(りろん)(じょう)は100(にん)でも(あそ)べるオンラインゲームエンジンができたわけだ。最高(さいこう)かよ!ここまで()たらギリギリまでクオリティを(たか)めていきたいよね。(いま)のままだとスクラッチを()じた(ひと)でもゲームに表示(ひょうじ)され(つづ)けちゃうから、この問題(もんだい)解決(かいけつ)していこう。

今回(こんかい)目標(もくひょう)退場(たいじょう)処理(しょり)実装(じっそう)する」

入場(にゅうじょう)処理(しょり)以前(いぜん)実装(じっそう)したよね。(だれ)かがスクラッチゲームをプレイしたら、クラウド変数(へんすう)(とお)して検知(けんち)して自分(じぶん)のリストにその(ひと)のデータを追加(ついか)する、って(かん)じの処理(しょり)だよね。今回(こんかい)はその(ぎゃく)だね。参加(さんか)(ちゅう)(だれ)かがブラウザを()じたり(あか)いボタンを()したりしたら、そのことを検知(けんち)して自分(じぶん)のリストからその(ひと)のデータを削除(さくじょ)するっていう処理(しょり)(つく)るよ。入場(にゅうじょう)処理(しょり)反対(はんたい)だから退場(たいじょう)処理(しょり)って()ぶことにしよう。

休止(きゅうし)(ちゅう)かどうかを判定(はんてい)する

(べつ)(ひと)がまだプレイしているかどうか、どうやって検知(けんち)しようか。色々(いろいろ)方法(ほうほう)があるけど、今回(こんかい)「ある程度(ていど)(なが)(うご)かなかったら」もう(あそ)んでない、というふうに(かんが)えるよ。

変数(へんすう)休止(きゅうし)(ちゅう)」を用意(ようい)する

(うご)いてない(なが)さを()るために休止(きゅうし)(ちゅう)という変数(へんすう)使(つか)うよ。

(うご)きがなかった(なが)さを()

ブロック定義(ていぎ)「クローンティック」の(なか)で、エンコード文字列(もじれつ)座標(ざひょう)反映(はんえい)する処理(しょり)(つく)ったよね。そのときに(つぎ)のエンコード文字列(もじれつ)取得(しゅとく)しても空白(くうはく)場合(ばあい)(そな)えた「もし」ブロックを()いたことを(おぼ)えているかな?ここが空白(くうはく)ということは、前回(ぜんかい)(おな)座標(ざひょう)データが(おく)られてきたということなんだ。つまり、()まっているということだね。ただ()まっているだけなのか、それとももう(あそ)んでなくて(うご)かないのか、この段階(だんかい)では()からないから、とりあえず変数(へんすう)休止(きゅうし)(ちゅう)」に1をプラスしておこう。

一定(いってい)時間(じかん)(うご)いてなかったときの処理(しょり)(つく)

この変数(へんすう)休止(きゅうし)(ちゅう)」の()合計(ごうけい)150を()えたら、「この(ひと)()まっているんじゃなくて、もう(あそ)んでない(=()ちた)んだな」と判断(はんだん)しよう。そのための「もし」ブロックを(つく)り、判定(はんてい)演算(えんざん)をハメるよ。

退場(たいじょう)処理(しょり)(なか)(つく)

この「もし」ブロックの(なか)退場(たいじょう)処理(しょり)具体的(ぐたいてき)実装(じっそう)になるよ。

その(ひと)のUIDデータを()

(かく)プレイヤーにはユニークID(UID)があるんだよね。これはほぼ絶対(ぜったい)(ほか)(ひと)とは(おな)じにならないデータなんだ。この()をいまはリスト「★プレイヤーUID一覧(いちらん)」に()っているから、それを()しておこう。()すと()っても空白(くうはく)()()えるだけだよ。リストの(ぎょう)ごと()しちゃうとバグるから注意(ちゅうい)
スクラッチでオンラインゲームを作る⑩ 退場処理を実装するを語るok-scratch ok-scratch

u003cpu003eUIDみたいに、(ほか)とはかぶらない、(おな)()存在(そんざい)しないことを確約(かくやく)できる、という状態(じょうたい)をシステム開発(かいはつ)では「一意(いちい)のデータ」と()んでるよ。UIDは一意(いちい)ってことだね。厳密(げんみつ)には9,999,999(ふん)の1の確率(かくりつ)(おな)じになるんだけど……それは、ね。u003c/pu003e

(かく)

さらに(かく)すことで()()(じょう)はゲームからいなくなったようにしよう。

ちょっと修正(しゅうせい)する

おっと、一箇所(かしょ)修正(しゅうせい)しておきたい。(うご)きに(ちが)いはないけど、表示(ひょうじ)するブロックの場所(ばしょ)動画(どうが)()わせておこうと(おも)う。直前(ちょくぜん)の「もし」ブロックの(なか)()れておいてほしい。

テストする

右側(みぎがわ)のタブで(あか)いボタンを()した(あと)左側(ひだりがわ)のタブからネコが1(たい)()えている(てん)注目(ちゅうもく)してほしい。

休止(きゅうし)(ちゅう)解除(かいじょ)する

おや、()まっていた(ひと)(うご)()したぞ!どうやら()ちたんじゃなくて、シンプルに()まってただけのようだね。

変数(へんすう)休止(きゅうし)(ちゅう)」をリセットする

この(ひと)退場(たいじょう)させる必要(ひつよう)がないので、変数(へんすう)休止(きゅうし)(ちゅう)」のカウントをゼロに(もど)しておこう!
OK!これで退場(たいじょう)処理(しょり)については完了(かんりょう)だ。
  • なぜリストの行(ぎょう)を消(け)さずに空白(くうはく)で置(お)き換(か)えたの? なぜリストの行(ぎょう)を消(け)さずに空白(くうはく)で置(お)き換(か)えたの?
    u003cpu003e退場(たいじょう)した(ひと)のリスト「★プレイヤーUID一覧(いちらん)」を空白(くうはく)()()えたね。そのときに「リストの(ぎょう)()さずに」と()いたんだけど、これには理由(りゆう)があるんだ。u003c/pu003eu003cpu003e(いま)ってさ、変数(へんすう)「プレイヤー(ばん)(ごう)」にAさんは1番目(ばんめ)、Bさんば2番目(ばんめ)、Cさんは3番目(ばんめ)、みたいな(かん)じでリスト(ない)のどこに(だれ)のデータが格納(かくのう)されているか管理(かんり)してるじゃん?u003c/pu003eu003cpu003eこの状況(じょうきょう)でAさんが()ちたからといってリストの1(ぎょう)()()すと、どうなると(おも)う?うん、1(ぎょう)()()したら2(ぎょう)()だったデータが1(ぎょう)()になって、3(ぎょう)()だったデータが2(ぎょう)()になるんだ。つまり()めるんだよね。u003c/pu003eu003cpu003eそうすると変数(へんすう)「プレイヤー(ばん)(ごう)」で管理(かんり)している順番(じゅんばん)実際(じっさい)のリスト(ない)順番(じゅんばん)(ちが)ってしまって、めちゃくちゃになってしまうわけだ。u003c/pu003eu003cpu003eそれを(ふせ)ぐために(ぎょう)順番(じゅんばん)自体(じたい)維持(いじ)したままにしたいから、(ぎょう)削除(さくじょ)ではなくて空白(くうはく)()れておくことにしたんだよ。u003c/pu003e

リサイクル処理(しょり)(つく)ろう

さて、ここまでで入場(にゅうじょう)退場(たいじょう)もできて、そこそこ安定(あんてい)したオンラインゲームエンジンになったんだけど、完璧(かんぺき)まではあと一()!このままだと(ひと)出入(でい)りを()(かえ)すたびにリスト(ない)(あたら)しい(ぎょう)追加(ついか)されていって、当分(とうぶん)問題(もんだい)ないけど理論(りろん)(じょう)はいつかリストの限界(げんかい)()えて破綻(はたん)してしまうことが予想(よそう)できる。そこで、リストが無限(むげん)()えていかないように、使(つか)ってない(ぎょう)があればその(ぎょう)(ふたた)使(つか)うように(なお)して、(ぎょう)無限(むげん)増殖(ぞうしょく)未然(みぜん)(ふせ)ぎたいと(おも)う!つまり、リサイクル活動(かつどう)だ!もったいない精神(せいしん)実装(じっそう)しよう。

空白(くうはく)(いき)(さが)

手順(てじゅん)としては、空白(くうはく)()(はい)っている(ぎょう)がリスト「★プレイヤーUID」にあるかどうかを(さが)して、なければ(いま)まで(とお)(あたら)しい(ぎょう)追加(ついか)するし、あれば空白(くうはく)(いき)をリサイクルするようにしたい。そこでまずは空白(くうはく)(いき)()つけよう。手始(てはじ)めにブロック定義(ていぎ)「クラウド変数(へんすう)受信(じゅしん)する」で、リスト「★プレイヤーUID一覧(いちらん)」の(なか)から空白(くうはく)である(ぎょう)(ばん)(ごう)取得(しゅとく)しよう。

条件(じょうけん)分岐(ぶんき)ブロックを追加(ついか)する

その直後(ちょくご)に、「もし~でなければ」ブロックをスクショを()ながら追加(ついか)しよう。「もし~なら」の部分(ぶぶん)には合計(ごうけい)4つのブロックがこの段階(だんかい)では(はい)っているぞ。

空白(くうはく)(いき)がなかった場合(ばあい)

プレイヤー(ばん)(ごう)がゼロだったら、条件(じょうけん)(しき)をハメよう。これは直前(ちょくぜん)でリストの空白(くうはく)(いき)(さが)したけど結果(けっか)がゼロだった、つまり空白(くうはく)(いき)はなかったということを意味(いみ)しているよ。

空白(くうはく)(いき)があった場合(ばあい)

空白(くうはく)(いき)があれば変数(へんすう)「プレイヤー(ばん)(ごう)」にはゼロより(おお)きい()(はい)っている。それは空白(くうはく)(いき)場所(ばしょ)(しめ)しているので、リストに変数(へんすう)()」(これにはプレイヤーUIDが(はい)ってる)を格納(かくのう)してリサイクル完了(かんりょう)だ。

テスト

(みぎ)タブで(あか)停止(ていし)ボタンを()して一(かい)()ちたら、(ひだり)タブからは()えている。画像(がぞう)(あら)くて数字(すうじ)()えないけど、左下(ひだりした)のリスト「★プレイヤーUID一覧(いちらん)」も空白(くうはく)になっている。そのあとに(ふたた)(みぎ)タブで(みどり)(はた)()すと、(ひだり)タブのリストの空白(くうはく)(いき)数字(すうじ)(はい)っている様子(ようす)()()れる。(まえ)まではどんどんリストに(あたら)しい(ぎょう)()えていたけど、今回(こんかい)(ぎょう)()えずに空白(くうはく)(いき)のリサイクルに成功(せいこう)している(てん)進歩(しんぽ)だ!

(だい)テストをする!

よぉし!やりたいことはだいたいできた。よくここまで()いてきてくれたね!キミとコーディングできたことを(ほこ)りに(おも)う。(死亡(しぼう)フラグw)ここでより野心的(やしんてき)なテストに挑戦(ちょうせん)したいと(おも)う。

(より)プレイヤーに処理(しょり)追加(ついか)する

(ひさ)しぶりにスプライト「(より)プレイヤー」に処理(しょり)追加(ついか)するぞ。

(より)プレイヤーをクリックする

こちら。

マウスが()されたときだけ()(ところ)()える

テストしやすさのためにマウスが()されたタイミングだけ場所(ばしょ)移動(いどう)するようにするよ。

ぐるぐる(まわ)るようにする

ネコがその()でぐるぐる(まわ)るよう処理(しょり)自動(じどう)()するよ。
()(うご)かす
10()(まわ)
回転(かいてん)しないようにする
()やすさのため。
(いろ)()える
(より)プレイヤーだけ(いろ)()わって、()プレイヤーは普通(ふつう)のスクラッチキャットにする。

タブを(なら)べてテストする

これで(ぼく)環境(かんきょう)では4つ(なら)べてみた。パソコンのスペックによっては4つは(きび)しいかもしれないから、2つか、()けそうなら3つタブを(なら)べてテストしてみると面白(おもしろ)いぞ!
こんな(かん)じの(うご)きができたら、(だれ)かを(あか)いボタンで()めてしばらく()とう。そしたらリストの(ぎょう)空白(くうはく)になるよね!それを確認(かくにん)できたら(ふたた)(みどり)(はた)()して再開(さいかい)してみよう……。空白(くうはく)(いき)がリサイクルされたら大成功(だいせいこう)!おめでとう!

次回(じかい)

いやぁ素晴(すば)らしいオンラインゲームエンジンに仕上(しあ)がったね。これを使(つか)えばどんなゲームもマルチプレイヤーすることが可能(かのう)だぞ。(ゆめ)(ひろ)がる……。この(あと)はまた動画(どうが)更新(こうしん)()って、記事(きじ)()っかけ解説(かいせつ)していく!()うご期待(きたい)!あーでも、もう()てないって(かん)じに(あたた)まってるなら、()ってちゃダメだ!どんどん自分(じぶん)作品(さくひん)をオンライン()してしまおう!
ブクマよろしくお願いします! ブクマよろしくお願いします!
どんどん追記・更新していくので、ブックマークやシェアよろしくお願いします!

スクラッチプログラミングのゲーム攻略

スクラッチプログラミングのゲーム

    • 厳選されたスクラッチ人気作品リストがレビュー付きで楽しめます
      趣味に関するスクラッチ作品例
      勉強になるスクラッチ作品