提供:Japanese Scratch-Wiki
Scratch 1.4までは、ラテン文字の大文字と小文字を区別する要素が限られていたため、大文字小文字の判別は、今よりも複雑な手順が必要だった。 Scratch 2.0では、次のようなコスチュームを使う方法と変数名を使う方法で大文字小文字を判別できる。
26個のコスチュームを使う方法
通常、<[A] = [a]>
はTrue(真)になってしまうが、コスチューム名は大文字と小文字が区別されるため、以下のスクリプトで判定できる。
コスチューム1、a〜zまで\(ギリシャ文字等を使いたいときはα~ω、キリル文字を使いたいときはа~я\)の名前のコスチュームを追加::grey 使用する文字をリストに追加::grey//大文字を先にしてその後に小文字、その他を追加 [変数A v] を [1] にする <[使用文字 v] に ( (変数A) 番目\( (何かの文字) \)の文字) が含まれる> まで繰り返す [変数A v] を (1) ずつ変える end コスチュームを [コスチューム1 v] にする コスチュームを (((変数A) 番目( [使用文字 v] ) :: list) と [ ]) にする もし <(コスチューム #) = [1]> なら [変数A v] を (26) ずつ変える//ラテン文字のみの場合 end
53個のコスチュームを使う方法
コスチュームに名前をつけるときは、大文字小文字が区別されない。したがって、1つのスプライト内で「A」と「a」のような、大文字小文字が違うだけの2つのコスチューム名をつけることはできない。しかし、コスチュームを () にするブロックなどは、大文字と小文字を区別する。これを利用して、ある文字が大文字であれば「大文字」、小文字であれば「小文字」という文字を変数に入れるのが、次に紹介するスクリプトである。
まず最初に、53個のコスチュームを用意して、それらに次の規則にしたがった名前をつけていく必要がある。
- 1番目のコスチュームに「文字なし」などの、ほかのコスチュームとぶつからない名前をつける。
- 2番目のコスチュームの名前を「A」(大文字)にする
- 3番目のコスチュームの名前を「at」などの「a」+ <好きな文字>にする。(手順4でも、ここで後ろにつけた文字と同じ文字を使うこと)
- 手順2〜3をくり返す (4番目を「B」、5番目を「bt」、6番目を「C」……、のように名付けていく)。「Z」、「zt」まで、すべてのラテン文字について2つずつコスチュームを用意したら終了。
このようにして、53個のコスチュームをつくって名前をつけたら、それらが順番に並ぶように入れ替えておこう。
次に、スクリプトの作成にすすむ。ここでは、入力された文字が大文字かを小文字かをカスタムブロックで判別する。
定義 大文字小文字をしらべる (文字) もし <<((文字) の長さ) = [1]> ではない> なら [大文字小文字 v] を [エラー!] にする // 2文字以上の文字が入力された場合と、文字が入力されていない場合、エラーにする [このスクリプト v] を止める end コスチュームを [文字なし v] にする // 1番目のコスチューム コスチュームを (文字) にする // 文字が小文字の場合、コスチュームは「文字なし」のまま変わらない もし <(コスチューム #) = [1]> なら // コスチュームが変わっていないということは、文字が小文字であると判断 コスチュームを ((文字) と [t]) にする // 小文字のコスチュームは末尾に「t」 (または自分で選択した好きな文字) が付いているはず end もし <(コスチューム #) = [1]> なら // まだコスチュームが変わっていない場合、ラテン文字以外の文字と判断 [大文字小文字 v] を [その他] にする [このスクリプト v] を止める end もし <((コスチューム #) を (2) で割った余り) = [0]> なら // コスチューム番号が2で割り切れる場合、文字を大文字と判断 [大文字小文字 v] を [大文字] にする でなければ [大文字小文字 v] を [小文字] にする end
2個のコスチュームを使う方法
この方法でも、コスチュームブロックで大文字と小文字が区別されることを利用する。まず、次の2個のコスチュームを用意する。
- 「文字なし」という名前のコスチューム
- 「ABCDEFGHIJKLMNOPQRSTUVWXYZ」という名前のコスチューム
定義 大文字? (文字) [ラテン文字一覧 v] を [ABCDEFGHIJKLMNOPQRSTUVWXYZ] にする [i v] を [1] にする [チェック結果 v] を [] にする ((ラテン文字一覧) の長さ) 回繰り返す もし <((i) 番目\( (ラテン文字一覧) \)の文字) = (文字)> なら [チェック結果 v] を ((チェック結果) と (文字)) にする //「文字」が小文字の場合、そこだけ小文字になる。たとえば文字がbならば、「AbCDEFG……」となる。大文字の場合、大文字のまま入る。たとえば文字がBなら、「ABCDEFG……」となる。 でなければ [チェック結果 v] を ((チェック結果) と ((i) 番目\( (ラテン文字一覧) \)の文字)) にする end [i v] を (1) ずつ変える end コスチュームを [文字なし v] にする// 1つめのコスチューム コスチュームを (チェック結果) にする もし <(コスチューム #) = [2]> なら // コスチュームが2つめの「ABCDEFGHIJKLMNOPQRSTUVWXYZ」という名前のものに変わっていれば [大文字? v] を [true] にする でなければ [大文字? v] を [false] にする end
54個の変数を使う方法
変数名では大文字小文字が区別されるので、これを利用して大文字、小文字を判別する方法もある。たとえば、 「A」と「a」という変数を同時に使用することができる。この方法は、上に紹介した「53個のコスチュームを使う方法」「2個のコスチュームを使う方法」よりも高速に動作するため、速度が必要なときはこの方法を使うとよい。
定義 変数を作る [文字一覧 v] を [ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz] にする [p1 v] を [1] にする (26) 回繰り返す ((p1) 番目\( (文字一覧) \)の文字) を [1] にする [p1 v] を (1) ずつ変える end (26) 回繰り返す ((p1) 番目\( (文字一覧) \)の文字) を [0] にする // これらのハッキングブロックは、大量の変数を手軽に作成するために使用している。そのため、ハッキングブロックの使用は必須ではないが、使用することで1つずつ手作業で52個の変数をつくる手間が省略できる [p1 v] を (1) ずつ変える end 定義 (文字) が大文字かどうかしらべる もし <((文字) \( [スプライト1 v] \)) = [1]> なら [大文字? v] を [yes] にする [大文字? v] を [no] にする end