• 検索結果がありません。

文字入出力機能

ドキュメント内 小学校プログラミング必修化に向けての (ページ 58-67)

第 6 章 クラウド変数を用いた「めざせ!ローマ字マスター☆~えい語とのちがいを知ろう

6.7 本アプリにある機能とそのプログラム

6.7.1 文字入出力機能

本実践を進めていく上で必要不可欠な、打たれたキーのアルファベットを見やすく画面 上に表記させる機能である。本アプリでは10文字まで入力できるようにしてある。文字入 出力機能に関連のあるスプライトを挙げながら説明を進めていく。

(1)スプライト名:「キーボードから文字表示」

スプライト「キーボードから文字表示」では、図6-13のようなプログラムを持っている。

図6-13(a)のプログラムに関して、メッセージ「キーボード切り替え」を受け取った時に動

作する。まず変数「キーボード入力mode」の値を1にする。変数「決定が押されたか」の 値が1または変数「キーボード入力mode」の値が1以外になるまでは、現在の入力された 文字数の判別とキー入力を判別するプログラムが繰り返し実行される。現在の入力された 文字数の判別に関して、打たれた文字が記憶されるリスト「入力文字」の長さを参照して、

長さが(9+変数「「’」、「^」の打たれた合計」の値)以下ならばキー入力を判別するプログ ラムが動くようになっている。仮に変数「「’」、「^」の打たれた合計」の値が0であった場 合、長さが9以下でない、即ち10文字入力してリスト「入力文字」の長さが10になった 時、それ以降はキーを押しても、リスト「入力文字」に追加で記憶されたり画面に表示さ れたりはしない。このように(9+変数「「’」、「^」の打たれた合計」の値)は入力可能な最 大文字数を決める役割を持っている。また、変数「「’」、「^」の打たれた合計」はアポスト ロフィーやキャレットが使われる度に1ずつ値が変わるようになっている。(9+変数「「’」、

「^」の打たれた合計」の値)としている理由は、例えば「おばあさん」の課題で正しいロ ーマ字を入力すると、リスト「入力文字」に格納される文字列は「oba^san」となる。この 時、リスト「入力文字」の長さは7となり、基本的には7文字画面に出力しているという ことを示すが、実際のScratch画面に表記される文字列は「obâsan」の6文字である。最 大10文字入力できるようにする設定上、Scratch画面に追加できる文字数はあと4文字ま で可能なはずである。しかしながらリストでは「^」を 1 文字としてみなしてしまうため、

7文字入ったリスト「入力文字」に追加可能な文字数は3となってしまう。すなわち、アポ ストロフィーやキャレットを使用する度一文字ずつ Scratch 画面に表記できる文字数が少 なくなってしまうのである。その対応策として(9+変数「「’」、「^」の打たれた合計」の値)

として置き、アポストロフィーやキャレットを使用する度一文字ずつ入力可能な最大文字 数(リスト「入力文字」に格納可能な最大数)を増やすようにしている。例えば、9の固定 値だった場合「a^a^a^a^a^」までしかリストに格納、画面に「âââââ」の5文字までしか 表記させられないが、(9+変数「「’」、「^」の打たれた合計」の値)とすることにより

「a^a^a^a^a^a^a^a^a^a^」 ま で リ ス ト に 格 納 す る こ と が で き 、 変 わ り な く 画 面 に

「ââââââââââ」と 10 文字表記することが可能となる。キー入力を判別するプログラムに

56

関して、Scratchのプログラミングブロックでは「調べる」カテゴリにある「~キーが押さ れた」ブロックがある。そのブロックを条件分岐のブロックと組み合わせて、打たれたキ ーを判別してリスト「入力文字」格納し、入力キーに応じたメッセージ「入力文字表示 a」

から「入力文字表示z」のいずれかが送られるようになっている。

図6-13(b)のプログラムに関して、スタートボタンの旗を押したときやメッセージ「クリ

ック仮」「クリック仮2」「クリック仮3」を受け取った時、特に問題群の課題を取り組む前 にリスト「入力文字」に格納された文字列を全てクリアする。このプログラムがあること により文字入力中に画面を切り替えたとしても、切り替え前に入力した文字に影響される ことなく課題に取り組むことができる。

57

(a) 打たれたキーを判別し記憶、画面に出力するために命令するプログラム

図6-13 スプライト「キーボードから文字表示」が持つプログラム

58

(b) リスト「入力文字」の中身をなくすプログラム

(2)スプライト名:「a」「b」…「z」「’」「^」

スプライト名に対応した画面に表示させる用のアルファベット、アポストロフィー、キャ レットは「gimp2」を用いて一文字ずつ画像として用意し、Scratchにコスチューム(画像)

として読み込ませてある。図6-14はスプライト「a」にあるプログラムである。図6-14(a) のプログラムはスプライト「a」「b」…「z」「’」「^」それぞれにあり、スプライト名に対応 したメッセージ「入力文字表示a」から「入力文字表示z」「アポストロフィー表示」「キャ レット表示」を受け取った時に実行される。但し、「キーが押された」で調べられるキーに

「キャレット」キーは対応していない。アポストロフィーは「7キーが押された」時に対応 させることができるが、困惑を避けるためアポストロフィー、キャレットに関しては、ロー マ字入力画面(図6-5)の下部にあるようにボタン(スプライト名:「アポストロフィーボ タン」「キャレットボタン」)として用意するようにした。このボタンが押されると、メッセ ージ「アポストロフィー表示」「キャレット表示」が送られるようになっている。図6-14 のプログラムを例に説明していくと、「a」キーが押されて図6-13(a)のプログラムが実行さ れた結果送られるメッセージ「入力文字表示a」を受け取ると実行が開始される。まず、変 数「キーボード入力mode」が1かどうかを判断し。値に応じた後の文字表示プログラムが 実行される。この時、変数「キーボード入力mode」の値について、1ならキーボードから 入力されていることを意味し、0ならソフトウェアキーボードから入力されていることを意 味する。文字の画像は一文字一つしかスプライトとして用意していない。故に、図6-15に 示す「wasabi」の問題の「a」のように一つの文字を複数表示するためには少し工夫が必要

図6-13 スプライト「キーボードから文字表示」が持つプログラム(続き)

59

となる。文字表示に関して、一定の座標をずらしながら文字スプライトを表示しているので、

本来なら図6-16のように重複する文字を入力した場合、一回目に表示させた文字が消えて しまう。そこで「スタンプ」というプログラムブロックを活用した。このスタンプの機能は スプライトの画像の残像をその場に残すことができるというものである。但しこのスタンプ 機能には欠点がある。スタンプを消すための「消す」というプログラミングブロックがある が、この「消す」を使うと画面にある全てのスタンプが消えてしまうのである。故に一文字 ずつ消すということができず、入力間違いをした時には、ローマ字入力画面(図6-5)左下 部にある「書き直す」をクリックして一から書き直す必要がある。一文字「入力文字」リス トから削除して、もう一度リストを読み込んで文字を表示させれば「一文字消す」機能はで きるが、プログラムが重くなることを危惧して今回は着手していない。

また、条件分岐プログラムで、入力された文字を、座標を変えながらスタンプで表示さ せていくプログラムではない方の分岐先には、リスト「入力文字」の最後の位置にあるデ ータを削除するというものがある。なぜこのプログラムがあるのかの説明をすると、文字 を入力する際、本来ならば「アポストロフィー」「キャレット」が使われていない状況では、

設定上10文字までリスト「入力文字」に格納される。しかしながら、二つのキーを同時に 押すくらいの非常に高速なタイピングを行うと、実行処理の速さを上回って11文字までリ スト「入力文字」に格納されるという問題を見つけた。この問題を解決する為に[-188+43*(リ スト「入力文字」の長さ-変数「「’」、「^」の打たれた合計-1」)]の値を調べる条件分岐を入 れてあるのである。「アポストロフィー」「キャレット」が使われていないとして10文字表 示させた場合、その値は199となる。不具合で11文字目が格納されてしまった場合でも、

11文字目に対応した、メッセージ「入力文字表示a」から「入力文字表示z」が送られ、対 応したスプライトの図6-14(a)と同じ構造のプログラムが実行される。その際には

[-188+43*(リスト「入力文字」の長さ-変数「「’」、「^」の打たれた合計-1」)]の値は242と

なる。よってここで200を基準として[-188+43*(リスト「入力文字」の長さ-変数「「’」、「^」

の打たれた合計-1」)]の値が200未満になるか11文字目が入れられて実行されてしまうこ とで値が200を超えてしまうかを判断する。値が200を超えた場合、逆に考えて11文字目 が格納されてしまったということで、11文字目を削除する為にリスト「入力文字」の最後 の位置にあるデータを削除するというプログラムが動作するようになっているのである。

また、図6-14(b)のプログラムは、スタートボタンの緑の旗がクリックされた時や、メッ セージ「個人mode」を受け取った時にスタンプで残されている文字画像を消して、自身も 非表示にするプログラムである。

ドキュメント内 小学校プログラミング必修化に向けての (ページ 58-67)