【Scratch】パックマンを読み解く

【Scratch】パックマンを読み解く

Scratch 1.4にはパックマンのサンプルプログラムが付いています

非常に完成度の高いゲームなので、どうやって実装しているのか調べてみました。一度にゲーム全体を把握しようとするとわけがわからなくなるので、まずはパックマンの動きだけを調べてみることにします

パックマンだけの実装

わかりやすくするために、以下の機能だけを残して、他の処理は取り除きました

・矢印キーでのパックマン操作
・迷路の壁の判定(ワープもする)
・モンスターの部屋には入らない
・パックマンが動いているときはパクパクとアニメーション
・黄色いドットを食べる(音も鳴らす)

なので・・
・オープニング画面はなし
・スコアはなし
・パワーエサはなし
・敵もなし
・フルーツターゲット(ボーナス)もなし
・食べ終わってもクリアにはならない
です。
ただひたすらパクパク食べるだけです

これでプログラムがかなりシンプルになりました

こちらがそのプログラムです
パックマンただひたすら食べるだけ Scratchで作成

パックマンのコスチューム

コスチュームは全部で5つ

【Scratch】パックマンを読み解く

5つめのCollisionというコスチュームは、壁との当たり判定に使っています
拡大したのがこちら

【Scratch】パックマンを読み解く

オリジナル版は4つのマーカーの色が同じような青だったので、わかりやすく赤・水色・緑・青に変更しました。壁との衝突判定時に一瞬だけこのコスチュームに切り替えて、上下左右のマーカーの色が壁の色にぶつかっていないかを調べています

ステージ

背景は2つ。オリジナル版ではステージのクリアごとに交互に利用していますが、今回のプログラムでは切り替えていません。切り替えたい場合は手動で。壁部分に同じ色を使えば、自作のコースに差し替えても動作すると思います

【Scratch】パックマンを読み解く

プログラムについて

使っている変数

パックマンの動きだけだと、変数はこれだけです。黄色い背景の変数は「このスプライトのみ」です。このプログラムでは全ての変数を「このスプライトのみ」にしても動作しますが、この先の拡張を考えて一応オリジナルのプログラムと同じにしています

DesiredDir行きたい方向(上(1) 右(2) 下(3) 左(4))
FrameCount実行してからずっとカウントし続けるカウンター(コスチュームの変更に利用)
HitWall壁にぶつかったかの判定
JailColourモンスターの部屋の入り口にぶつかったかの判定
PacmanDirパックマンの行く方向(上(1) 右(2) 下(3) 左(4))
PackmanFrame最初のコスチュームの番号
PackmanSpeedパックマンの速さ。数値を大きくするとパックマンが早く動きますが、数値によっては壁をすり抜けたり、ドットを食べ残したりします。変更する場合は1.0〜2.0くらいで
TempCostumeコスチューム番号を一時的に保存
TempDirパックマンの向きを一時的に保存
TempX現在のx座標を偶数に変換した値を一時的に保存
TempY現在のy座標を偶数に変換した値を一時的に保存

プログラムの概要

2つのスレッドで構成されています

1つめ

パックマンを実際に動かす処理を行なっています

【Scratch】パックマンを読み解く

2つめ

キーの押下状態を調べて、行きたい方向に壁がなければ進むように変数にセットします
下矢印の時だけ、モンスターの部屋に入らないようにする処理を追加しています
ドット(黄色)に触れれば黒で塗りつぶします

【Scratch】パックマンを読み解く

こうやってプログラムを読み解いて行くと、そんなに複雑ではないことがわかります。ドットを食べる処理が黒く塗りつぶしているだけだったり、ワープの処理も拍子抜けするくらい簡単だったりします

これならがんばれば自分でも作れそうな気がしますね

Scratch 3.0に対応した書籍です[PR]

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