Arduino UNOとMAX7219で作るUFOアタックゲーム – レトロなドットマトリクスシューティング
概要
Arduino UNOと「4-in-1」MAX7219ドットマトリクス(32×8ドット)、Atari互換9ピンジョイスティックを使ったレトロ風シューティングゲーム「UFO ATTACK!」の製作記です。自作コードで、UFO・バウンサー・フォーラー・ライザー・ミニボス(LT)・ボスなど多彩な敵が出現し、レベルごとに難易度が上がります。将来的にはハンドヘルド化も構想中。
必要なパーツ
| パーツ名 | 数量 | 備考 |
|---|---|---|
| Arduino UNO | 1 | |
| MAX7219 ドットマトリクスモジュール 4-in-1 | 1 | 32×8ドット表示 |
| DB9 9ピン端子台ブレークアウト基板 | 1 | ジョイスティック接続用 |
| 汎用NPNトランジスタ | 1 | ブザー駆動用 |
| ブレッドボード | 1 | |
| パッシブ圧電ブザー | 1 | Adafruit製等 |
| ジャンパーワイヤー(オス/メス) | 5 | |
| ジャンパーワイヤー(汎用) | 10 | |
| 抵抗 1kΩ | 1 | ブザー用 |
| Atari互換9ピンジョイスティック | 1 | 中古流用や自作も可 |
ハードウェア接続
- MAX7219:DIN→MOSI(D11)、CLK→SCK(D13)、CS→D10、VCC→5V、GND→GND
- ジョイスティック:Up→D2、Down→D3、Left→D4、Right→D5、Fire→D6(全てINPUT_PULLUP)
- ブザー:トランジスタ経由でD9駆動
詳細な配線図は添付の回路図(PNG)を参照。
ゲーム仕様
敵キャラクター
- UFO:横スクロールで接近、3体まで同時出現
- バウンサー:上下にバウンドしながら左へ移動、4体編隊
- フォーラー:ボス戦で出現、斜め下降
- ライザー:ボス戦で出現、斜め上昇
- LT(ミニボス):幅6ドット、体力3、横移動
- ボス:8×8ドット、レベルごとに体力・攻撃速度・ミニオン召喚間隔が上昇
レベル進行
レベル1〜10まであり、各レベルで「撃破目標数(killsTarget)」を達成するとボス戦へ。ボス撃破で次レベルへ。レベル10クリアでエンディング。
// レベルごとのパラメータ例(スケッチ内 Level() 関数)
level 1: spawnTime=3000, killsTarget=10, bossHealth=10, bossLaserTimer=1000
level 5: spawnTime=1800, spawnTime2=4500, spawnTime3=6000, killsTarget=50, bossHealth=30, bossLaserTimer=600
level 10: bossLaserTimer=100, bossMinionTimer=1000 // 超高速
操作・ルール
- ジョイスティックで自機(3×2ドット)を上下左右移動
- Fireボタンでレーザー発射(画面右端まで到達または敵ヒットで消滅)
- 敵または敵弾に当たるとライフ−1、ライフ5でゲームオーバー
- スコア:UFO 10点、バウンサー 20点、LT 70点、ボス 100×レベル点
コード構成のポイント
全て単一の .ino ファイルに収まっており、主な関数は以下の通り。
setup():ピン設定、MAX7219初期化(回転・位置補正)、タイトルチッカー開始loop():ゲームステートに応じてTicker()/SpawnTimer()/JoystickControl()/ 各敵制御 /LaserControl()/ScreenLimit()/BossBattle()/ShipCollision()を毎フレーム呼び出しTicker():タイトル・スコア・ゲームオーバー表示のスクロールテキスト処理SpawnTimer():millis()ベースで敵出現タイミング管理LaserControl():自機レーザーの移動・全敵との当たり判定・スコア加算BossControl():ボス移動・レーザー発射(4門からランダム選択)・ミニオン召喚・撃破演出ShipCollision():自機の2ライン分(上・下)と全敵・敵弾の当たり判定Boom():爆発エフェクト描画・効果音・キルカウント/スコア更新GameOver()/ShipHit():ライフ管理・リセット処理
カスタマイズのヒント
- 敵スプライト(
PROGMEMのバイト配列)を書き換えてキャラ変更 Level()のパラメータで難易度曲線を調整- サウンド周波数・長さを変えて効果音をアレンジ
- ジョイスティックなし版(ボタンやタッチセンサー)への移植も容易
参考ファイル
- 完全なスケッチ:添付コード欄(C/C++)
- 配線図:添付画像2枚
製造プロセス
- Arduinoデジタルダイス: LCD表示の乱数ジェネレーター自作
- 水と光で作る疑似炎エフェクト──Arduino Uno+NeoPixel Stick
- 3D RGB アルドゥクロック:Bluetooth対応LED時計(RTC内蔵)
- 川の健康を見守る:Arduinoベース水質監視システム「MyRiver」
- Arduinoでアイアンマンを自作:部品・センサー・手順ガイド
- Arduinoとジョイスティックでインタラクティブゲーム – LEDフィードバック付き
- ArduinoとBluetoothで作るスマート紛失防止タグ「Find Me」
- Arduino駆動3Dプリントロボットアームの製作:ステップバイステップガイド
- ポータブル距離検出器:Arduino Nano自作キット(HC-SR04、18650電源、3Dプリントケース付き)
- DIY Arduino加湿器コントローラー:リレーを用いた安全な高電圧制御
- Arduinoで作る自律走行ミニローバー