たいさブログ

taisa's engineer blog

C

C言語初級者がMacのコンソールで実行可能なテトリスを作ってみた

投稿日:2019年3月26日 更新日:


C言語初級者がMacのコンソールで実行できるテトリスを作ってみました。参考にした動画はこちらです。テトリスについてはWikipediaも参考にしました。この投稿では作ってみた上で気になった箇所をピックアップして解説していきます。全ソースコードはこちらで確認できます。これについては、Youtubeにあげている方にも許可を頂いています。

テトリス – Wikipedia

日本では、 1988年にセガ・エンタープライゼス(後の セガ・インタラクティブ)から発売された アーケード版( セガ・システム16版)の人気により浸透した。当時はまだ操作法が確立されていなかったが、このシステム16版の登場以降は同作のものが日本国内における 事実上の標準となり、その影響力から特に「 セガテトリス」とよく呼ばれる( 2000年にアーケードと …

まずテトリスの枠を作る

まず最初にテトリスの枠を作ります。テトリスの枠は横が12個、縦が22個のブロックでできています。なので下の図のようにそのブロック箇所へ1を立てて、ブロックを描画していけばよいことになります。

単純に書くと以下のようになりますが、それを少し整理してchar field[FIELD_HEIGHT][FIELD_WIDTH];のフィールドに値を格納する書き方に変更すると以下のようになります。

ミノを表示する

枠が表示できたら次は、ミノを表示します。ミノは下図のように7種類ありますが、ここではテトリス棒を表示することをやってみます。

枠を表示したFieldを元にし、あらたにミノを表示するdisplayBuffer領域を確保しミノを表示します。最初にミノを表示する箇所、右の黒枠箇所となります。

1秒に1回更新する

以下のコードを使えば1秒に1回更新することができます。

キーボード入力を取得する

Windowsとは違いLinux環境ではkbhit()に相当するものが内容なのでこちらのサイトにある関数をそのまま利用しました。また、動画にはなかったですが、booleanを扱うために#include <stdbool.h>を追記しています。

aキーで左、sキーで下、dキーで右、スペースキーで回転するようになっています。

ミノが壁にあたるかを判定する

ミノが壁にあたるかを判定するには以下のような関数でチェックします。

行が揃ったら消す

まとめ

まだWindowsで実行していないのでわかりませんが、Windowsとの違いは、kbhit()#include <stdbool.h>includeするところあたりかと思います。また、Macのコンソール場合はclearコマンドで描画し直しているので履歴には残ってしまいます。動画を見て写経しただけですがテトリスってこんな感じで作れるんだなと思い楽しむことができました。改善や機能追加する点はまだたくさんあるので時間をみて更新していこうと思います。


-C

執筆者:

関連記事

関連記事はありませんでした

Top