Scratchで複数行表示(Display Multi-Lines)
Scratchで複数行の文字列を表示してみました。
プロジェクトページ: https://scratch.mit.edu/projects/325519299/
Scratchの「~ と言う」などのブロックを使って,複数行に渡る文字列を書いた場合,意図しないところで改行されたり,改行して欲しいところで,改行できなかったりします。
ネット検索してみましたが,同様な質問はいくつかありましたが,未解決のままになっていたり,古いバージョン(ver 2.0)での対応に関する説明で,私が使っているScratch 3ではできませんでしたので,方策を考えてみました。私のScratchの環境は,Windowsのみですので,もしかしたら,他のOS(LinuxやMac)では簡単にできるのかもしれませんが。
Scratchでは,キーボードから制御コードを入れる方法が無いのが根本問題で,悩んだ末,Scratchで作ったプログラムの文字列をJSONファイルから探して,適当に,‘\n’ や ‘\r’ を付加してあげると,改行表示されることが判りました。そこで,改行コードのみのデータを持った変数:CR と LF を追加して,表示文字列の途中に追加すると,思ったところで改行ができるようになりました。私の環境では,”\n”も”\r” も同じ動作になりました。
ついでに,TAB(“\t”)も追加して整形表示に使えるか試してみましたが,これは,半角空白と同じ扱いになるようでした。タブによる文字列整形は自分でプログラム作るしかないかもしれません。
私が行った手順は,次の通りです。
-
Scratchを起動して,変数CR, LF, TAB を定義して,名前を付けてパソコン上に保存します。
(Foo.sb3)
- 圧縮・解凍ソフトを使って,プロジェクトファイルを解凍します。私は,LhaForgeを使いました。
- 解凍したファイル中に,拡張子が json のファイルがありますので,これをテキストエディタ等で開いて編集します。
- 編集したファイルをプロジェクトファイルに戻します。LhaForgeの場合,右クリックメニューの「LhaForgeで操作 → LhaForgeで閲覧」で表示された画面にドロップダウンするだけで自動的に圧縮ファイルの内容を書き換えてくれました。
- あとは,プロジェクトファイルをScratchで開き直して,文字列をCRやLFを使って編集すればOKです。
【以下は編集内容】
変数を作っただけでは,JSONファイル中に
[“LF”, 0],…, [“CR”, 0], …, [“TAB”, 0] 等のように,各変数には 0 の値が設定されていますので,テキストエディタ等をつかって,0の部分を書き換えます。→ [“LF”, “\n”], …, [“CR”, “\r”], …, [“TAB”, “\t”]
—
scratch を起動して,文字列と CR または LF を結合します。(冒頭で示したプロジェクトページを参照してください。)
★★★ もしかしたら,こんなことしなくても簡単にできる方法があるのかもしれません。
★★★ もっと良い方法をご存じの方は,ぜひとも,コメントにてご享受頂ければ幸いです。
★ 2020/1/14 加筆 ★
上記の手順を補足説明します。
まず,Scratch では,標準の方法では,改行コードやタブコードなどの制御文字コードを文字列に設定することができません。そのため,Scratchエディタで作成したプロジェクトファイル(たとえば,NewLine.sb3など,拡張子が .sb3)になっているファイルの中身を書きかえる必要があります。
.sb3 ファイルは,実は zip ファイルで,この中には,音のファイル(.wav)や絵(イメージ)ファイル(.svg)およびJSONファイルが含まれます。プログラム(ブロック)や変数・リスト等は,このJSONファイルに格納されています。各ファイルのファイル名(prefix)は,scratch が適当に付けた名前になっているので,それぞれ,開いてみないと,何が入っているかはわかりません。
たとえば,このプロジェクトファイルは,元々,「改行(NewLine).sb3」というファイル名で保存して,プロジェクトで公開しています。まずは,下図のように,プロジェクトファイル上にマウスポインタを持って行き,右クリックして,解凍メニューを選択します。私は,zip ファイルの既定のアプリを LhaForge にしているので,下図のようなメニューが表示されますが,場合によっては,異なるメニュー表示が出ると思います。(解凍,展開などの言葉で表現されていると思います。)
ファイルを解凍すると,次のように,いくつかのファイルが現れます。
拡張子が .json のファイルを編集します。
テキストエディタ等で,上記の project.json ファイルを開くと,意味不明な文字列が羅列されます。細かい内容は私にも判りませんが,これらの文字列の中に,変数の定義らしきものがあります。
[“LF”, 0] , [“CR”, 0], [“TAB”, 0] 等です。変数の定義だけして変数値を設定していない場合は,括弧内の右側部分が,0 や “” (空文字)で初期化されています。これに,適宜,制御コードを設定すれば良いです。この時割り当てる制御コードは,C言語系(C, C++, Java等)で定義された制御コードの表現に従うようです。LF(Line Feed) は “\n” (New Line),CR(Carriage Return) は “\r” ,TAB は “\t” で定義します。
ですので,[“LF”, “\n”], [“CR”, “\r”], [“TAB”, “\t”] と記載します。ここで,各文字列はダブルクォーテーションで囲むこと。および,\ (バックスラッシュ) は,エディタによっては ¥(円マーク)で表示されることがあります。これらの制御コードは,半角英字で記載して下さい。
この変更が終わったら,前述の解凍作業とは逆に,プロジェクトファイルを zip でまとめ,最終的に,ファイル名(prefix).sb3 の形式のファイルを作ります。
少し加筆しました。
Scratch そのものには,改行表示の機能はありませんので,プロジェクトファイルを改変して改行を実現しています。
改造にあたり,変数 CR, LF 等の制御文字を変数として定義します。
これらの変数には,制御コード “\r”, “\n” を割り当てるのですが,
Scratch のエディタで制御コードを入力することができませんので,
プロジェクトファイル内にある JSON ファイルを手動で書きかえます。
Scratch のプロジェクトファイル( .sb3 ) は,実は,zip ファイル
であり,音楽,絵,JSON ファイルがひとまとまりになっています。
まずは,プロジェクトを作成後,CR, LF, TAB 等の変数を追加し,
プロジェクトを保存します。
これを解凍し,この内の JSON ファイル内に変数定義がありますので,
JSON ファイル内に定義された CR, LF, TAB 等に制御文字を設定します。
JSON ファイルを書きかえたら,プロジェクトファイルを zip 圧縮し,
拡張子を sb3 にします。
このプロジェクトファイルを開き,表示する文字列を組み立てます。
(サンプルプログラム参照)