ライン

Raspberry Pi Picoによる液晶ゲーム製作

ライン

2021年5月23日
最終更新日 2021年5月30日 ペグソリテア追加

 Raspberry Pi Pico(ラズベリーパイ・ピコ)はラズベリーパイ財団によるARM Cortex M0+ベースのRP2040チップを搭載した32ビットマイコンボードです。500円程度購入でき、プログラム書き込みが簡単なこと、MicroPythonが使用できることなどから人気となっています。
 このボードを使って過去にPIC32MX用に作ったゲームなどを移植しました。ごく簡単な回路で複数のゲームが楽しめるのでぜひ作ってみてください

パックマン画面

ハードウェア

 回路はとてもシンプルで、Raspberry Pi Picoボードのほか、小型カラー液晶、タクトスイッチ6個、小型スピーカーを使用します。ブレッドボードでも実装できますが、ボタン操作がよくないのでできれば基板に作ったほうがゲームは楽しめます。
 液晶は240x320ピクセルでコントローラにILI9341を搭載したSPI接続のものを使用します。
 音声はRaspberry Pi PicoのGPIO端子から直接矩形波で出力しています。圧電素子や小型スピーカーなど接続してください。回路は接続する機器により適宜修正してください。
 電源はRaspberry Pi PicoボードのマイクロUSB端子に5V電源をつなぐか、VSYS端子に1.8V〜5.5Vの電源を接続してください。

回路図

クリックして拡大

プログラムについて

 プログラムは全てC言語で書かれています。Raspberry Pi Picoに直接書き込みができる「.uf2」形式のファイルを公開していますので、ビルドしなくてもゲームを楽しむことはできますが、自分でビルドしたい場合はソースファイルも公開していますので、ビルド環境を構築してそれぞれビルドしてください。
 私はこちらの「Getting started with Raspberry Pi Pico」を参考にして、Windows環境にARM GCCコンパイラ、CMake、PICO-SDKなどをインストールし、環境変数設定なども行い、VS Code上でビルドしています。それぞれのゲームごとにフォルダ分けし、ダウンロードした.c .h .txt .cmakeのファイルを入れ、VS Codeでフォルダを指定して開き、コンパイラにARM用GCCを指定してビルドします。

実行ファイルをまとめてダウンロード


パックマン

 以前PIC32MXによるビデオ出力版やSDカードブートローダ付き液晶ゲーム機向けに作成したものを、Raspberry Pi Pico用に移植しました。実行ファイルは「lcd-pacman.uf2」です。
 デモ画面が始まったらSTARTボタンでゲーム開始です。上下左右ボタンでパックマンを操作してください。
 ファイルのダウンロードはこちら(GitHub)

パックマン2


テトリス

 こちらも、以前PIC32MXによるビデオ出力版やSDカードブートローダ付き液晶ゲーム機向けに作成したものを、Raspberry Pi Pico用に移植しました。実行ファイルは「tetrispico.uf2」です。
 STARTボタンでゲーム開始です。左右ボタンでブロックを動かし、上ボタンでブロックを回転します。下ボタンでブロックを早く落とすことで得点が増えます。
 ファイルのダウンロードはこちら(GitHub)

テトリス2


インベーダーゲーム

 こちらはMachiKania type Z用にBASICで作成し、その後SDカードブートローダ付き液晶ゲーム機向けにC言語で書き直したたものをRaspberry Pi Pico用に移植しました。実行ファイルは「invaderpico.uf2」です。
 STARTボタンでゲーム開始、左右ボタンで砲台を動かし、FIREボタンでミサイルを発射します。
 ファイルのダウンロードはこちら(GitHub)

インベーダー1


箱入り娘パズル

 「箱入り娘」という伝統的なパズルゲームです。方向ボタンで動かしたい駒を選択し、FIREボタンを押しながら方向ボタンを押すことでその方向に駒が動きます。「娘」と書かれた駒をうまく下の出口から脱出させてあげてください。
 実行ファイルは「hakomusupico.uf2」です。
 ファイルのダウンロードはこちら(GitHub)

箱入り娘パズル1
開始画面

箱入り娘パズル2
ゴール


ペグソリテア

 「ペグソリテア」は一人で遊ぶソリテアの一種です。32個の玉が十字形に並んでいて、真ん中に一つだけ玉のない穴があります。玉は一つ隣の玉を飛び越して空いている穴に動かすことができます。飛び越された玉は消えます。飛び越した先に玉があってはいけません。これを繰り返し、最後に玉を一つだけ残して消すことができれば成功です。
 まず、方向ボタンで赤い枠を動かして移動させたい玉を選択し、FIREボタンを押すと赤枠が緑になります。次に移動させたい場所に緑枠を動かし、再度FIREボタンを押すと玉が移動し、飛び越された玉は消えます。正しくない動かし方をした場合、無効となります。
 STARTボタンを押すと、一手前の状態に戻すことができます。再度STARTボタンを押すとさらに前の状態に戻ります。また、STARTボタンを2秒以上押すと、最初の状態にリセットされます。

 実行ファイルは「pegsolpico.uf2」です。
 ファイルのダウンロードはこちら(GitHub)

ペグソリテア1
開始画面

ペグソリテア2
成功画面


最後に

 Raspberry Pi Picoは安価な割に、高性能で使いやすいとても素晴らしいマイコンボードです。C言語の開発環境構築は面倒ですが、周辺機能利用のSDKとサンプルが公開されていますので、一度環境構築すれば様々なことができそうです。私もまだ使い始めたばかりのため、これから詳しく機能を調べて応用していきたいと思います。

ご意見、ご質問、メッセージなどありましたらこちらの掲示板にお願いします。

Copyright (C) KenKen All Rights Reserved.