シヴァのブログ

UnityやUE4や趣味とかいろいろ...

Scratch(スクラッチ)言語のまとめ

Scratchはビジュアルプログラミング言語と呼ばれるものの一つで、
視覚的にプログラミングを学べる。
子ども向けのプログラミング言語であり、「ブロックを積んでいく」ことで、
実際に動作するプログラムを作っていくのが Scratchの開発スタイルである。


[01]開発画面と画面構成 修正
[02]それぞれの画面で出来る事
[03]ブロックの扱い方
[04]ブロックの種類
[05]ゲームの作り方 入力

[01]開発画面と画面構成 修正

開発画面は大まかに4つの画面で構成されている。

f:id:shivaT:20160217231929p:plain:w600

・ステージ
作ったスクリプトを動かした時の確認を行うことができる。

・スプライトリスト
ステージに表示する画像や背景を登録することができる。

・ブロックリスト
プログラムを作る時の部品が置かれている。

スクリプトエリア
ブロックリストの部品を配置して、プログラムを作る場所。


この4つの画面を使ってゲームを開発していく。

[02]それぞれの画面で出来る事

・ステージ
スクリプトの起動・停止、プロジェクト名の変更ができる。
f:id:shivaT:20160218003346p:plain:w300

・スプライトリスト
画像の登録、新規で画像を作成、ローカルファイルの画像をアップロード、カメラから画像の作成ができる。
f:id:shivaT:20160218003421p:plain:w300

・ブロックリスト、スクリプトエリア
スクリプトエリアは、ブロックリストの上にあるタブによって別のエリアに変化する。

ブロックを配置して、プログラムを作る。

  • コスチュームタグ

スプライトのアニメーションを、主な目的としている。
同じスプライトで、別の画像を追加・変更・編集することができる。

  • 音タグ

スプライトに設定された音を、再生・編集・新規録音することができる。
f:id:shivaT:20160218003446p:plain:w600

プロジェクトを保存するには、
「ファイル」→「直ちに保存」
で、できる。
サインインしていればScratchのサイトに保存され、次インしたとき続きからできる。
データとして持っておきたいときは、
「ファイル」→「手元のコンピューターにダウンロード」
で、自分のパソコンに保存できる。
保存したデータを読み込むには、
「ファイル」→「手元のコンピューターからアップロード」
で保存したデータを選択すれば続きを開発することができる。

[03]ブロックの扱い方

スクリプトエリア上にあるブロックをクリックすると、ステージ上のスプライトを操作することができる。
しかし、ブロック単体ではたいした動きはできない。
なので、ブロックを連結させる。
ブロックには、凸に対して凹のブロックに連結することができる。
しかし、
「何でもかんでも連結できる」
ということではない。
山になっているブロックや、カプセル型のブロック、六角形型のブロックに対して、
凸のブロックを連結することはできない。
f:id:shivaT:20160218122926p:plain:w600
また、平らなブロックや、カプセル型のブロック、六角形型のブロックに対して、
凹のブロックに連結することはできない。
f:id:shivaT:20160218122937p:plain:w600

スクリプトエリアで、連結できるブロック同士を近づけると白く光り出す。
白く光っているときにドロップすれば、ブロック同士が連結する。
連結したブロックを起動すると、上から順番に処理され、一番下まで処理すると止まる。
処理が永遠に繰り返されるというブロックもある。
これを止めるには停止をクリックする。

連結したブロックを移動するには、連結した一番上のブロックをドラックして移動させる。

連結したブロックを解除するには、解除したいブロックをドラックして、
移動させることでドラックしたブロックから下の連結したブロックが解除される。

スプライトに複雑な移動をさせるには、ブロックの連結は必要不可欠となる。

[04]ブロックの種類

ブロックの中には、数値を入力できるブロックや、文字を入力できるブロックがある。
その値を変化させることで、動きを変化させることができる。
また、
数値や文字ではなく、プルダウンによる特殊な指定を行うことができるブロックもある。
数値や文字を入力できる部分と、一部のプルダウンの部分、
そして六角形の窪みがあるブロックには、別のブロックをはめ込むことができる。
f:id:shivaT:20160218175727p:plain:w600

はめ込むことができるブロックは、カプセル型、六角形型がある。
f:id:shivaT:20160218180419p:plain:w300

カプセル型は、ブロックに記載されている事柄を数値か文字で受け止める。
「X座標」と書かれていれば、スプライトの現在のX座標の値を受け取ることができ、
背景の名前が書かれていれば、背景の名前を受け取ることができる。
f:id:shivaT:20160218190931p:plain:w600


六角形型は、ブロックに記載されている事柄があっていたら「1」を、
間違っていれば「0」を受け取ることができる。
記載している事柄を判断して、処理を分岐させることができる。
この「1」と「0」を真偽値と呼び、プログラム上では主に、
「1」をtrue(真)、「0」をfalse(偽)と呼ぶ。

スペースキーが押されたと書かれていれば、
スペ−スキーが押されていれば「1」、押されていなければ「0」を受け取ることができる。

条件式 スペ−スキーが押されている スペ−スキーが押されていない
f:id:shivaT:20160218192945p:plain:w200 f:id:shivaT:20160218193014p:plain:w200 f:id:shivaT:20160218193024p:plain:w200

このようにブロックを作れば、スペースキーが押されたら中を処理する、
押されていなければ処理しないというスクリプトになる。
f:id:shivaT:20160218193241p:plain:w300

マウスのポインターに触れたと書かれていれば、
スプライトがマウスのポインターに触れれば「1」、触れていなければ「0」となる。
f:id:shivaT:20160218193638p:plain:w300

山のブロックは処理開始のブロックでもあり、真偽値の仕組みも持っているブロックである。

(1)緑の旗がクリックされたときと書かれていれば、
緑の旗を押すと「1」になり処理が開始され、押されていなければ「0」なので処理が開始されない。

(2)このスプライトがクリックされたときと書かれていれば、
スプライトがクリックされたときに「1」になり処理が開始され、クリックされていなければ「0」なので処理が開始されない。

という仕組みである。

(1)緑の旗がクリックされたとき (2)このスプライトがクリックされたとき
f:id:shivaT:20160218194708p:plain:w300 f:id:shivaT:20160218194718p:plain:w300

[05]ゲームの作り方 入力

プロジェクト名:「Game」
目的:画像をキーボードで操作できるようにする

キーボードの右矢印を押したら、右に移動するようにする。
キーボードの上矢印を押したら、上に移動するようにする。
f:id:shivaT:20160218201400p:plain:w300
しかし、右斜め上に移動したいときは上手くいかない。
簡単ではあるが、同時入力が取れない。
入力の判定として、後に押されたキーが優先されてしまうからだ。

なので、作り方を変えてみる。

・作り方 その1
f:id:shivaT:20160218210256p:plain:w300
右矢印を押すと、反応がない。
「もし〜なら」のブロックは開始のブロックではないので、このままではスクリプトは起動しない。

・作り方 その2
緑の旗がクリックされたときのブロックを上に連結させる。
f:id:shivaT:20160218210709p:plain:w300
ステージエリアの開始ボタンを押してから右矢印を押してみると、反応がない。
スクリプトは下まで処理されると終了する。
つまり、開始ボタンを押した瞬間にしか右矢印の判定を取ってくれない。

・作り方 その3
入力の判定は、ゲームが起動している間ずっと確認していたい処理である。
f:id:shivaT:20160218211353p:plain:w300
開始ボタンを押してから右矢印を押してみると、スムーズに移動した。

スクリプトが処理を続けている場合は開始ボタンと処理を続けているスクリプトが光っている。
すべてのスクリプトを停止させるにはステージエリアの停止ボタンをクリックすればいい。

同様に上に移動するようにする。
f:id:shivaT:20160218212027p:plain:w300
これで右・上・右斜め上に移動ができる。
「ずっと」のブロックの中で右矢印の確認と上矢印の確認の2つを同時に行っているので、
同時入力の判定が行える。
これで、同時入力の問題が解消できた。

処理が同じで、値を変更するだけであれば、
0から作るよりも作ったブロックを複製したほうが時間の短縮ができる。
左・下移動は右・上の処理の値を変更するだけでできる。
f:id:shivaT:20160218213152p:plain:w300