Scratchの最初のプログラムは工夫を加えないと全く面白くない

プログラミング
My first Scratch program

「Scratch」は過去に何度かいじったことがあるので、基本的な仕組みや使い方はまだ覚えている。

好きな背景を選び、その中に「スプライト」と呼ばれるキャラクター(登場人物・動物など)を配置する。スプライト毎に「コード」(以前のScratchバージョンでは「スクリプト」と呼んでいた)エリアに命令のブロックを並べてプログラムを組み立てていく。

「スプライト」と呼ばれるキャラクター

『10才から始めるプログラミング図鑑』(創元社)を教材にする。この本は、Scratch から始めて、Pythonというプログラミング言語も学ぼうとする教科書だ。

『10才から始めるプログラミング図鑑』(創元社)

どちらかというと、本命はPythonへの導入のようだから、今の私にはピッタリの本だ。いつかはPythonという思いがあった。

私には回り道をしないと気がすまない習性がある。目的地へまっすぐに行くのを嫌って、その周辺をウロウロしないと気がすまない。

Pythonを遠くに眺めながら、マイナーな言語や昔に流行った言語などを訪ね歩いていたから、それぞれの雰囲気ぐらいは色々感じることは出来た。しかし、全て中途半端に終わっているから、何も身についていない。

そんな間でも「いずれはPythonに落ち着こう」とぼんやり思っていた。

この教科書にあるように、Pythonの前に軽くScratchでプログラミングのさわりを勉強してみよう。

まず最初の課題は、「ドラゴンから逃げろ!」という簡単なゲームを作る。

このゲームのコンセプトは、主人公のネコがドラゴンに捕まるまでの時間を競うゲームになる。

ドラゴンはネコに向かってただ近づこうとする。ネコはマウスの動きに追従する。ゲーム者はマウスでネコを移動させながらドラゴンから逃げ回る。

教科書に従って命令ブロックを組み立てていけば、簡単にゲームは完成できる。

この作成過程で学んだことは、

1、ゲームの流れ:初期設定→イベント処理→終了処理。

2、ゲームを面白くする工夫:難易度の調整、イベントの複雑化。

といったところだ。

各スプライトがゲームの開始時点で背景のどの地点にいるかを設定しておかないと、ネコとドラゴンが初めから近くにいたりしたら直ぐに捕まってしまう。ネコとドラゴンの初期状態の位置は離しておく必要がある。

ドラゴンの初期状態の位置

ドラゴンは、登場した時と、ネコを捕まえた時で姿を変化させると状態の変化に感じが出る。スプライトの姿を変えるには、「コスチューム」エリアに登録されている画像を変更する命令を使う。

このゲームはドラゴンから逃げている時間を競うゲームなので、その時間の変化を記憶しておく「変数」を初期設定でゼロにセットしておく。この変数の名前をタイマーにした。

変数「タイマー」を初期設定でゼロにセット

初期設定に続いて、各スプライトにイベントのプログラムを組み立てていく。イベントというのは、ゲームがスタートした時(スタートの旗をクリックした時)とか、ドラゴンがネコに触れた時という、タイミングに応じて起きる変化や行動のきっかけのことだ。

ドラゴンがネコに触れた時

ここでは、「ずっと」と繰り返すブロックを多く使った。ゲームが終了するまで繰り返し行われる命令を、この「ずっと」というブロックで囲んで表現する。英語版では「forever」というコの字型のブロックだ。

ドラゴンがネコを捕まえる(ドラゴンがネコに触れる)とゲームが終了する(全ての命令がストップする)。

さすがに教科書どおりに作成しただけでは全く面白いゲームとは言えない。最初に作るゲームだから当然だが、もっと面白くするにはアイデアが必要だ。

アイデアというのは、難易度を上げたり(ネコやドラゴンの動く速度を調節する。またスプライトの大きさを拡大縮小しても難易度は変化する。逃げ回る範囲が変化するので)、逃げ回る時間を競うことから、何かの得点を稼ぐ点数に変更したり、ゲームを複雑化しながら改良していくことになる。

スプライトの動く速度は、一度に移動する「ステップ」の数字を大きくする。ネコのステップを大きくし、ドラゴンのステップを小さくすれば、ネコは逃げやすくなってゲームの難易度は低くなる。

ドラゴンのステップを小さくする

最終的には、第3のスプライトの魚を配置して、任意の場所でマウスをクリックするとその位置に魚が移動し、その魚を追ってネコが移動し、そのネコを追ってドラゴンが迫ってくるようにした。

魚のコマンドブロック

得点用にスコアという変数を用意し、ネコが魚に振れると1点加算し、ドラゴンがネコに振れるとスコアを1点減算する。ゲームは設定した時間(例えば20秒)に達すると終了する。終了時点の得点で勝敗を決める。

また、ドラゴンがネコに振れると、ネコが「痛い!おしりをかじられた!」と言うように付け加えた。

ネコのコマンドブロック

更に、「もし〇〇なら」というブロックを使って、条件によってスプライトの行動を変えたり、「メッセージを送る」「メッセージを受け取る」などのブロックで、ネコやドラゴンのイベントによってスコアを増減するようにした。

ドラゴンのコマンドブロック

色々やったつもりでも、全然ゲームと言えるようなものではない。単純すぎてあまり面白くはないが、最初の一歩としては良しとしたい。ポテチン。

コメント

タイトルとURLをコピーしました