クラウド変数でユーザー名を共有する方法

クラウド変数でユーザー名を共有する方法
ok-scratch
数字しか格納できないクラウド変数を使って、ユーザー名を共有する方法を紹介するぞ!
スターター
プロジェクト
リミックス用プロジェクトへ
難しさ
タグ

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

LOADING...

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

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

このチュートリアルはオンラインゲームの(つく)(かた)(とお)して(つく)ったスプライト「クラウドプレイヤー」を使(つか)うことを前提(ぜんてい)にしているよ。まだ(つく)ってないという(ひと)(さき)にオンラインゲームの(つく)(かた)()るか、(まえ)のチュートリアルに()ってスプライト「クラウドプレイヤー」をバックパックに()れておこう!
クラウド変数でユーザー名を共有する方法を語るok-scratch ok-scratch

u003cpu003eちなみにこのチュートリアルはu003ca href=u0022https://scratch.coach/lesson/how-to-make-others-leave/u0022u003e⑩退場(たいじょう)処理(しょり)(つく)るu003c/au003eまで()わってれば(つく)れるよ。u003c/pu003e

今回(こんかい)目標(もくひょう)「マウスを()せたらユーザー(めい)表示(ひょうじ)される」

数字(すうじ)しか共有(きょうゆう)できないクラウド変数(へんすう)に、強引(ごういん)文字(もじ)()れて共有(きょうゆう)する方法(ほうほう)実装(じっそう)していくぞ。

u003cpu003eここでu003cstrongu003e(ちょう)重要(じゅうよう)警告(けいこく)u003c/strongu003eをしておく!u003c/pu003eu003cpu003eスクラッチではクラウド変数(へんすう)使(つか)ってu003cstrongu003e自由(じゆう)会話(かいわ)ができるチャットを(つく)ることを規約(きやく)として禁止(きんし)u003c/strongu003eしています。絶対(ぜったい)()けましょう。(くわ)しくはu003ca href=u0022https://ja.scratch-wiki.info/wiki/%E3%82%AF%E3%83%A9%E3%82%A6%E3%83%89%E3%83%81%E3%83%A3%E3%83%83%E3%83%88%E7%A6%81%E6%AD%A2%E4%BB%A4u0022 target=u0022_blanku0022 rel=u0022noreferrer noopener nofollowu0022u003eクラウドチャット禁止令(きんしれい)u003c/au003eを参照(さんしょう)してください。u003c/pu003e

↑この警告(けいこく)()んでね。でも今回(こんかい)はユーザー(めい)共有(きょうゆう)するために文字(もじ)仕込(しこ)()から、規約(きやく)違反(いはん)にはならないよ。安心(あんしん)してほしい。最終的(さいしゅうてき)なゴールとしては(ほか)のプレイヤーにマウスを()せたら、そのプレイヤーのユーザー(めい)表示(ひょうじ)されるようにしていきたいと(おも)ってる。こんな(かん)じ↓
ユーザー(めい)共有(きょうゆう)できれば、スコアなども一緒(いっしょ)共有(きょうゆう)してクラウドランキングみたいなものを(つく)ったりすることも可能(かのう)になるから、やりたいことがもっともっと実現(じつげん)できるようになる!スク(とも)やリア(とも)一緒(いっしょ)にプレイしてお(たが)いを認識(にんしき)できたりもするし、(たの)しいことが(ひろ)がっていく予感(よかん)がヒシヒシだ!ってことでコーディングしていこうか!

まず復習(ふくしゅう)がてら作戦(さくせん)把握(はあく)する

文字(もじ)共有(きょうゆう)をするにあたって、2つブロック定義(ていぎ)追加(ついか)する予定(よてい)。その(まえ)現在(げんざい)処理(しょり)とデータ構造(こうぞう)復習(ふくしゅう)しておこうと(おも)う。

復習(ふくしゅう)

すでにスプライト「クラウドプレイヤー」の処理(しょり)把握(はあく)できているなら、ここは()ばしてもOKだ。

クラウド変数(へんすう)受信(じゅしん)する(なが)

(いま)まで(つく)ったスプライト「クラウドプレイヤー」を()てみると「順番(じゅんばん)にデコードする」というブロック定義(ていぎ)があるよね。
このブロック定義(ていぎ)ではクラウド変数(へんすう)経由(けいゆ)共有(きょうゆう)されたデータ「エンコード文字列(もじれつ)」の中身(なかみ)を1つずつ()()いて変数(へんすう)()」に結果(けっか)()れるんだったね。
この変数(へんすう)()」をいろいろな用途(ようと)使(つか)っていくっていうのがおおざっぱな(なが)れだね。

順番(じゅんばん)」が()かりにくい

現在(げんざい)共有(きょうゆう)するデータが(すく)ないので、1番目(ばんめ)はプレイヤーUID、2番目(ばんめ)はX座標(ざひょう)、3番目(ばんめ)はY座標(ざひょう)(おぼ)えておける。でも(オンライン(おに)ごっこで実装(じっそう)したように)データ(かず)()えていくと「順番(じゅんばん)」なんだっけ?となる。しかもスプライト「クラウドプレイヤー」では遅延(ちえん)をなくすためにバッファリングという技巧(ぎこう)(ほどこ)してあるので、エンコード文字列(もじれつ)中身(なかみ)単純(たんじゅん)に1(ばん)(ばん)という順番(じゅんばん)では(あらわ)すことができないよね。つまり、エンコード文字列(もじれつ)には2種類(しゅるい)のデータが格納(かくのう)されていると()える。
↑このように最初(さいしょ)にリピートしないデータ((かり)固定(こてい)データと()ぶ)と、そのあとにリピートするバッファリングデータが(つづ)よね。

順番(じゅんばん)にデコードする処理(しょり)はどこで実行(じっこう)されるか

種類(しゅるい)のデータがエンコード文字列(もじれつ)格納(かくのう)されていることを()まえて、ブロック定義(ていぎ)順番(じゅんばん)にデコードする」はどこで実行(じっこう)されているか(さい)確認(かくにん)しておこう。
クラウド変数(へんすう)受信(じゅしん)する
(つぎ)のプレイヤーデータを(うつ)
クローンティック

種類(しゅるい)のデータの()()(かた)(ちが)

()づいている(ひと)もいると(おも)うけど、固定(こてい)データとバッファリングデータは()()される場所(ばしょ)明確(めいかく)(ちが)う。
  • 固定(こてい)データであるプレイヤーUIDは、ブロック定義(ていぎ)「クラウド変数(へんすう)受信(じゅしん)する」と「(つぎ)のプレイヤーデータを(うつ)す」でデコードされている
  • バッファリングデータはブロック定義(ていぎ)「クローンティック」でデコードされている
このような(ちが)いがあるってことを認識(にんしき)しておこう。

今回(こんかい)作戦(さくせん)内容(ないよう)

で、本題(ほんだい)だ。今回(こんかい)()れたいユーザー(めい)固定(こてい)データとバッファリングデータのどっちかな。ユーザー(めい)はとくに()わることもないのでわざわざリピートして何回(なんかい)共有(きょうゆう)する必要(ひつよう)はないから、固定(こてい)データだね。視覚(しかく)()するとこんな(かん)じにしたい↓
ということで、そろそろコーディングしていこうか。

改修(かいしゅう)を1つ

本題(ほんだい)をコーディングする(まえ)に、一箇所(かしょ)だけ改修(かいしゅう)しておこうと(おも)う。

ブロック定義(ていぎ)編集(へんしゅう)する

ブロック定義(ていぎ)順番(じゅんばん)にデコードする」を編集(へんしゅう)して、文字(もじ)「//」と引数(ひきすう)「メモ」を追加(ついか)してほしい。

ブロック定義(ていぎ)実行(じっこう)するとこにデータ(めい)追加(ついか)する

このブロック定義(ていぎ)使(つか)われている箇所(かしょ)で、いったいなんのデータをデコードしようとしているのか()()んでおこう。
クラウド変数(へんすう)受信(じゅしん)する
(つぎ)のプレイヤーデータを(うつ)
クローンティック
クラウド変数でユーザー名を共有する方法を語るok-scratch ok-scratch

u003cpu003eこの引数(ひきすう)はとくに使(つか)(みち)はないんだけど、こうするとu003cemu003e後日(ごじつ)見返(みかえ)したときに最高(さいこう)()かりやすいu003c/emu003eと(おも)わない?u003c/pu003eu003cpu003eちなみにスラッシュを2つ追記(ついき)したのは、Javascriptなどのプログラミングではメモを()くときにはスラッシュを2つ()いてから()くというルールがあるからなんだ。それをなぞってみた。u003c/pu003e

文字列(もじれつ)をエンコードする

いまあるブロック定義(ていぎ)「エンコードする」は、数値(すうち)()(あつか)うことはできても文字列(もじれつ)()(あつか)うことはできないよね。そのため文字列(もじれつ)をエンコードする仕組(しく)みを、数字(すうじ)のエンコードとは(べつ)(つく)っていく必要(ひつよう)があるんだ。

準備(じゅんび)

じゃあ(あたら)しく文字列(もじれつ)をエンコードするために以下(いか)の2つの重要(じゅうよう)なコーディングをしていくよ。
  • あらかじめエンコードできる文字(もじ)一覧(いちらん)保持(ほじ)したリスト
  • 文字列(もじれつ)をエンコードする専用(せんよう)のブロック定義(ていぎ)

リストを(つく)

文字(もじ)一覧(いちらん)というリストを(つく)るよ。このリストはゲーム開始(かいし)()変更(へんこう)されることはないから、()わらない変数(へんすう)」という意味(いみ)で「定数(ていすう)()ばれる。でもスクラッチだと定数(ていすう)という概念(がいねん)はないから、「これは定数(ていすう)として(あつか)う」と明示(めいじ)するために接頭語(せっとうご)に■を()けておこう。
初期(しょき)()する
このリストを初期(しょき)()する。このリストには想定(そうてい)される英数字(えいすうじ)をすべて()れていくんだけど、95文字(もじ)あるから1つずつ手作業(てさぎょう)()れるのは手間(てま)すぎるんだ。だからトリッキーだけど初期化(しょきか)(よう)のループを1つ(つく)っておくよ。
リストの(なか)削除(さくじょ)するところから(はじ)める
どこか適当(てきとう)場所(ばしょ)(つぎ)のブロックを()いてみて。
(みどり)(はた)()されたとき、とかは不要(ふよう)だよ。クリックして実行(じっこう)することになるから。
リストの1番目(ばんめ)文字(もじ)をズラッと()れる
(つづ)けて(つぎ)文字列(もじれつ)をリストに追加(ついか)しよう。文字(もじ)()半角(はんかく)空白(くうはく)だから注意(ちゅうい)しっかり(ぜん)文字(もじ)コピーしてね。 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[]^_`abcdefghijklmnopqrstuvwxyz{|}~↑をコピペして(つぎ)のようにブロックを()いてね。
ループを()こう
文字(もじ)(すう)(かず)だけループさせる
リストの1番目(ばんめ)にズラッと追加(ついか)した文字(もじ)(かず)だけ()(かえ)条件(じょうけん)(しき)(つく)りたいから、(つぎ)のブロックを用意(ようい)して↓
これをループの条件(じょうけん)(しき)()てはめよう。
先頭(せんとう)文字(もじ)から順番(じゅんばん)にリストに追加(ついか)していく
このループの(なか)で、先頭(せんとう)文字(もじ)から順番(じゅんばん)追加(ついか)していくよ。先頭(せんとう)文字(もじ)取得(しゅとく)する方法(ほうほう)(つぎ)のブロックで実現(じつげん)できる。
リストには1つだけデータが(はい)った状態(じょうたい)だよね。だから「リストの(なが)さ」というブロックからは「1」が(かえ)ってくる。リストの1番目(ばんめ)にはさっきのズラッと(なが)文字列(もじれつ)(はい)ってて、最初(さいしょ)文字(もじ)空白(くうはく)だから、↑このブロックが(かえ)すのは空白(くうはく)文字(もじ)になる。これをリストに追加(ついか)してみよう。
できあがったブロックを、ループ(ない)実行(じっこう)するように配置(はいち)しよう。
これでリストの(なが)さはどんどん()えるよね。最初(さいしょ)は1だったけど、1つ追加(ついか)されたあとは2になるから、(つぎ)は2文字(もじ)()である「!」が取得(しゅとく)される。それも追加(ついか)すれば(なが)さは3になるから……っていう(かん)じで結果的(けっかてき)(ぜん)文字(もじ)追加(ついか)される仕組(しく)みなんだ。
最後(さいご)にリストの1番目(ばんめ)()
ブロック全体(ぜんたい)をクリックして実行(じっこう)する
この一連(いちれん)のブロックたちはクリックすれば実行(じっこう)できる。ためしにクリックしてみて。結果(けっか)はこうなるはず↓
95文字(もじ)すべて(はい)ってればOK!このブロックは(ねん)のため()さないでどこかに()いておこう。
クラウド変数でユーザー名を共有する方法を語るok-scratch ok-scratch

u003cpu003e1文字(もじ)ずつの定数(ていすう)リストを初期(しょき)()するときに便利(べんり)方法(ほうほう)だからバックパックしておいてもいいかも。u003c/pu003eu003cpu003eこの方法(ほうほう)じゃなくてもテキストファイルをリストにインポートする方法(ほうほう)もあるし、グリフパッチさん(たち)(つく)ってるスクラッチアドオンを使(つか)っている(ひと)なら直接(ちょくせつ)リストにデータをコピペしたりも出来(でき)る。u003c/pu003e

ブロック定義(ていぎ)(つく)

名前(なまえ)は「文字列(もじれつ)をエンコードする」だよ。あとは()かりやすく引数(ひきすう)(めい)や、実行(じっこう)()結果(けっか)格納(かくのう)される変数(へんすう)(めい)()いておくのも(きち)

文字列(もじれつ)をエンコードする作戦(さくせん)

さぁ、このブロック定義(ていぎ)中身(なかみ)(つく)()()(まえ)(なに)をどう(つく)るのか作戦(さくせん)共有(きょうゆう)しておきたい。まず前提(ぜんてい)として引数(ひきすう)文字列(もじれつ)」にはユーザー(めい)(わた)される予定(よてい)だ。ここではサンプルとして(ぼく)のユーザー(めい)であるok-scratchを使(つか)うね。
  1. 文字列(もじれつ)(なが)さをカウントする(ok-scratchは10文字(もじ)
  2. 10(かい)以下(いか)処理(しょり)()(かえ)
    1. ok-scratchの(つぎ)文字(もじ)取得(しゅとく)する(最初(さいしょ)は1文字(もじ)()、つまり「oオー
    2. 「o」が文字(もじ)一覧(いちらん)リストの何番目(なんばんめ)格納(かくのう)されているのかを調(しら)べる(「o」はリストの48番目(ばんめ)
    3. 48という結果(けっか)変数(へんすう)()」に追記(ついき)する
  3. 最後(さいご)文字(もじ)(すう)(なが)さ(10)と変数(へんすう)()」を(つな)げて変数(へんすう)「エンコード文字列(もじれつ)」に追記(ついき)する
ちょーっと意味(いみ)不明(ふめい)(かん)じかもwしっかり把握(はあく)してから実装(じっそう)(うつ)りたいので、以下(いか)視覚(しかく)()して解説(かいせつ)もしておく!

文字列(もじれつ)(なが)さをカウントする

ok-scratchという文字(もじ)なら10文字(もじ)だよね。
これを取得(しゅとく)すると同時(どうじ)に、ついでにエンコード文字列(もじれつ)にも追記(ついき)しておく。10は1と0の2文字(もじ)だから、エンコードすると210として格納(かくのう)される。

文字(もじ)ごとにリスト(ない)格納(かくのう)場所(ばしょ)調(しら)べる

(つぎ)にok-scratchというユーザー(めい)を1文字(もじ)ずつ調(しら)べる。(なに)調(しら)べるかというと、(かく)文字(もじ)文字(もじ)一覧(いちらん)リストのどこにあるかを調(しら)べる。
1文字(もじ)ずつ文字(もじ)一覧(いちらん)リストと照合(しょうごう)して調(しら)べる。10文字(もじ)だから10(かい)
実際(じっさい)のブロックを使(つか)って照合(しょうごう)のイメージをつかもう
単純化(たんじゅんか)するとこんな(かん)じで照合(しょうごう)する↓

文字(もじ)(すう)(かく)文字(もじ)格納(かくのう)場所(ばしょ)をエンコード文字列(もじれつ)追記(ついき)する

最終的(さいしゅうてき)に10という(なが)さのデータと、1文字(もじ)ずつ調(しら)べた格納(かくのう)場所(ばしょ)全部(ぜんぶ)くっつけてエンコード文字列(もじれつ)追記(ついき)する。でこのエンコード文字列(もじれつ)をクラウド変数(へんすう)(わた)せば送信(そうしん)完了(かんりょう)
ここまでが(いま)から(つく)るブロック定義(ていぎ)中身(なかみ)だ。よっし、一緒(いっしょ)()(うご)かしてみよう!
クラウド変数でユーザー名を共有する方法を語るok-scratch ok-scratch

u003cpu003eちなみに()()るときは、最初(さいしょ)先頭(せんとう)の10という数字(すうじ)取得(しゅとく)することで、このあとの10文字(もじ)(ぶん)のデータがひとかたまりの文字(もじ)データなんだなと把握(はあく)できる。そしてまた文字(もじ)一覧(いちらん)()らし()わせて、(かく)数字(すうじ)がどの文字(もじ)なのかを調(しら)べるんだ。まぁそれはもうちょい(あと)でやるね。u003c/pu003e

コーディングする

作戦(さくせん)内容(ないよう)をコーディングしていこう!

まず文字列(もじれつ)(なが)さをエンコードしてしまう

まずは引数(ひきすう)(わた)されてくる文字列(もじれつ)(なが)さを調(しら)べる。そのためには(じつ)(あたら)しい処理(しょり)はいらない。すでにあるブロック定義(ていぎ)「エンコードする」にそのまま文字列(もじれつ)(なが)さを(わた)してあげればいい。
これでエンコード文字列(もじれつ)には、(たと)えばok-scratchなら、210という()追記(ついき)されたね。

変数(へんすう)()」を初期(しょき)()する

ブロック定義(ていぎ)「エンコードする」(うち)では変数(へんすう)()」にデータを()れてるよね。でも変数(へんすう)()」はこのあと文字列(もじれつ)(よう)使(つか)いたいからひとまず初期(しょき)()しとく。

変数(へんすう)「_文字列(もじれつ)インデックス」を(つく)

このあとループを(つく)って()くんだけど、その(なか)で1文字(もじ)ずつカウントアップしていくための変数(へんすう)用意(ようい)しておく。いわゆるインデックスとして使(つか)っていく。でもこの変数(へんすう)はここ以外(いがい)使(つか)わないから、そのことを明示(めいじ)するために接頭語(せっとうご)にアンダーバーを()けておこうと(おも)う。
  • インデックスってなに? インデックスってなに?

    インデックスというのはリストの何番目かという数字です。リストじゃなくても例えば図書館の本棚を想像してみて。本棚の5番目にある本のインデックスは5。19番目にある本のインデックスは19みたいなイメージ。

    プログラミングだとインデックスという言葉は必須知識の1つだから、もし知らなかったらこの機会に覚えよう。

    ちなみにメジャーなプログラミング言語だとインデックスは1番目が0になる。2番目が1になる。でもスクラッチだと1番目は1だし、2番目は2になってるから注意。

初期(しょき)()する
最初(さいしょ)は1を()()てておくよ。

文字(もじ)ずつ調(しら)べるためのループを(つく)

文字(もじ)(なが)さだけ()(かえ)すループを設置(せっち)しよう。

文字列(もじれつ)文字(もじ)取得(しゅとく)する

文字列(もじれつ)文字(もじ)を1文字(もじ)ずつ取得(しゅとく)するよ(かなめ)となる処理(しょり)はこちら↓
(つぎ)にこれで取得(しゅとく)できた文字(もじ)が、文字(もじ)一覧(いちらん)リストの何番目(なんばんめ)格納(かくのう)されているかを調(しら)べるよ。
こうすることでリストの何番目(なんばんめ)文字(もじ)があるかが取得(しゅとく)できる!たとえばこんな(かん)じ↓
ok-scratchの1番目(ばんめ)文字(もじ)である「o」は文字(もじ)一覧(いちらん)リストの48番目(ばんめ)にある、っていう情報(じょうほう)取得(しゅとく)できる。あとはこれを変数(へんすう)格納(かくのう)していきたい。

変数(へんすう)文字(もじ)一覧(いちらん)(なに)文字(もじ)()か」を(つく)

そのための変数(へんすう)(あたら)しく(つく)るよ。
結果(けっか)格納(かくのう)する
この変数(へんすう)にさっきの結果(けっか)格納(かくのう)するよ。ちょっと(なが)いけどこんな(かん)じになる↓

(かなら)ず二(けた)になるように調整(ちょうせい)する

ここで(あたら)しい仕様(しよう)紹介(しょうかい)する。文字(もじ)一覧(いちらん)(なに)文字(もじ)()か、という情報(じょうほう)(かなら)ず二(けた)になるようにしたい。文字(もじ)一覧(いちらん)には95文字(もじ)格納(かくのう)されているから、ほとんどのケースで二(けた)になる。ただし、もちろん1から9に格納(かくのう)されている()だけは一(けた)になってしまう。そこで1から9のときはゼロ()処理(しょり)(おこな)うようにする。
条件(じょうけん)ブロックを追加(ついか)する
1から9ならという条件(じょうけん)(しき)(つく)
1から9なら、というのは10未満(みまん)ならと()()えることができるので、(つぎ)のとおりに条件(じょうけん)(しき)(つく)ろう。
ゼロ()処理(しょり)をする
1なら01になるように左側(ひだりがわ)にゼロをつける処理(しょり)(つく)るよ。

()結果(けっか)追加(ついか)していく

変数(へんすう)()」に、変数(へんすう)文字(もじ)一覧(いちらん)(なに)文字(もじ)()か」を追加(ついか)していくよ。追加(ついか)だから、元々(もともと)()にくっつけるように(つぎ)のとおりにするよ。

文字列(もじれつ)インデックスを加算(かさん)する

ループの最後(さいご)変数(へんすう)「_文字列(もじれつ)インデックス」に1ずつ()えよう。こうすることで(つぎ)のループ処理(しょり)ではok-scratchのkが処理(しょり)される、っていう(かん)じでどんどん文字(もじ)調(しら)べていけるよ。

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

ブロック定義(ていぎ)(さい)(あと)処理(しょり)として、変数(へんすう)()」を変数(へんすう)「エンコード文字列(もじれつ)」に追記(ついき)しよう。
よし、これで文字列(もじれつ)のエンコード処理(しょり)完成(かんせい)だ!

ブロック定義(ていぎ)配置(はいち)する

ブロック定義(ていぎ)「クラウド変数(へんすう)送信(そうしん)する」にて、プレイヤーUIDをエンコードした直後(ちょくご)にユーザー(めい)をエンコードするブロックを追加(ついか)しよう!

テストしてみる

ちょっとテストしづらいけど、実行(じっこう)して変数(へんすう)中身(なかみ)をスクリーンショットして調(しら)べてみる。
(より)プレイヤーUIDの(うし)ろにしっかり210から(はじ)まる10文字(もじ)(ぶん)文字(もじ)データが格納(かくのう)されているぞ!よーし。

文字列(もじれつ)をデコードする

デコードする(なが)れは(つぎ)(とお)り。
  • 文字(もじ)(なが)さを調(しら)べる。
  • 文字(もじ)(すう)(かず)だけ以下(いか)()(かえ)す。
    • 文字(もじ)格納(かくのう)場所(ばしょ)取得(しゅとく)してリストと照合(しょうごう)する
うん、エンコードに(くら)べるとシンプルそうだけど、やっぱり文字(もじ)説明(せつめい)しただけだと意味(いみ)不明(ふめい)だねw

作戦(さくせん)内容(ないよう)解説(かいせつ)

ということで(おな)じく視覚的(しかくてき)解説(かいせつ)したものを掲載(けいさい)しておくぅ!

文字(もじ)(なが)さを調(しら)べる

まずはエンコード文字列(もじれつ)から文字(もじ)(なが)さを()るんだね。これは(じつ)はすでにあるブロック定義(ていぎ)順番(じゅんばん)にデコードする」で実現(じつげん)できちゃうから(らく)なんだ。処理(しょり)としては以下(いか)のようなイメージで文字(もじ)(すう)取得(しゅとく)するよ。

② 1文字(もじ)ずつリストと照合(しょうごう)する

文字(もじ)(かなら)ず二(けた)管理(かんり)されているから、それを前提(ぜんてい)文字(もじ)(すう)だけ実行(じっこう)されるループを(つく)って、そこで1文字(もじ)ずつ文字(もじ)一覧(いちらん)照合(しょうごう)する。そうして数字(すうじ)から文字(もじ)への変換(へんかん)実現(じつげん)させるのがデコード処理(しょり)本質的(ほんしつてき)部分(ぶぶん)だ。

コーディングする

よし、これを実装(じっそう)していこう!

ブロック定義(ていぎ)(つく)

ブロック定義(ていぎ)文字列(もじれつ)をデコードする」を(つく)ろう。

文字(もじ)(すう)調(しら)べる

まずは(なに)文字(もじ)のデータなのかを調(しら)べる。それにはすでにあるブロック定義(ていぎ)順番(じゅんばん)にデコードする」を使(つか)えばOKだ!やっほぃ!

変数(へんすう)「_文字(もじ)(すう)」を(つく)

結果(けっか)格納(かくのう)しておく変数(へんすう)(つく)っておこう。
結果(けっか)格納(かくのう)する
変数(へんすう)()」に(はい)っている結果(けっか)を、あらためて変数(へんすう)「_文字(もじ)(すう)」に格納(かくのう)しよう。

変数(へんすう)()」を初期(しょき)()しておく

文字(もじ)(すう)(かず)だけ()(かえ)すループを(つく)

(けた)を1つの数字(すうじ)として取得(しゅとく)する

文字(もじ)格納(かくのう)場所(ばしょ)(かなら)ず二(けた)管理(かんり)されているから、エンコード文字列(もじれつ)から2つ数字(すうじ)取得(しゅとく)してくっつけよう。文字(もじ)()はコレで取得(しゅとく)できる↓
文字(もじ)()はコレで取得(しゅとく)できる↓
この2つをくっつける↓
この結果(けっか)変数(へんすう)文字(もじ)一覧(いちらん)(なに)文字(もじ)()か」にセットしよう。

文字(もじ)一覧(いちらん)照合(しょうごう)して文字(もじ)特定(とくてい)する

文字(もじ)特定(とくてい)はこんな(かん)じでいけるね!

変数(へんすう)()」に追記(ついき)していく

変数(へんすう)「エンコード文字(もじ)順番(じゅんばん)」をカウントアップする

今回(こんかい)は二(けた)ずつ取得(しゅとく)ているので、2ずつ加算(かさん)する。2って直接(ちょくせつ)()くよりは動的(どうてき)管理(かんり)できるように以下(いか)(とお)りにしておく。
これを変数(へんすう)加算(かさん)する↓
よっし、これで完成(かんせい)

マウスを()せたらユーザー(めい)表示(ひょうじ)されるようにする

ここまでで文字列(もじれつ)共有(きょうゆう)する地盤(じばん)(ととの)った!実践的(じっせんてき)使(つか)ってみたいので、マウスをクラウドプレイヤーに()せたらユーザー(めい)出力(しゅつりょく)されるような処理(しょり)(つく)ってみよう。

ブロック定義(ていぎ)配置(はいち)する

とりあえず文字列(もじれつ)のデコード処理(しょり)実行(じっこう)するブロックを()こう。これを実行(じっこう)するのはバッファリングデータを処理(しょり)するところではなく、単発(たんぱつ)固定(こてい)データを処理(しょり)するところがふさわしいね。ブロック定義(ていぎ)(つぎ)のプレイヤーデータを(うつ)す」の最後(さいご)追加(ついか)しよう。

変数(へんすう)「クラウドプレイヤー(めい)」を(つく)

結果(けっか)格納(かくのう)する

デコードした結果(けっか)変数(へんすう)格納(かくのう)する。

クラウドティックに処理(しょり)追加(ついか)する

クラウドプレイヤーには、ずっとループがあるわけではない()わりにブロック定義(ていぎ)「クラウドティック」があるよね。これはほぼずっとループと(おな)じように機能(きのう)するから、ここに処理(しょり)追加(ついか)していきたいと(おも)う。

マウスを()せたらという条件(じょうけん)ブロックを追加(ついか)する

クラウドプレイヤー(めい)()

この(なか)では単純(たんじゅん)にクラウドプレイヤー(めい)()うようにしよう。秒数(びょうすう)は0.5(びょう)にしておくよ。

テストぉ!

OK!ついにユーザー(めい)共有(きょうゆう)ができたぜ。

まとめ

今回(こんかい)はエンコードとデコードを応用(おうよう)して文字列(もじれつ)をオンラインでシェアできるように改造(かいぞう)した!あらためてこのスプライトをバックパックにいれておけば、(つぎ)からはカンタンに文字列(もじれつ)をシェアできるオンラインゲームを(つく)ることができるね!ただし冒頭(ぼうとう)でも(つた)えたように自由(じゆう)会話(かいわ)できるチャットを(つく)ることは禁止(きんし)されているから()をつけてね。あと、もし日本語(にほんご)追加(ついか)したい場合(ばあい)文字(もじ)一覧(いちらん)リストが(なが)くなって「1文字(もじ)は二(けた)」という前提(ぜんてい)()わるから、そのあたりも調整(ちょうせい)する必要(ひつよう)があるよ。まぁユーザー(めい)共有(きょうゆう)するだけなら日本語(にほんご)(はい)らないから問題(もんだい)ない!ますますのオンラインゲーム制作(せいさく)応援(おうえん)しているぜ。
ブクマよろしくお願いします! ブクマよろしくお願いします!
どんどん追記・更新していくので、ブックマークやシェアよろしくお願いします!

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

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

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