スクラッチでテトリスtetrisゲームの作り方

上級

今回つくるゲーム

難易度5 out of 5 stars

今回はスクラッチでテトリスゲームを作っていきます。どうやって、ミノを落としたり移動させたり、回転させたりするのか、ラインがそろったときにどのようにブロックを崩すのか、など、テトリス作りにはとても難しいロジックが多く存在します。上級者向けではありますが、手順に沿ってやっていけば、誰でも作れるので是非チャレンジしてみて下さい。

まずはプレイしてみましょう。左右矢印でミノを移動させ、スペースキーで回転させます。ラインが揃うと消えてスコアが入ります。

youtube解説

こちらの動画ではわかりやすくテトリスゲームの作り方を解説していますのであわせてチェックしてください。チャンネル登録もよろしくお願いします!

[スクラッチ]テトリス(TETRIS)の作り方①

ステージを作る

まずはテトリスのステージを作っていきます。
考え方は以下の通りです。一つ一つのブロックに番号を振っておくことが今回のゲーム作りの最大のポイントになります。

スクラッチでテトリスtetrisゲームの作り方


まず、このように”ブロック”と”枠”の二つのスプライトを作り、”ブロック”にこのように4つのブロックを作ります。大きさは20×20の正方形になるように調整します。

スクラッチでテトリスtetrisゲームの作り方

次に、ブロックのコードに以下のようにプログラムを書きます。”枠ブロック”のリストについてはこの後解説します。

スクラッチでテトリスtetrisゲームの作り方

ブロックを並べるのブロック定義を作るときに必ず”画面を再描画せずに実行する”にチェックを入れ、番号の変数を作る際には”このスプライトのみ”にチェックを入れるようにしましょう。

スクラッチでテトリスtetrisゲームの作り方
スクラッチでテトリスtetrisゲームの作り方

次に、枠のスプライトに移動してこのようにコードを書きます。

”枠ブロック”というリストを作って、そこに枠の番号を格納していきます。今回のゲーム作りではこの”リスト作り”がとても大切です。0〜215までの番号のブロックがそれぞれどういう状態なのかをリストで管理していくのです。

スクラッチでテトリスtetrisゲームの作り方

枠を作るのブロック定義を作るときにも”画面を再描画せずに実行する”にチェックを入れるようにしましょう。

これで旗をおしてみましょう。ステージができれば成功です。

ミノを落下させる

では次にミノを落下させていきます。ミノが落ちていく考え方は以下の通りです。

スクラッチでテトリスtetrisゲームの作り方
スクラッチでテトリスtetrisゲームの作り方

では、この動きをコードに書いていきます。ミノ落下の二つのスプライトを作り、以下のようにコードを書いていきます。ミノの移動先というリストを作って、次に移動する先を確認して、その場所が枠だったり、確定ブロックだったりするとそこで止まるようにしています。

この記事では見やすさを優先してコードを一気に紹介してしまいますが、詳しくはYoutube動画をご覧ください。

ミノのコード

スクラッチでテトリスtetrisゲームの作り方

落下のコード

スクラッチでテトリスtetrisゲームの作り方
スクラッチでテトリスtetrisゲームの作り方

pの変数を作る時には”このスプライトのみ”にチェックを入れて下さい。

スクラッチでテトリスtetrisゲームの作り方


これで、Sミノが次々に落下するのが作れたと思います。

左右移動

つぎにミノを左右に移動できるようにします。
考え方は以下の通りです。

スクラッチでテトリスtetrisゲームの作り方
スクラッチでテトリスtetrisゲームの作り方

新たに左右回転というスプライトを用意して以下のようにコードを書きます。

スクラッチでテトリスtetrisゲームの作り方

ブロック定義は、先ほど落下の時に作ったものと似ているのでコピーをして作っていくのが良いと思います。(そのために、さきほどpの変数は”このスプライトのみ”にチェックを入れていました。)
左右移動する時に、

スクラッチでテトリスtetrisゲームの作り方
スクラッチでテトリスtetrisゲームの作り方

7種類のミノを作る

これまではSミノだけで動きを作ってきましたが、テトリスには7種類のミノがあるので、それらをランダムで出していけるようにします。

7種類のミノは以下の通りです。こちらも詳しくはYouTube動画をご覧ください。

スクラッチでテトリスtetrisゲームの作り方

これらのミノを順番に決めていく考え方はこちらのとおりです。

スクラッチでテトリスtetrisゲームの作り方

これを元にコードを書いていきます。次のミノというスプライトを新たにつくり、そこのコスチュームに7つのミノの絵を書いていきます。最初に作ったブロックを組み合わせれば良いです。(正確に作る必要はありません)

スクラッチでテトリスtetrisゲームの作り方

次にコードを書いていきます。

スクラッチでテトリスtetrisゲームの作り方
スクラッチでテトリスtetrisゲームの作り方
スクラッチでテトリスtetrisゲームの作り方


※実際のテトリスは7つのミノがランダムではなく、以下のようなルールで出てきます。

スクラッチでテトリスtetrisゲームの作り方

それを反映させる方法もYouTube動画で解説しているのでご確認ください。

回転させる

次にミノを回転させていきます。ここがかなり大変です。考え方としては、以下のように回転するとひとつひとつのブロックの番号がいくつ変わるかというのを見ていき、それをコードに書いていきます。

スクラッチでテトリスtetrisゲームの作り方
スクラッチでテトリスtetrisゲームの作り方
スクラッチでテトリスtetrisゲームの作り方
スクラッチでテトリスtetrisゲームの作り方
スクラッチでテトリスtetrisゲームの作り方
スクラッチでテトリスtetrisゲームの作り方
スクラッチでテトリスtetrisゲームの作り方

左右回転のスプライトに以下のようにコードを追加していきます。こちらも

スクラッチでテトリスtetrisゲームの作り方
スクラッチでテトリスtetrisゲームの作り方

ラインがそろったら崩す

ここまでできたら、次にラインが揃ったら消えて、上のブロックが落ちてくるようにします。考え方は以下の通りです。つねにそれぞれの行の確定ブロックの数を数えておき、確定ブロックが10になると、その行が消えて上からブロックが落ちてくると言うことになります。

スクラッチでテトリスtetrisゲームの作り方
スクラッチでテトリスtetrisゲームの作り方

それをコードで書くと以下の通りです。こちらも詳しくはYouTube動画をご覧ください。

まずは、落下のスプライトに以下のように「崩す判定を送って待つ」というブロックを追加します。

スクラッチでテトリスtetrisゲームの作り方

そして、新たに消して落とすというスプライトを作りましょう。

スクラッチでテトリスtetrisゲームの作り方

そこに以下のようにコードを書きます。常に行ごとの数を計算しておき、崩す判定を受け取った時に、行に確定ブロックが10たまっていると、消えて落とすことになるということです。

スクラッチでテトリスtetrisゲームの作り方
スクラッチでテトリスtetrisゲームの作り方
スクラッチでテトリスtetrisゲームの作り方

ゲームの仕上げ

ここまでで、テトリスの基本的な動きは完成です。ここからはゲームを完成させていただきます。

まずは新たにゲーム管理のスプライトを作り、コスチュームにGAMEOVERと書いておきましょう。

スクラッチでテトリスtetrisゲームの作り方

レベルを作る

時間が経過するとレベルが上がり落下スピードが速くなるようにします。

ゲーム管理のスプライトに以下のようにコードを書いていきます。

スクラッチでテトリスtetrisゲームの作り方

そして、落下のスプライトを以下のように書き換えます。

スクラッチでテトリスtetrisゲームの作り方

スコアをつける

テトリスのスコアは以下のように計算されます。

消した行数×消した行数×レベル×100

消して落とすのスプライトに以下のようにコードを追加します。

スクラッチでテトリスtetrisゲームの作り方

ゲームオーバーを作る

一番上まで到達するとゲームオーバーとします。

まず、ミノのスプライトに以下のようにゲームオーバー判定のコードを追加します。

スクラッチでテトリスtetrisゲームの作り方

そして、以下のコードをゲーム管理に追加します。

スクラッチでテトリスtetrisゲームの作り方

最後に以下のコードを、落下左右回転次のミノに追加して、ゲームオーバーになったら動かせないようにします。

スクラッチでテトリスtetrisゲームの作り方

すべてのコード

これで完成です。あとはBGMや効果音を足して完成です。その方法もYouTube動画で解説していますので是非ご覧ください。

すべてのコードはこちらから確認できます。

テトリスTETRIS

コメント

  1. 怪盗勇者 より:

    左右回転ですが、何回も改善を試みましたが直りません。
    あとURLを何回も送りましたが、表示されていないのでここからリンクしてください。
    https://scratch.mit.edu/projects/893799943

    • ビンゴおじさん より:

      質問ありがとうございます。スクラッチでコメントしておきましたのでごかくにんください