Posted at

Arduino + カラー液晶で落ち物ゲームを作る

More than 3 years have passed since last update.


概要

前回は、モノクロ液晶で簡単なゲームを作ってみました。

今回はそこから進化して、液晶がカラーになりました!

折角カラーなので、色を使った落ち物ゲームを作ってみたいと思います。


作るゲーム

下記のようなゲームにしてみたいと思います。


  • w6 x h12の盤面

  • 2個のピースが繋がったブロックが落ちてくる

  • 色は5色

  • 同色のピースを縦・横に4つ以上つなげると消える

  • 連続して消える(チェイン)と、チェイン数に応じてスコアが2^(chain-1) * 10 ずつ加算される


使用材料

前回とカラー液晶以外は全く同じです。

それにしても、1個300円は安い・・。前回のモノクロ液晶の半分以下です。。。


使ったカラー液晶について (ST7735)

使用したカラー液晶には、ST7735というICが積まれていました。

ST7735のライブラリはいくつか有るようなのですが、

今回は、sumotoyさんが作ったライブラリを利用しました。

ただ、128x128のこの液晶向けのコンフィグがなかったので、

コンフィグを追加して利用しています。

githubはこちら

Arduinoに追加する場合は、githubからZIPでダウンロードし、

[スケッチ] -> [ライブラリをインクルード] -> [.ZIP形式のライブラリをインストール] 

でダウンロードしたZIPを選べばOKです。


回路図

ハンダ付けをするときのために、簡単な回路図を作っています。

ソフトには水魚堂さんのBSch3Vを使わせていただいております。

直感的に操作ができ、とても便利です。

今回は下記のようになりました。

※回路図としては、記法的に不正確かもしれませんが、ご了承下さい。。

color-blockgame-LCD.png

液晶とタクトスイッチを、atmega328pにつなげただけですね。

ちなみに単三電池2本で動かすので、ロジックレベルコンバータは不要です(開発中のブレッドボードでは使いましたけどね!)。

※本回路図エディタのファイルも、落ち物ゲームのリポジトリに入れております。


ソースコード

githubにあげています

今回は、

・Arduino部分

・View部分

・ゲーム処理部分

で分割してみました。

モダンなC++の機能が使えるのは、

普段LLを使っている身としてはありがたいです。


完成品

こんな感じのゲームになりました。

arduino + カラー液晶で落ち物ゲームを作る


感想

カラー液晶の発色を見た時に、子供の頃初めてゲームボーイカラーの液晶を見た時のことを思い出しました。

当時は、ゲームボーイカラーで表示されたスライム(ドラクエモンスターズ1です!)の青さに、本当にとても感動したものです。。

ところでゲームボーイカラーのスペックは、下記のようなものだったようです。

wikipedia:ゲームボーイカラー#基本仕様から引用


  • CPU:カスタムZ80 4MHz / 8MHz(カラー専用カートリッジ用の倍速モード)

  • RAM : 32kバイト(カートリッジ側に128kバイトまでの増設メモリを搭載可能)

  • VRAM:16kバイト

  • ROM:最大64Mビット(=8Mバイト、発売されたソフトの実績値)

  • サウンド:ステレオ、PSG音源4チャンネル (波形メモリ1音、矩形波2音、ノイズ1音)

  • 画面:TFT液晶ディスプレイ(160×144ドット、32768色中最大56色表示可能)

それに対してarduino仕様のatmega328pは、


  • CPU: 8bit RISC 16MHz

  • RAM: 2kバイト

  • ROM: 32kバイト

CPUは速いですが、RAMは1/16、ROMは 1/512です。

意外とゲームボーイカラーって、RAM多かったんですね。

ということで、カラー液晶を使った工作でした!

さて、次回は「音」を出してみたいと思います!