提供: Japanese Scratch-Wiki

(ブロックの引数の型が誤っていたため修正。)
1行目: 1行目:
 
{{他のバージョン|2.0|1.4}}
 
{{他のバージョン|2.0|1.4}}
[[Scratch 1.4]]までは、アルファベットの大文字と小文字を区別する要素が限られていたため、大文字小文字の判別は、今よりも複雑な手順が必要だった。
+
[[Scratch 1.4]]までは、ラテン文字の大文字と小文字を区別する要素が限られていたため、大文字小文字の判別は、今よりも複雑な手順が必要だった。
 
[[Scratch 2.0]]では、次のようなコスチュームを使う方法と変数名を使う方法で大文字小文字を判別できる。
 
[[Scratch 2.0]]では、次のようなコスチュームを使う方法と変数名を使う方法で大文字小文字を判別できる。
  
11行目: 11行目:
 
#2番目のコスチュームの名前を「A」(大文字)にする
 
#2番目のコスチュームの名前を「A」(大文字)にする
 
#3番目のコスチュームの名前を「at」などの「a」+ <好きな文字>にする。(手順4でも、ここで後ろにつけた文字と同じ文字を使うこと)
 
#3番目のコスチュームの名前を「at」などの「a」+ <好きな文字>にする。(手順4でも、ここで後ろにつけた文字と同じ文字を使うこと)
#手順2〜3をくり返す (4番目を「B」、5番目を「bt」、6番目を「C」……、のように名付けていく)。「Z」、「zt」まで、すべてのアルファベットについて2つずつコスチュームを用意したら終了。
+
#手順2〜3をくり返す (4番目を「B」、5番目を「bt」、6番目を「C」……、のように名付けていく)。「Z」、「zt」まで、すべてのラテン文字について2つずつコスチュームを用意したら終了。
  
 
このようにして、53個のコスチュームをつくって名前をつけたら、それらが順番に並ぶように入れ替えておこう。
 
このようにして、53個のコスチュームをつくって名前をつけたら、それらが順番に並ぶように入れ替えておこう。
20行目: 20行目:
 
定義 大文字小文字をしらべる (文字)
 
定義 大文字小文字をしらべる (文字)
 
もし <<((文字) の長さ) = [1]> ではない> なら  
 
もし <<((文字) の長さ) = [1]> ではない> なら  
  [大文字小文字 v] を [エラー!] にする // 2文字以上の文字が入力された場合と、文字が入力されていない場合、エラーにする
+
[大文字小文字 v] を [エラー!] にする // 2文字以上の文字が入力された場合と、文字が入力されていない場合、エラーにする
  [このスクリプト v] を止める
+
[このスクリプト v] を止める
 
end
 
end
 
コスチュームを [文字なし v] にする // 1番目のコスチューム
 
コスチュームを [文字なし v] にする // 1番目のコスチューム
 
コスチュームを (文字) にする // 文字が小文字の場合、コスチュームは「文字なし」のまま変わらない
 
コスチュームを (文字) にする // 文字が小文字の場合、コスチュームは「文字なし」のまま変わらない
もし <(コスチューム #) = [1]> なら // コスチュームが変わっていないということは、文字が小文字であると判断
+
もし <(コスチューム #) = [1]> なら // コスチュームが変わっていないということは、文字が小文字であると判断
  コスチュームを ((文字) と [t]) にする // 小文字のコスチュームは末尾に「t」 (または自分で選択した好きな文字) が付いているはず
+
コスチュームを ((文字) と [t]) にする // 小文字のコスチュームは末尾に「t」 (または自分で選択した好きな文字) が付いているはず
 
end
 
end
もし <(コスチューム #) = [1]> なら // まだコスチュームが変わっていない場合、アルファベット以外の文字と判断
+
もし <(コスチューム #) = [1]> なら // まだコスチュームが変わっていない場合、ラテン文字以外の文字と判断
  [大文字小文字 v] を [その他] にする
+
[大文字小文字 v] を [その他] にする
  [このスクリプト v] を止める
+
[このスクリプト v] を止める
 
end
 
end
  もし <((コスチューム #) を (2) で割った余り) = [0]> なら // コスチューム番号が2で割り切れる場合、文字を大文字と判断
+
もし <((コスチューム #) を (2) で割った余り) = [0]> なら // コスチューム番号が2で割り切れる場合、文字を大文字と判断
  [大文字小文字 v] を [大文字] にする
+
[大文字小文字 v] を [大文字] にする
  でなければ
+
でなければ
  [大文字小文字 v] を [小文字] にする
+
[大文字小文字 v] を [小文字] にする
 
end  
 
end  
</scratchblocks>
+
</scratchblocks>
  
 
==2個のコスチュームを使う方法==
 
==2個のコスチュームを使う方法==
47行目: 47行目:
 
<scratchblocks>
 
<scratchblocks>
 
定義 大文字? (文字)
 
定義 大文字? (文字)
[アルファベット一覧 v] を [ABCDEFGHIJKLMNOPQRSTUVWXYZ] にする
+
[ラテン文字一覧 v] を [ABCDEFGHIJKLMNOPQRSTUVWXYZ] にする
 
[i v] を [1] にする
 
[i v] を [1] にする
 
[チェック結果 v] を [] にする
 
[チェック結果 v] を [] にする
((アルファベット一覧) の長さ) 回繰り返す  
+
((ラテン文字一覧) の長さ) 回繰り返す  
  もし <((i) 番目\( (アルファベット一覧) \)の文字) = (文字)> なら  
+
もし <((i) 番目\( (ラテン文字一覧) \)の文字) = (文字)> なら  
    [チェック結果 v] を ((チェック結果) と (文字)) にする //「文字」が小文字の場合、そこだけ小文字になる。たとえば文字がbならば、「AbCDEFG……」となる。大文字の場合、大文字のまま入る。たとえば文字がBなら、「ABCDEFG……」となる。
+
[チェック結果 v] を ((チェック結果) と (文字)) にする //「文字」が小文字の場合、そこだけ小文字になる。たとえば文字がbならば、「AbCDEFG……」となる。大文字の場合、大文字のまま入る。たとえば文字がBなら、「ABCDEFG……」となる。
  でなければ
+
でなければ
    [チェック結果 v] を ((チェック結果) と ((i) 番目\( (アルファベット一覧) \)の文字)) にする
+
[チェック結果 v] を ((チェック結果) と ((i) 番目\( (ラテン文字一覧) \)の文字)) にする
  end
+
end
  [i v] を (1) ずつ変える
+
[i v] を (1) ずつ変える
 
end
 
end
 
コスチュームを [文字なし v] にする// 1つめのコスチューム
 
コスチュームを [文字なし v] にする// 1つめのコスチューム
 
コスチュームを (チェック結果) にする
 
コスチュームを (チェック結果) にする
もし <(コスチューム #) = [2]> なら // コスチュームが2つめの「ABCDEFGHIJKLMNOPQRSTUVWXYZ」という名前のものに変わっていれば
+
もし <(コスチューム #) = [2]> なら // コスチュームが2つめの「ABCDEFGHIJKLMNOPQRSTUVWXYZ」という名前のものに変わっていれば
  [大文字? v] を [true] にする
+
[大文字? v] を [true] にする
 
でなければ
 
でなければ
  [大文字? v] を [false] にする
+
[大文字? v] を [false] にする
 
end
 
end
 
</scratchblocks>
 
</scratchblocks>
77行目: 77行目:
 
[p1 v] を [1] にする
 
[p1 v] を [1] にする
 
(26) 回繰り返す  
 
(26) 回繰り返す  
  ((p1) 番目\( (文字一覧) \)の文字) を [1] にする
+
((p1) 番目\( (文字一覧) \)の文字) を [1] にする
  [p1 v] を (1) ずつ変える
+
[p1 v] を (1) ずつ変える
 
end
 
end
 
(26) 回繰り返す  
 
(26) 回繰り返す  
  ((p1) 番目\( (文字一覧) \)の文字) を [0] にする // これらのハッキングブロックは、大量の変数を手軽に作成するために使用している。そのため、ハッキングブロックの使用は必須ではないが、使用することで1つずつ手作業で52個の変数をつくる手間が省略できる
+
((p1) 番目\( (文字一覧) \)の文字) を [0] にする // これらのハッキングブロックは、大量の変数を手軽に作成するために使用している。そのため、ハッキングブロックの使用は必須ではないが、使用することで1つずつ手作業で52個の変数をつくる手間が省略できる
  [p1 v] を (1) ずつ変える
+
[p1 v] を (1) ずつ変える
 
end
 
end
  
 
定義 (文字) が大文字かどうかしらべる
 
定義 (文字) が大文字かどうかしらべる
 
もし <((文字) \( [スプライト1 v] \)) = [1]> なら  
 
もし <((文字) \( [スプライト1 v] \)) = [1]> なら  
  [大文字? v] を [yes] にする
+
[大文字? v] を [yes] にする
  [大文字? v] を [no] にする
+
[大文字? v] を [no] にする
 
end
 
end
 
</scratchblocks>
 
</scratchblocks>

2017年8月23日 (水) 14:26時点における版

テンプレート:他のバージョン Scratch 1.4までは、ラテン文字の大文字と小文字を区別する要素が限られていたため、大文字小文字の判別は、今よりも複雑な手順が必要だった。 Scratch 2.0では、次のようなコスチュームを使う方法と変数名を使う方法で大文字小文字を判別できる。

53個のコスチュームを使う方法

コスチュームに名前をつけるときは、大文字小文字が区別されない。したがって、1つのスプライト内で「A」と「a」のような、大文字小文字が違うだけの2つのコスチューム名をつけることはできない。しかし、コスチュームを () にするブロックなどは、大文字と小文字を区別する。これを利用して、ある文字が大文字であれば「大文字」、小文字であれば「小文字」という文字を変数に入れるのが、次に紹介するスクリプトである。

まず最初に、53個のコスチュームを用意して、それらに次の規則にしたがった名前をつけていく必要がある。

  1. 1番目のコスチュームに「文字なし」などの、ほかのコスチュームとぶつからない名前をつける。
  2. 2番目のコスチュームの名前を「A」(大文字)にする
  3. 3番目のコスチュームの名前を「at」などの「a」+ <好きな文字>にする。(手順4でも、ここで後ろにつけた文字と同じ文字を使うこと)
  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個のコスチュームを使う方法」よりも高速に動作するため、速度が必要なときはこの方法を使うとよい。

Warning 警告: このメソッドでは、ScratchプロジェクトのJSONを編集したブロック (通称、「ハッキングブロック」) を使っている。JSONファイルの編集やハッキングブロックの使用を避けたい場合は、先ほど紹介した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