
「移動可能な場所の色」ってどういうこと?というタイトルになりましたが、とある生徒の子が「マス目を一筆書きで進むゲームを作ってみたい」とのことだったので挑戦してみました。
その中で、移動可能な場所(マス)を分かりやすく表示するプログラムに苦戦したので、記事にして解説してみようと思います。
クローンを使うので、参考になる内容だと思いますので、ぜひ最後まで読んでくださいね。
作成するゲームの紹介

縦に5マス、横に6マスのブロックを配置します。
プレイヤーのネコは矢印キーで上下左右に移動します。
一度踏んだブロックは次に進んだ時に消えるようにします。
上の画像の場合、進むことができる方向は「右か下」になります。
この時、移動可能な(進める)場所のブロックの色を変えようというのが今回やりたいことです。
ブロックの配置をプログラム

「ブロックリスト」という名前のリストを作成していますが、ゲームを作り込む上で必要になってきますが、この記事の内容には関係ないので作らなくても大丈夫です。
クローンを使ってそれぞれを識別する際のポイントは、「ブロック」変数を「このスプライトのみ」で作成することです。
しっかり識別出来ているか確認してみましょう。

1から30番まで、それぞれ番号が割り振られています。
これで、準備は完了です。
移動可能な場所とは?
プログラムを作成する前に、移動可能な場所をどうすればコードに出来るかを考えてみましょう。
上の画像の「20」にいる場合を例に考えてみます。
- 上(14):「20 – 6」の場所
- 下(26):「20 + 6」の場所
- 右(21):「20 + 1」の場所
- 左(19):「20 – 1」の場所
これらを考慮すると、このようなコードが考えられると思います。
(コスチューム1が通常、2が色を変えたブロックです)

一見、正しく動作しているように見えますが、一歩下に進んでみると・・・

移動可能ではない場所まで、色が変わってしまいました。
今いる場所が「7」なので、「7-1」で「6」のブロックが変わってしまいます。
同様に右端にいる場合も「+1」のブロックの色が変わっていまします。

プログラムを修正してみよう
修正前にまた考えてみましょう。
右か左、端のいずれかのブロックにいる時に離れた場所の色が変わってしまうのが現在の問題点です。
「6にいる時に7の色が変わる」や「7にいる時に6の色が変わる」という状態です。
これをコードで表現するには少し考える必要があります。
今いる場所ではなく、色が変わってしまうクローンの番号をもとに法則を考えます。
- 右端にいる時のクローン(1, 7, 13, 19, 25):6で割るとあまりは1
- 左端にいる時のクローン(6, 12, 18, 24, 30):6で割るとあまりは0
※厳密には今回の場合、1と30は無視して問題ありません
上の考えをコードに反映してみます。

「あまりが0や1ではない」とすることで両端問題は解決すると思います。
まとめ
修正したことで、無事、移動可能な場所の色が正しく動作するようになりました。
「一筆書きゲーム」として完成はしていませんが、記事はここまでにしたいと思います。
この記事で伝えたかったことは、思い通りにいかないトラブルに出会った時こそ、プログラミング上達のチャンスということです。
解決するために精一杯考え、思い通りに動くようになった時こそが、プログラミングの楽しさのひとつと言えると思います。
ぜひ楽しみ、苦しみながら、成長していきましょう٩( ᐛ )و



コメント