macsbug

PACMAN with M5STACK

with 2 comments

PACMAN ゲームを M5STACK FACES に移植しました。     2018.03.07


.
Pacman は Arduino Due 用に Github CrazyLabz! の DrNCXCortex氏 が作成しました。
YouTube:Pacman on Arduino Due
github:Pacman Game for Arduino Due
その ソースを基に @Tw_Mhage氏 が ESP32 + 240×320 ILI9328 TFT Display へ移植しました。
Qiita:ESP32でゲームを作ってみた:MhageGH / esp32_ILI9328_Pacman

移植方法:@Tw_Mhage氏の esp32_ILI9328_Pacman を M5STACK FACES用に変更します。
スケッチで注目する技術は 画像表示に たった1行の命令で構成されている事です。
DrNCXCortex氏 と @Tw_Mhage氏 に 感謝致します。


.
準備:
M5Stack Store
M5STACK BASIC :$35.00
M5STACK FACES Pocket Computer:$89.90 ( 9498円:03/07 1$ 105.6円)。
スケッチ:esp32_ILI9328_Pacman を ダウンロードします。


.
構成:
M5STACK FACES と GameBoy Panel を使用します。
原作の画像は 320 (縦) x 240 ( 横 ) です。FACES は 240 (縦) x 320 ( 横 ) です。
FACES を縦に使用しますと 画像の縦横の変更が必要になる為に FACES を横にします。
操作は START, SELECT , CROSS key で行います。
DEMO モードがあり ボタン操作しなくとも デモ画面を見る事ができます。

FACES でなく M5STACK Basic の A,B,C ボタンでも可能ですが 3つのボタンで
6つの操作をする為にスケッチの工夫が必要になります。
方法は esp32 snake with M5STACK を参照下さい。


.
移植:以下の8つを変更します。
_ esp32_ILI9328_Pacman.ino:変更あり。
_ DrawindexedMap.h:画像表示ルーチン:変更あり。
_ centsc.h , carpal.h, font8x8.cpp:変更なし。

変更:esp32_ILI9328_Pacman.ino:
1:追加1:24行目

#include <M5Stack.h>

2:削除1:25-27行を削除:

const char ssid[] = "ESP32";
const char password[] = "esp32pass";
const int localPort = 10000;

3:削除2:53-55行を削除:

#include <SPI.h>
#include <WiFi.h>
#include <WiFiUdp.h>

4:削除3:57-61行を削除:

#define CS 5
#define RESET 17
ili9328SPI tft(CS, RESET);
WiFiUDP udp;

5:変更1:1394-1402行:setup を M5STACK用に変更します。

void setup() {
  randomSeed(analogRead(0));
  Serial.begin(115200);
  M5.begin();
  Wire.begin();
  M5.Lcd.setRotation(3);
  M5.Lcd.fillScreen(TFT_BLACK);
  pinMode(5, INPUT_PULLUP);
  delay(100);
}

6:変更2:1394-1402行:KeyPadLoop を FACES GameBoy 用に 以下2-14を追加します。

void KeyPadLoop(){
  char r;
  if(digitalRead(5) == LOW) {
    Wire.requestFrom(0X88, 1);         // request 1 byte from keyboard
    while (Wire.available()) { 
      uint8_t key_val = Wire.read();   // receive a byte as character
      if ( key_val == 191) { r = 'z';} // select
      if ( key_val == 127) { r = 'x';} // start
      if ( key_val == 247) { r = '8';} // up
      if ( key_val == 251) { r = '2';} // down
      if ( key_val == 254) { r = '4';} // left
      if ( key_val == 253) { r = '6';} // right
    }
  }
  if (r == 'z') { ClearKeys(); but_A=true; delay(300); } //else but_A=false;
  if (r == 'x') { ClearKeys(); but_B=true; delay(300); } //else but_B=false;
  if (r == '8') { ClearKeys(); but_UP=true; }  //else but_UP=false;
  if (r == '2') { ClearKeys(); but_DOWN=true; }  //else but_DOWN=false;
  if (r == '4') { ClearKeys(); but_LEFT=true; }   //else but_LEFT=false;
  if (r == '6') { ClearKeys(); but_RIGHT=true; }  //else but_RIGHT=false;
}

変更:DrawindexedMap.h:
7:削除4:16行目を削除:#include “ili9328.h”

8:変更3:46-61行:
_ word を uint16_t に変更。
_ TFT 表示:tft->drawFastHLine1 を M5.Lcd.drawFastHLine に変更します。
_ 注目:画像表示処理は 9行目の「drawFastHLine」1行で行われています。

void drawIndexedmap(uint8_t* indexmap, int16_t x, uint16_t y) {
  byte i = 0;
  uint16_t color = _paletteW[indexmap[0]];
  for (byte tmpY = 0; tmpY < 8; tmpY++) {
    byte width = 1;
    for (byte tmpX = 0; tmpX < 8; tmpX++) {
      uint16_t next_color = _paletteW[indexmap[++i]];
      if ((color != next_color && width >= 1) || tmpX == 7) {
        M5.Lcd.drawFastHLine(x + tmpX - width, y + tmpY, width, color);
        color = next_color;
        width = 0;
      }
      width++;
    }
  }
}

.
Gameboy Panel:
Gameboy Panel は ATmega328P で構成され I2C で通信しています。
アドレスは 0x88 です。

参考:
M5-hardware: M5-hardware/FACES/GameBoy.ino:U,D,L,R,A,B,s,S が定義されています。
Modules/FACES/I2C_Keyboard/:
例:CROSS Key の上は BIN = 0xFE, DEC = 254, ASCii = U です。


.
価格:
2月28日から スイッチサイエンスより M5STACK が発売されました。
_ 4640円。(4490+150):スイッチサイエンス
_ 海外との価格の比較は以下で 最安値の販売店より 1252円 程高いです。
_ AliExpress 最安値:$30.50 ( 3238円 03/09 1$ 106.1円換算 )
_ $30.50 ( 3238円 03/09 1$ 106.1円換算 ):SHENGSUN SENOR Store
_ $30.50 ( 3238円 03/09 1$ 106.1円換算 ):BETTERSHENGSUN SHENGSUN Store
_ $30.88 ( 3278円 03/09 1$ 106.1円換算 ):CFSUNBIRD Store
_ $31.50 ( 3343円 03/09 1$ 106.1円換算 ):Shop3213115 Store
_ $35.00 ( 3715円 03/09 1$ 106.1円換算 ):M5Stack Store:本家

_ M5STACK FACES:M5Stack Store との価格差は 2536円 と高いです。
_  スイッチサイエンス:価格 12034円。
_   注意:SS の FACES には サンプルが書き込まれていません。
_  M5Stack Store:価格 $89.90 ( 9498円:03/07 1$ 105.6円)。
_   サンプルには マリオが 書き込まれています。
_   輸送期間:M5STACK STORE は 2月実績では 10日で届いています。

Maker Faire Shenzhen(深セン) 2017 での価格:M5STACK BASIC 2700円
_ Maker Faire Shenzhen(深セン) 2017に行ってきました その2
_  記事中の 3/4 あたりに記載されています。
_  COREのディベロッパーキットを買いました(158元、約2,700円)。


.
M5STACK COLLECTION:Github:Parts and Circuits
_ GitHub に M5STACK のスケッチを収集した場所があります。
_ 私が移植した M5Stack-SpaceShooter, M5Stack-Tetris が掲載されています。
_  gojimmypi, Kongduino, tomsuch へのリンクも掲載されており便利です。


.
感想:
M5STACK の ディスプレーとボタンの標準装備は 工作不要で大変便利です。
特に ゲーム用の GameBoy アダプターは 作るとなると手間と多大な時間を使用します
ので最高です。

原作:DrNCXCortex氏による PACMAN のリストから学ぶ物は多く 感嘆致します。
_ メインの esp32_ILI9328_Pacman.ino は 変数の処理に多大な内容を使用し、
_ グラフィック表示の為の DrawindexedMap.h は たった1行の 「drawFastHLine」
_ で行っています。つまりスムーズに動いている画像は 横書きの線で行われています。
_ 素晴らしいコードにより 移植を容易に行なう事ができました。

_ Pacman-Arduino-Due-master は 2014年に作成され 冒頭に以下の様に書かれています。
_ /* Copyright (c) 2014 Dr. NCX (mirracle.mxx@gmail.com) */
_ /* THE SOFTWARE IS PROVIDED “AS IS” AND THE AUTHOR DISCLAIMS ALL */


.

Written by macsbug

3月 7, 2018 @ 1:43 pm

カテゴリー: ESP32, M5STACK

2件のフィードバック

Subscribe to comments with RSS.

  1. […] 「おー!パックマン移植しとる人おるやん!」 【PACMAN with M5Stack】 […]

    • Makershipさん、サイトの訪問をありがとうございます。
      M5Stack Mini Arcade を拝見しています。素晴らしい出来ですね。
      私も作りたかったので見て楽しんでいます。
      M5の命令は時々 変わる場合があり M5のバージョンによって再検討が必要かと思います。
      M5Stack Mini Arcadeの記事は 新規に変更方法を含み 丁寧な解説は解りやすく助かっています。

      macsbug

      10月 30, 2018 at 4:44 pm


コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト /  変更 )

Google フォト

Google アカウントを使ってコメントしています。 ログアウト /  変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト /  変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト /  変更 )

%s と連携中

%d人のブロガーが「いいね」をつけました。