【#0】~前置き編~新人プログラマーはテトリスを作れるのか?

2021.05.11

CATEGORY : プログラミング 雑記

こんにちは、まだまだ新人のあんみんどうふです。

皆さんはテトリスというゲームをご存知でしょうか?

テトリスとは、降り続ける4つのブロックの塊「テトリミノ」、通称ミノを操作して横に1列並べると消えるという落ちものパズルゲームの一種です。初めは1988年11月18日にPC版から始まり、12月になるとアーケード版やファミコン版として発売し、1年後にはゲームボーイ版で発売されました。有名になり始めたのはこの辺りからでしょうか(当時は生まれてすらないのでわかりませんが・・・)。

それから約30年の時を経て、現在は「TETRIS EFFECT」や「TETRIS 99」、「ぷよぷよテトリス」といったテトリスのゲームが発売されています。私よりずっと年上ですよ、すごいですね~。

そんなテトリスを作ってみようと思います。果たして学生期間に得た知識のみでテトリスは作れるのか。

きっかけ

私が学生の頃、Switchのセールでダウンロード版の「ぷよぷよテトリスS」が割引価格で販売されてました。パッケージ版の中古価格よりも安く、以前から「ぷよぷよ」を好んでプレイしていたので、テトリスはおまけ程度にぷよぷよ目当てで購入しました。

初めは「ぷよぷよたのし~!ばよえ~ん!」という感じにぷよぷよをエンジョイしてました。私は階段積み、挟み込み、カギ積みがちょこっとできる程度の初心者ぷよらーです。普通のCPUなら普通に勝てるぐらいの普通な実力で、誰かと対戦するといい勝負になるか圧倒的に負けるかの2つでした。

対戦ゲームって基本的に勝てないとあまり楽しくないじゃないですか。楽しむために強くなることも大切です。そこで私はYouTubeでプロの動画を見たり、連鎖の組み方が載ってあるサイトを見て練習しましたが、いまいち覚えられず効果は微妙でした。

 

「そういやこれってぷよぷよテトリスだよな・・・?」

今更気づいてしまった私はコントローラーを手に取り、テトリスを選択。当時の私はぷよぷよがちょこっとできてもテトリスはド初心者なのでCPU相手でも負けてしまいます。

ですがどうでしょう。

1~2ライン消すだけで攻撃できる!4ラインまとめて消すと高火力!すげえ!!

ぷよぷよとの違いに新鮮さを感じハマってしまいます。

 

ぷよぷよテトリスは勿論ぷよぷよ同士やテトリス同士で対戦することができますが、実はぷよぷよVSテトリスといういわゆる異種格闘技が行えるわけです。相手に送るおじゃまの数も調整されており、ぷよぷよかテトリスかで全然違ってきます。

 

ぷよぷよは積むのに時間がかかる分、一発が強い攻撃を乗算でぶつけるバズーカタイプ

5~6連鎖ほどで致命傷を負わせ、それ以上の連鎖は抵抗しないとワンパンしてしまうぐらい高火力です。

 

それに対しテトリスは一撃は弱いものの、消すスピードが速く手数で攻めることができるマシンガンタイプといったように分けられています。

攻撃方法が様々あり、ラインを連続で消す「REN(レン)」、Tミノを回転入れして消す「T-spin(Tスピン)」、4ラインまとめて消す「TETRIS(テトリス)」があります。

更に後者二つを続けて行うと「Back to Back(バックトゥバック)」が発生し、更に高火力になった攻撃をぶつけることができます。

 

これがまさに「ぷよぷよテトリス」の真骨頂ではないでしょうか。私はこの手数で攻めるテトリスにハマりにハマってしまい、気づけば2~3時間ずっとやり続けていました。一人で。

また、学校の昼休みにぷよぷよが上手い友達と勝負して更に腕を磨き続けました。初めは実力差が大きく負け続けていましたが、テトリスを極めるうちにその差は縮まり、最終的にはその友達に「テトリスほんとクソゲーだわ」と言わせるぐらいに上達しました。

 

いや~、楽しいね!!^^

 

本題

さて、ひょんなことからテトリスにドハマりしてしまった私ですが、実はテトリスというのはゲームとしてだけでなくプログラミングの教材としてもよく使われており、今回私もC#.NETの勉強および学生期間で学んだことの復習として作るつもりです。決してテトリスで遊びたいわけではないですよ?

検索するとWeb上で動作する簡単なテトリスがちらほらとヒットしますが、実はどれも旧式のテトリスばかりで、現在のテトリスに対応したものはなかなか見つからないです。

旧式テトリスは「ミノが落ちてくる」「一列揃ったら消える」というシンプルな要素で構成されているので教材として取っつきやすいのだと思いますが、今回はワンステップ進んだワールドルール仕様のテトリスを作ります。

 

ワールドルールとは

現在のテトリスはワールドルールと呼ばれる、2002年発売の「テトリスワールド」という作品で初めて採用されたルールが適用されています。主な仕様は以下の通りです。

  • テトリミノの偏りを無くし、1セットで7種すべてのミノが出てくるようにする。
  • テトリミノを1つだけキープし、好きな時に入れ替えられる「ホールド」の実装。
  • 上ボタンを入力することで即座に真下へ落下させる「ハードドロップ」の実装。
  • テトリミノの回転入れというテクニックが可能になる「スーパーローテーション」の実装。

これらの仕様を取り入れたのがワールドルール、即ち現在のテトリスです。

 

特にスーパーローテーションが大きい要素で、これが実装できると先述の「Tスピン」ができるようになります。

また、Tミノだけでなく他のミノも回転入れが可能になります。一部、明らかに入らんだろって所にも入ったりするものもありますがこれも仕様です。

これらの実装を目標に作ります。


実は学生の頃にもテトリス制作を試みたことがあったのですが、スーパーローテーションの部分で行き詰ってそのまま放置してしまいました。なのでそのリベンジも兼ねてます。

 

ということで、

テトリス自作プロジェクト、開始です。

 

まずはフィールドとテトリミノの実装から。何事も土台は大事。

#1 フィールド実装編へ続く・・・。

こんにちは、あんみんどうふです。 今回はテトリスを動かすためのフィールドを作ります。前回の記事はこちら↓ https://www.terasol.co.jp/various/6135 全編見たい方は「新人プログラマーはテト...

(早くて1週間に1回のペースで上げていきます。音沙汰なくなったら察してください)

 

全編見たい方は「新人プログラマーはテトリスを作れるのか?」というタグにまとめてますのでそちらからどうぞ。