スクラッチでオンラインゲームを作る⑨ スケールアップしよう

スクラッチでオンラインゲームを作る⑨ スケールアップしよう
グリフパッチ(動画)
ok-scratch(解説記事)

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

クラウド変数を複数使ってスケールアップさせるぞ。これでパフォーマンスがグッと向上する!
スターター
プロジェクト
なし
難しさ

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

LOADING...

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

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

前回(ぜんかい)クローンを使(つか)って(べつ)プレイヤーを(より)画面(がめん)表示(ひょうじ)させて、さらに(うご)きの同期(どうき)成功(せいこう)したぞ!でもちょっと()って。同時(どうじ)に3つ4つのタブを(ひら)いて(うご)きをチェックすると、なんかカクカクしちゃうみたい!あっちゃー、これじゃあオンラインゲームエンジンとしては未完成(みかんせい)だね。(ぼく)らが目指(めざ)すトップクラスのオンラインゲームはMMOと(しょう)しても過言(かごん)ではないクオリティじゃないとね!
スクラッチでオンラインゲームを作る⑨ スケールアップしようを語るok-scratch ok-scratch

u003cpu003eMMOは、u003cstrongu003eMassivelyマッシブリー Multiplayerマルチプレイヤー Onlineu003c/strongu003eのことで、多人数(たにんずう)同時(どうじ)参加(さんか)(がた)のオンラインゲームのことだよ。(かる)いゲームなら数十人(すうじゅうにん)同時(どうじ)接続(せつぞく)しても大丈夫(だいじょうぶ)なオンラインゲームエンジンじゃないとね。u003c/pu003e

今回(こんかい)目標(もくひょう)「クラウド変数(へんすう)()やしてスケールアップさせる」

そこで今回(こんかい)はスケールアップ、つまり性能(せいのう)向上(こうじょう)をしていきたいと(おも)う。スクラッチの性能(せいのう)向上(こうじょう)色々(いろいろ)あるけど、スケールアップという手法(しゅほう)(ため)すよ。これは最近(さいきん)のIT現場(げんば)では当然(とうぜん)のように使(つか)われる言葉(ことば)だから、プロのエンジニアが()たら「え?スクラッチってそんな本格的(ほんかくてき)なプログラミングなの?」って戸惑(とまど)うと(おも)う。作戦(さくせん)としては単純(たんじゅん)で、(いま)は1つしか使(つか)ってないクラウド変数(へんすう)合計(ごうけい)()使(つか)って()こうぜ、っていうこと。クラウド変数(へんすう)使(つか)っている箇所(かしょ)を8(かい)()(かえ)すだけだから、スケールアップという高度(こうど)手法(しゅほう)挑戦(ちょうせん)するけど作業(さぎょう)自体(じたい)単純(たんじゅん)だよ。そこは安心(あんしん)してほしい。っていうか(いま)クラウド変数(へんすう)1つで同期(どうき)処理(しょり)実現(じつげん)できてるってことがワンダフルだよね!つまり、みんなワンダフルなスクラッチャーってことだよ!ナイスぅ!

スケールアップを実装(じっそう)する

さっそくいこう!

メッセージ「クラウド - セットアップ」を()()ったとき

ここでクラウド変数(へんすう)明示的(めいじてき)文字(もじ)()して、リスト「★クラウドデータ」に追加(ついか)していたね。
このブロックを複製(ふくせい)して8(かい)()(かえ)すよ。
こんな(かん)じ↓

クラウド変数(へんすう)合計(ごうけい)8つ用意(ようい)しよう

(あたら)しいクラウド変数(へんすう)用意(ようい)しよう。(いま)ってクラウド変数(へんすう)1と2があるから、3から8も(つく)る。
ふぅ!地道(じみち)

変数(へんすう)()()える

クラウド変数(へんすう)が8つ用意(ようい)できたら、それぞれブロックにセットしていこう。ハマってる変数(へんすう)(みぎ)クリックすると、変数(へんすう)変更(へんこう)できる。ブロックを()()えるより(らく)だよ。
これも全部(ぜんぶ)やってこうする↓
よし。

メッセージ「クラウド - ティック」を()()ったら

ティック処理(しょり)(おな)じことをやるよ。
クラウド変数(へんすう)以外(いがい)にも引数(ひきすう)「☁(ばん)(ごう)」も()える(てん)注意(ちゅうい)だね。

ブロック定義(ていぎ)「クラウド変数(へんすう)送信(そうしん)する」

ここはちょっとトリッキーだよ。エンコード文字列(もじれつ)をクラウド変数(へんすう)にセットするところだね。(いま)まではクラウド変数(へんすう)1だけだったからシンプルだったけど、今後(こんご)は8つあるクラウド変数(へんすう)のどれにセットすればいいだろうか。うん、(こた)えはシンプル。ランダムにセットしよう。

変数(へんすう)「★クラウド変数(へんすう)のチャンネル」を用意(ようい)する

(あたら)しくランダムな数字(すうじ)()れておく変数(へんすう)(つく)ろう。
乱数(らんすう)()れる
これに乱数(らんすう)()れる。最小(さいしょう)()は1でいいとして、最大(さいだい)()(なに)にしようか。まぁクラウド変数(へんすう)(かず)(おな)じにするから8だね。でも8って()いてしまうよりは、動的(どうてき)算出(さんしゅつ)できるようにしておこう。さっき「クラウド - セットアップ」のところをスケールアップ作業(さぎょう)したときに、クラウド変数(へんすう)(かず)(おな)じだけリスト「★クラウドデータ」の(なが)さは()えるようにしたよね。だからこのリストの(なが)さを使(つか)うのが()さそうだね。
後日(ごじつ)(うご)きの同期(どうき)使(つか)うクラウド変数(へんすう)(かず)()わるかもしれないけど、こうしておけば安心(あんしん)だ。

チャンネルによって使(つか)うクラウド変数(へんすう)()える

条件(じょうけん)分岐(ぶんき)だ!ここは(じつ)地道(じみち)なんだ……。スケールアップは地道(じみち)作業(さぎょう)(おお)いね。いや、地道(じみち)作業(さぎょう)(おお)いということはそれだけコーディングが洗練(せんれん)されている証拠(しょうこ)でもある。
(ふん)探索(たんさく)()アルゴリズム
ここさ、シンプルに条件(じょうけん)分岐(ぶんき)を8つ(つく)るんじゃなくて、二(ふん)探索(たんさく)()《にぶんたんさくき》という有名(ゆうめい)なアルゴリズムを実装(じっそう)するよ。チャンネルが1から8のどれなのかを調(しら)べるんだけど、まず5よりも(ちい)さいかどうかを調(しら)べる。5よりも(ちい)さかったら1,2,3,4のどれかだから、今度(こんど)は3より(ちい)さいかどうか調(しら)べる。3よりも(ちい)さかったら2よりも(ちい)さいか調(しら)べる。2よりも(ちい)さいなら1だし、そうじゃないなら2ってことになる。こういうアルゴリズムを二(ふん)探索(たんさく)()というんだ。うん、(なに)(うれ)しいの?って(おも)ったよねwちょっと↓()てみて。
もしも二(ふん)探索(たんさく)()使(つか)わずに、チャンネルが1ならクラウド変数(へんすう)1を使(つか)う、っていう条件(じょうけん)分岐(ぶんき)を8()(つく)るとしたらどうなるかな。チャンネルが1なら判定(はんてい)(かい)()でOKだけど、チャンネルが8だった場合(ばあい)判定(はんてい)を8(かい)(おこな)うことになるよね。一方(いっぽう)で、二(ふん)探索(たんさく)()っていうアルゴリズムを使(つか)うと、(かなら)階層(かいそう)(ふか)以内(いない)(かず)()つかるっていう法則(ほうそく)がある。つまりチャンネルが8でも判定(はんてい)は2(かい)だけで()()んだ。でもチャンネルが1でも判定(はんてい)は3(かい)になるんだけどね。
チャンネルが1だった場合(ばあい)
  • 5より(ちい)さいですか? → YES
  • 3より(ちい)さいですか? → YES
  • 2より(ちい)さいですか? → YES = 1
チャンネルが8だった場合(ばあい)
  • 5より(ちい)さいですか? → NO
  • 7より(ちい)さいですか? → NO = 8
チャンネルが5だった場合(ばあい)
  • 5より(ちい)さいですか? → NO
  • 7より(ちい)さいですか? → YES
  • 6より(ちい)さいですか? → YES = 5
こんな(かん)じ!今回(こんかい)はマックスが8だけど、マックスが(おっ)きければ(おお)きいほど効果(こうか)発揮(はっき)するよ。こういうアルゴリズムがプログラミングにはいっぱいあるんだ。
スクラッチでオンラインゲームを作る⑨ スケールアップしようを語るok-scratch ok-scratch

u003cpu003e(ぼく)文系(ぶんけい)だったから数式(すうしき)とかは苦手(にがて)だったけど、アルゴリズムは便利(べんり)だなぁって(おも)えた。理解(りかい)するまで(ひと)より時間(じかん)かかったけどwu003c/pu003eu003cpu003eたぶん二(ふん)探索(たんさく)()はITパスポートとか基本(きほん)情報(じょうほう)技術(ぎじゅつ)(しゃ)試験(しけん)とか、ガチな資格(しかく)試験(しけん)でも出題(しゅつだい)されるようなガチでガチガチな知識(ちしき)。u003c/pu003e

(ふん)探索(たんさく)()実装(じっそう)する
じゃあスクラッチで(つく)ってみよう。
5よりも(ちい)さいかどうか
3よりも(ちい)さいかどうか
複製(ふくせい)すると(らく)だね。
2よりも(ちい)さいかどうか
チャンネルが1のとき
チャンネルが1だったらクラウド変数(へんすう)1をエンコード文字列(もじれつ)にする。
チャンネルが2のとき
チャンネルが2だったらクラウド変数(へんすう)2をエンコード文字列(もじれつ)にする。
4よりも(ちい)さいかどうか
ここも複製(ふくせい)すると(らく)だね。
3と4の結果(けっか)はこう↓
5,6,7,8も(つく)ろう
がっつり複製(ふくせい)しよう。
「5よりも(ちい)さいかどうか」の「でなければ」にペーストして(かく)()()えよう。
(ふん)探索(たんさく)()ではない場合(ばあい)(くら)べる
みんなは(つく)らなくていいけど、(ため)しにシンプルに全部(ぜんぶ)チェックする条件(じょうけん)分岐(ぶんき)右隣(みぎどなり)(つく)ってみた↓
(ひだり)が二(ふん)探索(たんさく)()で、(みぎ)がシンプルな条件(じょうけん)分岐(ぶんき)連続(れんぞく)(なが)さはだいたい(おな)じだね。まぁだけど本当(ほんとう)ならシンプルの(ほう)はいちいち「このスクリプトを()める」ブロックも()いたほうがいいから、結果(けっか)はかなり(なが)くなりそうだね。ってなると(なが)さは二(ふん)探索(たんさく)()のほうが(みじか)くなるか。ただ二(ふん)探索(たんさく)()のほうがパッと()()かりにくっていうデメリットあるね。ここでは()()よりも判定(はんてい)回数(かいすう)(すく)なくなるっていうメリットを優先(ゆうせん)してるからいいけどね。

テストする

クラウド変数(へんすう)1から8まで()がちゃんと(はい)るか、変数(へんすう)表示(ひょうじ)して調(しら)べてみよう。
(すこ)(ねこ)をグリグリ(うご)かしてみて、(ぜん)変数(へんすう)()(はい)ればOKだ!(はい)らない変数(へんすう)があったら、さっきの二(ふん)探索(たんさく)()とか、今回(こんかい)修正(しゅうせい)した箇所(かしょ)(さい)確認(かくにん)してみてね。

ラグのテストをする

さぁ、スケールアップはこれで完成(かんせい)だ。いままではタブを3つ4つ(なら)べるとカクカクするときがあったけど解消(かいしょう)しているはずだ。テストしてみよう!
4つでもしっかりスムーズに(うご)いてるぞ!きたぁ!

次回(じかい)

今回(こんかい)はスケールアップさせてスムーズな同期(どうき)確立(かくりつ)したぞ。これで理論(りろん)(じょう)は100(にん)同時(どうじ)接続(せつぞく)のオンラインゲームにも()えられるエンジンができたことになる!すごくね?さぁさぁ、もう完成(かんせい)()いたいところだけど、このままじゃあ()めが(あま)い。しっかり(つく)()んでこそのトップクラス・オンラインゲームエンジンだ。(つぎ)退場(たいじょう)処理(しょり)(つく)っていこう。どうゆうことかって?たとえば(いま)状態(じょうたい)で、4つのタブのうち1つを()じても、(ほか)画面(がめん)から(ねこ)()えないんだ。でも(ほか)(ひと)からしたら、()まってる(ひと)がタブを()じたのか、ただ()まってるだけなのか()からないよね。そこで、ある程度(ていど)ずっと()まってる(ひと)がいたら()じたと判定(はんてい)して表示(ひょうじ)()すっていう処理(しょり)をしたいと(おも)う!次回(じかい)ね。よぉし、じゃあ()っててくれ。なんならキミのオンラインゲームのアイデアを(あたた)めながら()っててね。どんなゲームを(つく)りたい?
ブクマよろしくお願いします! ブクマよろしくお願いします!
どんどん追記・更新していくので、ブックマークやシェアよろしくお願いします!

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

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

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