Scratchでゲーム

Scratchとは、子供達がデジタルな物語、ゲーム、アニメーションを作れるシンプルなビジュアルインターフェースを持ったプログラミング言語です。
ビジュアルプログラミング言語とは英字や数字のようなテキストを使うのではなく、視覚的なオブジェクトで取り組むものを指します。ブロックをつなげていくだけでプログラミングができるので、直感的な操作が可能です。

Scratch - Imagine, Program, Share
Scratch is a free programming language and online community where you can create your own interactive stories, games, and animations.

Scratchはネット上に沢山のプログラミング情報があり、Scratchで作られたゲームにはunityなどのブラウザゲームと遜色のない物もあります。
一定の条件を満たしたらScratcherに昇格して、クラウド変数が使えるようになります。クラウド変数を使えば、これを介してオンラインゲームも作れます。
作ったゲームは自分で遊ぶだけでなく全世界に発信できるので、モチベーションも保ちやすくなります。もしかしたら、プログラミングを趣味にしたい初心者が選ぶプログラミング言語として最適かも知れません。
ただ、JavaScriptなど実際に使われているプログラミング言語と比べると、劣る面があるので気を付ける必要があります。
そこで、実際にブラウザ上で動いているJavaScriptScratchを機能面で比較してみます。
同じ点
(1)インタープリタ型である
プログラミング言語の命令を一つずつ,機械語に解釈しながら実行する方式です。通訳を介在しながら外国語を話す様を思い浮かべるとよいでしょう。
Scratchでも、if・forなどの制御構造による手続き型プログラミングができ、算術演算子、比較演算子、論理演算子など一通り揃っています。ブロックの繋がりを外す事でデバッグ処理が出来ます。
(2)オブジェクト指向である
「ある役割を持ったモノ」ごとにクラス(プログラム全体の設計図)を分割し、モノとモノとの関係性を定義していくことでシステムを作り上げようとするシステム構成の考え方のこと。
・オブジェクト:直訳すれば「物」「対象」という意味。プログラミングにおいてはデータと処理の集まりを意味している。
・クラス:データと処理をひとつにまとめる機能。モノ(オブジェクト)の設計書のようなもの。
クラスを作る際のヒントとして、作りたいものの共通点を探してあげるとわかりやすいでしょう。
・メソッド:モノ(オブジェクト)が持っている処理のこと。
Scratchも、オブジェクト指向です。
違う点
(1)並行処理ができない
JavaScriptではしばしば、ネットワークを介したリクエストのような “待ち” がある処理を行う。これ対処するために非同期処理をサポートし並行処理が可能となっています。
もしも待ちの間にプログラムを停止/sleep させると、その間に他の処理をそのスレッドで行うことが出来ない(ブロッキング)。もしネットワークリクエストが返ってくるまでブロッキングしたとすると、その間ブラウザのレンダリングも停止してしまう。
もう一つ、JavaScriptは並列処理による並行処理もサポートしています。
×Scratchではビジュアルであるがゆえ、オブジェクト同士が独立していて並列並行処理されそうな印象を受けます。しかし、並列処理による並行処理はできません。「メッセージを送る」、「メッセージを受け取る」を使って実行の順番を指定する必要があります。
(2)配列がない
JavaScriptには様々な変数の型が存在します。文字列や数字、真偽値などがありますが、そうした変数を複数格納できるのが配列です。最も基本的な定義は [] で行われます。
配列はJavaScriptの中でもよく使われるオブジェクトです。
配列とは値に順序をつけて格納できるオブジェクトです。 配列に格納したそれぞれの値のことを要素、それぞれの要素の位置のことをインデックス(index)と呼びます。 インデックスは先頭の要素から0、1、2のように0からはじまる連番となります。
またJavaScriptにおける配列は可変長です。 そのため配列を作成後に配列へ要素を追加したり、配列から要素を削除できます。
×Scratchには配列がありません。そのため、クローンにインデックスをつけて配列に格納すると言う処理が出来ません。この点がScratchでゲームを作る時、一番問題です。クローンを削除するためには、アクションが必要です。「もしy座標<-180なら」とか、削除するためのスプライトを作り、「もしスプライト3に触れたなら」とかの処理で対処しなければなりません。
文字列の表「リスト」は作れるので、配列の最低限の機能は、これで補う事になります。
(3)割り込み処理ができない
通常のプログラムの動作中,緊急に処理しなければならなかったり,ある時間までに処理を終えなければならなかったりすることがあります。このような処理を記述する目的で割り込み処理があります。割り込み処理は,CPUのハードウェア機能として実現され,通常のプログラムの実行を強制的に中断し、別のプログラム処理を割り込ませることができます。 割り込みした処理が終了した後は,元のプログラムをそのまま続行します。
×Scratchでは、JavaScriptでdocument.addEventListener(‘キーイベント’, イベント発生時に実行する関数)と書くかわりに、オブジェクトのループ中に’キーイベント’を設置する形になります。反応が悪くならないよう工夫が要ります。
ゲーム作りに便利な点
(1)サウンドを使える
音のブロックがあり、簡単に扱えます。
(2)文字の表示
Scratchではゲーム画面上に文字を表示する。JavaScriptでは、ブラウザ上へ文字列を表示する。想定されている使い方では簡単だが、こだわると難しくなる。
(3)スプライトが用意されている
スプライトのクローンが簡単につくれ、そこに便利な機能はあるが、慣れるまで使いにくい。
(4)デバッグがし易い
ブロックの繋がりを外す事でブレーキポイントになるし、変数を表示で、その値をリアルタイムで画面上に表示できる。

試しにScratchでゲームを作ってみました。
Scratch版ノストロモ
Scratch版スペースマウス

コメント