今回つくるゲーム
難易度
まずはプレイしてみましょう。左右矢印でミノを移動させ、スペースキーで回転させます。ラインが揃うと消えてスコアが入ります。
ステージを作る
まずはテトリスのステージを作っていきます。
考え方は以下の通りです。一つ一つのブロックに番号を振っておくことが今回のゲーム作りの最大のポイントになります。
まず、このように”ブロック”と”枠”の二つのスプライトを作り、”ブロック”にこのように4つのブロックを作ります。大きさは20×20の正方形になるように調整します。
次に、ブロックのコードに以下のようにプログラムを書きます。”枠ブロック”のリストについてはこの後解説します。
ブロックを並べるのブロック定義を作るときに必ず”画面を再描画せずに実行する”にチェックを入れ、番号の変数を作る際には”このスプライトのみ”にチェックを入れるようにしましょう。
次に、枠のスプライトに移動してこのようにコードを書きます。
”枠ブロック”というリストを作って、そこに枠の番号を格納していきます。今回のゲーム作りではこの”リスト作り”がとても大切です。0〜215までの番号のブロックがそれぞれどういう状態なのかをリストで管理していくのです。
枠を作るのブロック定義を作るときにも”画面を再描画せずに実行する”にチェックを入れるようにしましょう。
これで旗をおしてみましょう。ステージができれば成功です。
ミノを落下させる
では次にミノを落下させていきます。ミノが落ちていく考え方は以下の通りです。
では、この動きをコードに書いていきます。ミノと落下の二つのスプライトを作り、以下のようにコードを書いていきます。ミノの移動先というリストを作って、次に移動する先を確認して、その場所が枠だったり、確定ブロックだったりするとそこで止まるようにしています。
この記事では見やすさを優先してコードを一気に紹介してしまいますが、詳しくはYoutube動画をご覧ください。
ミノのコード
落下のコード
pの変数を作る時には”このスプライトのみ”にチェックを入れて下さい。
これで、Sミノが次々に落下するのが作れたと思います。
左右移動
つぎにミノを左右に移動できるようにします。
考え方は以下の通りです。
新たに左右回転というスプライトを用意して以下のようにコードを書きます。
ブロック定義は、先ほど落下の時に作ったものと似ているのでコピーをして作っていくのが良いと思います。(そのために、さきほどpの変数は”このスプライトのみ”にチェックを入れていました。)
左右移動する時に、
7種類のミノを作る
これまではSミノだけで動きを作ってきましたが、テトリスには7種類のミノがあるので、それらをランダムで出していけるようにします。
7種類のミノは以下の通りです。こちらも詳しくはYouTube動画をご覧ください。
これらのミノを順番に決めていく考え方はこちらのとおりです。
これを元にコードを書いていきます。次のミノというスプライトを新たにつくり、そこのコスチュームに7つのミノの絵を書いていきます。最初に作ったブロックを組み合わせれば良いです。(正確に作る必要はありません)
次にコードを書いていきます。
※実際のテトリスは7つのミノがランダムではなく、以下のようなルールで出てきます。
それを反映させる方法もYouTube動画で解説しているのでご確認ください。
回転させる
次にミノを回転させていきます。ここがかなり大変です。考え方としては、以下のように回転するとひとつひとつのブロックの番号がいくつ変わるかというのを見ていき、それをコードに書いていきます。
左右回転のスプライトに以下のようにコードを追加していきます。こちらも
ラインがそろったら崩す
ここまでできたら、次にラインが揃ったら消えて、上のブロックが落ちてくるようにします。考え方は以下の通りです。つねにそれぞれの行の確定ブロックの数を数えておき、確定ブロックが10になると、その行が消えて上からブロックが落ちてくると言うことになります。
それをコードで書くと以下の通りです。こちらも詳しくはYouTube動画をご覧ください。
まずは、落下のスプライトに以下のように「崩す判定を送って待つ」というブロックを追加します。
そして、新たに消して落とすというスプライトを作りましょう。
そこに以下のようにコードを書きます。常に行ごとの数を計算しておき、崩す判定を受け取った時に、行に確定ブロックが10たまっていると、消えて落とすことになるということです。
ゲームの仕上げ
ここまでで、テトリスの基本的な動きは完成です。ここからはゲームを完成させていただきます。
まずは新たにゲーム管理のスプライトを作り、コスチュームにGAMEOVERと書いておきましょう。
レベルを作る
時間が経過するとレベルが上がり落下スピードが速くなるようにします。
ゲーム管理のスプライトに以下のようにコードを書いていきます。
そして、落下のスプライトを以下のように書き換えます。
スコアをつける
テトリスのスコアは以下のように計算されます。
消した行数×消した行数×レベル×100
消して落とすのスプライトに以下のようにコードを追加します。
ゲームオーバーを作る
一番上まで到達するとゲームオーバーとします。
まず、ミノのスプライトに以下のようにゲームオーバー判定のコードを追加します。
そして、以下のコードをゲーム管理に追加します。
最後に以下のコードを、落下、左右回転、次のミノに追加して、ゲームオーバーになったら動かせないようにします。
すべてのコード
これで完成です。あとはBGMや効果音を足して完成です。その方法もYouTube動画で解説していますので是非ご覧ください。
すべてのコードはこちらから確認できます。
コメント
左右回転ですが、何回も改善を試みましたが直りません。
あとURLを何回も送りましたが、表示されていないのでここからリンクしてください。
https://scratch.mit.edu/projects/893799943
質問ありがとうございます。スクラッチでコメントしておきましたのでごかくにんください