saino.me (kaishuu0123)

都内でひっそりと生きる IT エンジニアの個人ブログです

Arduino UNO と秋月 0.96 インチ(128x64) OLED でスペースインベーダー (Space Invaders) ゲームを作ってみた

f:id:kaishuu0123:20191129154112j:plain

相変わらず、Arduino UNO をコツコツと触っています。

タクトスイッチによる入力と、前回の記事(Arduino UNO と秋月 0.96 インチ OLEDで遊ぶ(OLED の描画が遅い問題の対応) - saino.me)で自分の知識として材料が揃ったので、早速スペースインベーダーゲームを作ってみました(∩´∀`)∩

モチベーション

せっかくそこそこきれいに出力できる OLED が制御できるようになったので、アニメーションをする何かを作ろう、とも思ったのですが、ある程度インタラクティブ(対話)性があるほうが、何を作っている感が出るかなぁと思ったためです。

プログラミングに関しては、そこそこ頑張れる自覚があったので、表示部分とボタン入力が単純かつ、内部ロジックはそこそこ書くゲームがいいだろう、と思ってやってみました。

スペースインベーダーを選んだ理由は単にキャラが可愛いからです。ドット絵いいですよね、ドット絵。

使用した部品

  • Arduino UNO R3 x 1
  • タクトスイッチ x 3
  • ジャンパワイヤ x 7
  • 配線用の適当なワイヤ x 4
  • 0.96 inch OLED

動画

早速のデモ動画です。こういう感じで動きます。ゲームオーバーの画面とかも見せたかったので、わざとやられていたりしています(; ・`ω・´)

配線図

f:id:kaishuu0123:20191129154116p:plain

ちょっとゴチャゴチャしてますが、前回記事の OLED への接続は変わりません。

あとは、2, 3, 4 番ピンを各種タクトスイッチに取り付けて、入力を読み出すようにしています。

今回は、左キー、右キー、ショットキーと3つのボタンを横に並べましたが、配置を変えれば十字キーのような動きをさせることも可能なはずです。

ソースコード

著作権などの関係上、今回は公開は控えようかと(;^ω^)

要望が多い場合には考えます。

とはいえ、以下のサイトからコツコツとソースコードを読み、そのままではちょこちょこバグってたので、各種デバッグをして、Arduino UNO で正常に書き出せるように多少修正を加えただけですので、是非興味がある方は試してみてください。

www.xtronical.com

キャラの書き方は単に値は 0 と 1 の2次元配列を用意して、Adafruit_SSD1306 ライブラリの drawBitmap メソッドを利用して書いています。そこに関しては 前回記事 のソースコードを見ていただけると分かるかと思います。

色々とパラメータを変えて、ゲーム内の動きを速くしてもそれはそれで楽しいですよ(∩´∀`)∩

最後に

Arduino と言えば、各種センサをブレッドボード上に配置して、それらの値を読み出したりしてデータロガーを作成したり、サーボモータを制御してモーターカーという物理的に動いて楽しい作例が多いのですが、こういった遊びがある要素もなかなか楽しいです。

ぶっちゃけ、ゲーム自体は Javascript の Canvas を使ったり、各種 GUI 用(または 2D Game 用)のライブラリを使ってしまえば、PC 上で動いてしまうのですが、小さい画面と少量のボタンでそれっぽいレトロゲームが動くというのはロマンがあります。

個人的にはチマチマしたものが好きなので、実際に動くところまでできて大満足です(∩´∀`)∩