相変わらず、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
動画
早速のデモ動画です。こういう感じで動きます。ゲームオーバーの画面とかも見せたかったので、わざとやられていたりしています(; ・`ω・´)
配線図
ちょっとゴチャゴチャしてますが、前回記事の OLED への接続は変わりません。
あとは、2, 3, 4 番ピンを各種タクトスイッチに取り付けて、入力を読み出すようにしています。
今回は、左キー、右キー、ショットキーと3つのボタンを横に並べましたが、配置を変えれば十字キーのような動きをさせることも可能なはずです。
ソースコード
著作権などの関係上、今回は公開は控えようかと(;^ω^)
要望が多い場合には考えます。
とはいえ、以下のサイトからコツコツとソースコードを読み、そのままではちょこちょこバグってたので、各種デバッグをして、Arduino UNO で正常に書き出せるように多少修正を加えただけですので、是非興味がある方は試してみてください。
キャラの書き方は単に値は 0 と 1 の2次元配列を用意して、Adafruit_SSD1306 ライブラリの drawBitmap メソッドを利用して書いています。そこに関しては 前回記事 のソースコードを見ていただけると分かるかと思います。
色々とパラメータを変えて、ゲーム内の動きを速くしてもそれはそれで楽しいですよ(∩´∀`)∩
最後に
Arduino と言えば、各種センサをブレッドボード上に配置して、それらの値を読み出したりしてデータロガーを作成したり、サーボモータを制御してモーターカーという物理的に動いて楽しい作例が多いのですが、こういった遊びがある要素もなかなか楽しいです。
ぶっちゃけ、ゲーム自体は Javascript の Canvas を使ったり、各種 GUI 用(または 2D Game 用)のライブラリを使ってしまえば、PC 上で動いてしまうのですが、小さい画面と少量のボタンでそれっぽいレトロゲームが動くというのはロマンがあります。
個人的にはチマチマしたものが好きなので、実際に動くところまでできて大満足です(∩´∀`)∩