「無限に遊べるパズル」の作り方
はじめに
スクラッチプログラミングで「無限に遊べるパズル」を作りました。
ピースを箱に詰めるパズルゲームです。
「永久に遊べるパズル」という玩具を息子が買ってもらったのを見て、スクラッチで作ってみようと思いました。
難易度は Level1 だそうです。^^
プロジェクトは↓です。
ゲームのルール
ピースは全部で10個あります。
全部のピースを箱に詰めることができればクリアです。
ピースを重ねて入れることはできません。
各ピースは、回転、反転することができます。
参考にした玩具には、入れ方が783通りあるそうです。^^
ピースの種類
ピースをつかむと移動させることができます。
ピースを離したときに箱の中に入れられれば、箱の中にピースを置きます。
ピースをつかんで箱の中をクリック(タップ)しても置くことができます。
つかんでいるピースを回転させます。
つかんでいるピースを左右に反転させます。
操作はこれだけです。
プログラミングのポイント
パーツのスプライトの名前を統一する
パーツのスプライトの名前は、「パーツ」+半角数字 です。
「〇に触れた」で当たり判定を行うと、自身のスプライトが判定に含まれません。
(〇のところをプルダウンさせても自身のスプライト名は無いです)
〇の部分に入る文字列をループで与えれば、複数のスプライトの判定を少ないコードで書くことができます。
〇の部分の文字列を作るときに、スプライトの名前を統一して置くことでコードを作りやすくなります。
「「(パーツ)と(変数)」に触れた」 の部分になります。
※自身のスプライト名も作成されますが、判定は無視されます
この関数は、つかんだパーツが外枠もしくは他のパーツに触れた場合は「置けない」変数を1にして箱に入れられなくします。
パーツの数を増やしても、「パーツの数」変数を変えるだけでこの部分のコードを変える必要はありません。
パーツのコスチュームは全パターン用意する
パーツの回転、反転をした時にパーツの形が変わりますが、スプライトそのものを回転や反転させるのではなく、コスチュームの切り替えで変えるようにします。
理由は、表示されるスプライトの左上が常に表示の原点になるようにするためです。
(つかんでいる位置をスプライトの左上になるようにします)
全てのパーツのコスチュームは原点を左上にするように描かれています。
回転や反転のボタンを押したときに、各パーツのスプライトコードにそれぞれ合うようにコードを書いておきます。
※真四角は変わらないので何もしません
※ ↑はそれぞれのパーツで違います
箱の中のマスにそれぞれ番号を持たせる
「マス」スプライトは、一定の幅、高さで横5×縦8に埋まるようにクローンしていきます。
※オリジナルはコスチュームを「なし」にして消しておきます
クローンされたときに、自身の位置番号をスプライト変数に設定します。
これで、パーツをつかんでいるときにマスがクリックされるか、マウスが離されたときの位置を知ることができます。
※マスを作らなくてもマウスの座標から計算できますが、コードを簡略化するためにこの方法をとりました
ボタンの判定処理
マウスやタップのボタンの状態は次のように区別されています。
OFF:ボタンが押されていない
ON:ボタンが押された直後(1フレーム)
HOLD:ボタンが押され続けている
RELEASE:ボタンが離された直後(1フレーム)
制御は「背景」のコードに書きました。
スプライトの範囲内にしたいときは、
「(マウスポインター)に触れた」ブロックと組み合わせて使います。
ポイントは以上です。
細かいところでは、
パーツが画面に入りきらなかったので、待機中のパーツを縮小(70%)にしました。
つかんだときに100%に戻しています。
回転や反転をするときはパーツにかぶって見ずらいのでパーツを元の位置に戻すようにしました。
パソコンで作っているときはマウス操作で問題ないと思っていたところが、タブレットでプレイしてみると操作しづらいところがあったりしました。
なんとか形になって良かったです。^^
この記事を最後まで読んで頂きありがとうございました。
他の作品記事もよければ読んでみてください。
「水色のパンダ団」が作ったスクラッチ作品の記事まとめ
スクラッチ作品の作り方や解説をした記事を整理しました。小学生などの初心者やゲームを作りたい中級、上級者などプログラミングのスキル別に作品をまとめています。
0 件のコメント:
コメントを投稿