スクラッチでオンラインゲームを作る② エンコードする

スクラッチでオンラインゲームを作る② エンコードする
グリフパッチ(動画)
ok-scratch(解説記事)

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

クラウド変数を使った技の1つ、エンコード処理について見ていくぞ!
スターター
プロジェクト
なし
難しさ

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

LOADING...

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

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

前回(ぜんかい)はクラウド変数(へんすう)基本的(きほんてき)使(つか)(かた)()て、(べつ)のタブで(ひら)いた2つのスクラッチキャットが(おな)(うご)きをする同期(どうき)処理(しょり)実装(じっそう)したね。前回(ぜんかい)のラストはこんな(かん)じ↓で、タブAとタブBで(おな)作品(さくひん)(ひら)いて(なら)べながら(うご)きを(たし)かめた!
ただ(うご)きがカクカクしてて、まだまだ(ぼく)らが(もと)めるクオリティにはなってない。(ぼく)らはここじゃあ()まれない。そうだよね!?はるか(たか)みを目指(めざ)して、着実(ちゃくじつ)に一()ずつ(のぼ)っていこう!

今回(こんかい)目標(もくひょう)は「エンコード」

今回(こんかい)目標(もくひょう)は、クラウド変数(へんすう)同期(どうき)処理(しょり)をスムーズにするためにエンコード処理(しょり)というものを実装(じっそう)していくよ。

エンコードってなんやねん

ちょっと()って、エンコードの説明(せつめい)をする(まえ)にまずはカクカクしている原因(げんいん)について復習(ふくしゅう)しておこう。()(うご)かすのはちょっと(さき)だ。

同期(どうき)処理(しょり)にはラグがある

クラウド変数(へんすう)同期(どうき)する(さい)は、どうしても0.1(びょう)のラグが(しょう)じるという仕様(しよう)だったね。そしていまの実装(じっそう)ではクラウド変数(へんすう)を2つ使(つか)っていたね。
  1. X座標(ざひょう)をクラウド変数(へんすう)1にセット
  2. Y座標(ざひょう)をクラウド変数(へんすう)2にセット
これをもっと具体的(ぐたいてき)()くと下記(かき)イメージになる。
① X座標(ざひょう)をクラウド変数(へんすう)1にセットタブAでX座標(ざひょう)をクラウド変数(へんすう)1にセットすると、0.1(びょう)()にタブBでクラウド変数(へんすう)1の()更新(こうしん)されてX座標(ざひょう)反映(はんえい)される
② Y座標(ざひょう)をクラウド変数(へんすう)2にセット(すこ)(おく)れてタブAでY座標(ざひょう)をクラウド変数(へんすう)2にセットすると、0.1(びょう)より(すこ)(おく)れてタブBでクラウド変数(へんすう)2の()更新(こうしん)されてY座標(ざひょう)反映(はんえい)される
つまり、(よこ)(たて)(よこ)(たて)、という順番(じゅんばん)(すこ)しずつ(おく)れながら更新(こうしん)するからカクカクしてしまうんだ。2つ以上(いじょう)のクラウド変数(へんすう)使(つか)って(うご)きを同期(どうき)させようとするとどうしても発生(はっせい)してしまうラグなんだ……。

このラグは改善(かいぜん)できる

カクカクの原因(げんいん)はクラウド変数(へんすう)を2つ使(つか)っているから。ならクラウド変数(へんすう)を1つしか使(つか)わなければカクカクは改善(かいぜん)する、単純(たんじゅん)だね!この方針(ほうしん)採用(さいよう)するぞ。

どうやって1つにするか

肝心(かんじん)なのは方法(ほうほう)(ろん)だね。シンプルに、X座標(ざひょう)とY座標(ざひょう)合体(がったい)させてクラウド変数(へんすう)1にセットする方法(ほうほう)()きたいと(おも)う。
変更(へんこう)(まえ)
X座標(ざひょう) = 142 → クラウド変数(へんすう)1 = 142Y座標(ざひょう) = 30 → クラウド変数(へんすう)2 = 30
変更(へんこう)()
X座標(ざひょう) = 142 → クラウド変数(へんすう)1 = 142Y座標(ざひょう) = 30 → クラウド変数(へんすう)1 = 14230こんな(かん)じでどうだろう?クラウド変数(へんすう)1にX座標(ざひょう)142もY座標(ざひょう)30も()ぜて()れて、14230っていう数字(すうじ)(つく)るっていうこと。

問題(もんだい)発生(はっせい)

うーん、なんか(いや)予感(よかん)がするよね。なんだろう。これの問題点(もんだいてん)()かる?この14230を解読(かいどく)するときに(こま)ると(おも)うんだよ。これがXとYを合体(がったい)させた数字(すうじ)ってことは()かってても、このままじゃ(つぎ)のどのパターンなのか()からない……。x = 14 と y = 230 かもしれない
x = 142 と y = 30 かもしれない
x = 1 と y = 4230 かもしれない

解決策(かいけつさく)

これを解決(かいけつ)するためにXとYの数値(すうち)(まえ)に「ケタ」を(しめ)(かず)()いてみよう。Xは142という3(けた)《けた》の数字(すうじ)だから、まず3と()いてから142を()く。()わせて3142と()く。Yは30という2(けた)数字(すうじ)だから、まず2と()いてから30を()く。()わせて230と()く。この2つを合体(がったい)させてみよう。3142230注釈(ちゅうしゃく)をつけてこの数字(すうじ)分解(ぶんかい)してみると下記(かき)のようになるよ。
おおお!なんか()さそう!()かる()かる!暗号(あんごう)みたいだった数字(すうじ)意味(いみ)()ったデータとして()えてきたね。
  • ケタ数(すう)またはプレフィックス ケタ数(すう)またはプレフィックス
    u003cpu003eこのケタ(すう)みたいに数字(すうじ)(なが)さを(しめ)数字(すうじ)のことをプレフィックスって()んでるけど、正式(せいしき)名称(めいしょう)じゃないかも。プレフィックスってよくIPアドレス関連(かんれん)使(つか)われる専門(せんもん)用語(ようご)で、IPアドレスの(なが)さを意味(いみ)する数字(すうじ)なんだよね。その(なが)れでこれも数字(すうじ)(なが)さを(あらわ)数字(すうじ)だからプレフィックスって()んでるだけかも。すまん、正式(せいしき)名称(めいしょう)(ちが)うかもしれないけど、そこまで重要(じゅうよう)(はなし)でもないからケタとかケタ(すう)って()んでもいいし、プレフィックスって()んでもいいと(おも)う。u003c/pu003e

結果(けっか)

クラウド変数(へんすう)を1つにまとめることができそうだね。タブAでXとYを合体(がったい)させてクラウド変数(へんすう)1にセットする → タブBでクラウド変数(へんすう)1を分解(ぶんかい)してXとYにセットするこれでラグが0.1(びょう)限定(げんてい)できるね!理論(りろん)(じょう)ではカクカクもかなり改善(かいぜん)するはずだ。

で、エンコードってなに?

ここまで()てきた、(なに)かと(なに)かを()ぜて意味(いみ)のあるカタマリにすることをエンコードっていうんだ。今回(こんかい)だとXとYをケタ(すう)()みで合体(がったい)させることがエンコードになるよ。ちなみにそのカタマリをもとのXとYに分解(ぶんかい)することをデコードって()ぶよ。エンコードもデコードもプロの現場(げんば)では毎回(まいかい)のように()()専門(せんもん)用語(ようご)だよ。
  • エンコード、デコード、覚(おぼ)えられない!? エンコード、デコード、覚(おぼ)えられない!?
    u003cpu003e合体(がったい)させるのがエンコードで、それを分解(ぶんかい)させるのがデコードといったけど、時間(じかん)()つと「どっちがエンコードでどっちがデコードだったっけ?」ってなる。はじめの(ころ)(ぼく)はなってたwu003c/pu003eu003cpu003eそのときに無理(むり)やり(おも)いついた(おぼ)(かた)がある。くだらないけどwu003c/pu003eu003cpu003e「ENCODEエンコード」と「DECODEデコード」の最初(さいしょ)の2文字(もじ)注目(ちゅうもく)してみて。u003c/pu003eu003cpu003eENとDEだよね。Eが(まえ)にあるからエンコードが(さき)(=合体(がったい))で、Eが(うし)ろにあるからデコードが(あと)(=分解(ぶんかい))って(おぼ)えた。……フッ、(みと)めたくないものだな。自分(じぶん)自身(じしん)(わか)(ゆえ)(あやま)ちというものを。u003c/pu003eu003cpu003eu003c/pu003e

エンコード処理(しょり)準備(じゅんび)しよう

前置(ぜんち)きがなっがw はやく実装(じっそう)したくてウズウズしてるぜ!こっからは()(うご)かしていこう!

変数(へんすう)「エンコード文字列(もじれつ)」を用意(ようい)する

エンコードされた数字(すうじ)()れる変数(へんすう)(つく)ろう。
  • 文字列(もじれつ)というよりは数字(すうじ)列(れつ)では? 文字列(もじれつ)というよりは数字(すうじ)列(れつ)では?
    u003cpu003eエンコードした(あと)数字(すうじ)のカタマリなのだから、文字列(もじれつ)というよりも数字(すうじ)(れつ)という名前(なまえ)適当(てきとう)では?と(おも)うかもしれないね。でもプログラミングにおいて数字(すうじ)(れつ)という言葉(ことば)()()れない。一方(いっぽう)で、文字列(もじれつ)という言葉(ことば)頻繁(ひんぱん)使(つか)われているんだ。u003c/pu003eu003cpu003eあと、プログラミングにおいては数字(すうじ)数値(すうち)(こと)なるケースがある。数字(すうじ)文字(もじ)仲間(なかま)として(かんが)えられているんだ。わかりにくいから(れい)()すね。数値(すうち)の1と数値(すうち)の2を()すと普通(ふつう)に3になる。でも数字(すうじ)の1と数字(すうじ)の2を()すと12になる。こういうことがプログラミングでは一般的(いっぱんてき)なので、今回(こんかい)エンコードされるデータも文字列(もじれつ)()ぶのが(ただ)しいんだ。u003c/pu003e

初期(しょき)()する

適当(てきとう)()いてる場所(ばしょ)()いて、空白(くうはく)初期(しょき)()しておこう。

()変数(へんすう)用意(ようい)しておく

エンコードの途中(とちゅう)()保持(ほじ)しておく予定(よてい)なので、「()」という一()変数(へんすう)用意(ようい)しておく!(あと)使(つか)うよ。

ブロック定義(ていぎ)「◯をエンコードする」を用意(ようい)する

エンコード処理(しょり)はブロック定義(ていぎ)にしておくと便利(べんり)だ。

テスト(よう)のデータを(わた)しておく

エンコードのブロック定義(ていぎ)(つく)()んでいく(まえ)に、とりあえず1とか適当(てきとう)なデータを(わた)しておこう。

()変数(へんすう)引数(ひきすう)をセットする

()()った()引数(ひきすう)()ぶ)を一()変数(へんすう)()れておこう。

テストする

うん、(うご)いてるね。

エンコード処理(しょり)(つく)()()

ここまでは下準備(したじゅんび)みたいなものだ!どんどん洗練(せんれん)させていこう。

()(まる)めておく

なにかのはずみで「100.5」みたいな数字(すうじ)がブロック定義(ていぎ)(わた)されてしまうと(こま)るよね。なぜなら「.」は文字(もじ)としてみなされてしまうからだ。クラウド変数(へんすう)(まん)(いち)でも文字(もじ)をセットしないように、「.」が()えるように演算(えんざん)ブロックを1つかませておくよ。

ケタ(すう)調(しら)べる

ケタ(すう)調(しら)べるには、数字(すうじ)(なが)さを調(しら)べればOKだ。適当(てきとう)場所(ばしょ)下記(かき)ブロックを(つく)っておこう。
これで()(なが)さを調(しら)べられる。()が100なら(なが)さは3だし、()が4なら(なが)さは1だ。
スクラッチでオンラインゲームを作る② エンコードするを語るok-scratch ok-scratch

u003cpu003e()かりづらいけど、このオレンジの()変数(へんすう)()であって、引数(ひきすう)()(ピンク)ではないよ。u003c/pu003e

ケタ(すう)数字(すうじ)()()わせる

ケタ(すう)(つづ)いて数字(すうじ)()()わせるっていう作戦(さくせん)だったよね。これは下記(かき)のように実現(じつげん)できるぞ。
で、こうなる↓
これで()が100なら、ケタ(すう)は3だから、()()わせて「3100」になる!

エンコード文字列(もじれつ)追記(ついき)する

この()()わせた()変数(へんすう)「エンコード文字列(もじれつ)」に追加(ついか)するよ。
で、こうなる↓

エンコード文字列(もじれつ)にセットする

一連(いちれん)演算(えんざん)結果(けっか)変数(へんすう)「エンコード文字列(もじれつ)」にセットする。
これで(うし)ろにどんどん()追記(ついき)されていくね。

テストする

クリックしてテストしよう!
うん、処理(しょり)追加(ついか)してもういっちょ。
よし、さらに追加(ついか)してダメ()しだ!
うっし!意図(いと)したとおりにエンコードできた!

次回(じかい)

まだまだ中途半端(ちゅうとはんぱ)だけど、ひとまずエンコードの基本的(きほんてき)処理(しょり)はできた!エンコードなんて専門的(せんもんてき)(むずか)しい処理(しょり)だったよね。でもここまで一緒(いっしょ)にできたならスゴイよ!ナイス!次回(じかい)はエンコードして合体(がったい)した文字列(もじれつ)を、デコード(分解(ぶんかい))する処理(しょり)(つく)ってみよう。そしてX座標(ざひょう)とY座標(ざひょう)同期(どうき)改善(かいぜん)して、どのくらい(うご)きがスムーズになるのかを(ため)そう。

(のう)トレ(こた)

前回(ぜんかい)(のう)トレの(こた)えは、今回(こんかい)のエンコード処理(しょり)(とお)してわかったかな?392411は924と1です。15234は5と34です。では、3322291は(なん)(なに)(こた)えは32291だね!(はや)めに(つぎ)記事(きじ)公開(こうかい)するぜ。
ブクマよろしくお願いします! ブクマよろしくお願いします!
どんどん追記・更新していくので、ブックマークやシェアよろしくお願いします!

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

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

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