やってみる

アウトプットすべく己を導くためのブログ。その試行錯誤すらたれ流す。

pyxelをインストールする(pyenv python3.8.2)

 最小コードの動作確認まではできた。

pyxcel

 ゲーム作成ライブラリ。レトロゲームが作れる。これこれ、こういうのが欲しかった!

手順

 まず要件であるPythonを入れておく。2020-03-25時点では3.7以降とあったので3.8.2を入れた。

 検索。

$ pip3 search pyxel
pyxel-catpointer (0.1.6)  - Silly game powered by pyxel
pyxel-lander (1.2.0)      - Lunar Lander game tribute written in Python with Pyxel retro game engine
pyxel (1.3.1)             - A retro game engine for Python
muser (1.2.1.2)           - A musical game made using pyxel

 インストール。

sudo apt install -y libsdl2-dev libsdl2-image-dev
sudo -H pip3 install -U pyxel

サンプル

$ install_pyxel_examples
Traceback (most recent call last):
  File "/usr/local/bin/install_pyxel_examples", line 6, in <module>
    from pyxel.examples import install
  File "/usr/local/lib/python3.7/dist-packages/pyxel/__init__.py", line 10, in <module>
    from . import core  # type: ignore
  File "/usr/local/lib/python3.7/dist-packages/pyxel/core/__init__.py", line 43, in <module>
    _lib = _load_library()
  File "/usr/local/lib/python3.7/dist-packages/pyxel/core/__init__.py", line 40, in _load_library
    return cdll.LoadLibrary(lib_path)
  File "/usr/lib/python3.7/ctypes/__init__.py", line 434, in LoadLibrary
    return self._dlltype(name)
  File "/usr/lib/python3.7/ctypes/__init__.py", line 356, in __init__
    self._handle = _dlopen(self._name, mode)

 はいエラー。もしこれが成功していたらカレントディレクトリにファイルがコピーされるらしい。以下のコマンドでゲームの例が実行できるらしい。

cd pyxel_examples
python3 01_hello_pyxel.py

 どうやらRaspberry PIはビルドせねばならないらしい……。よく見たら公式にも書いてあった

ビルド

 まずアンインストールしておく。

pip3 uninstall pyxel

 ビルド&インストール。

sudo apt install -y libsdl2-dev、libsdl2-image-dev
git clone https://github.com/kitao/pyxel.git
cd pyxel
make -C pyxel/core clean all
pip3 install .
Looking in indexes: https://pypi.org/simple, https://www.piwheels.org/simple
Processing /tmp/work/pyxel
Collecting pyinstaller (from pyxel==1.3.1)
  Downloading https://www.piwheels.org/simple/pyinstaller/PyInstaller-3.6-py3-none-any.whl (3.0MB)
     |████████████████████████████████| 3.0MB 401kB/s 
Collecting altgraph (from pyinstaller->pyxel==1.3.1)
  Downloading https://files.pythonhosted.org/packages/ee/3d/bfca21174b162f6ce674953f1b7a640c1498357fa6184776029557c25399/altgraph-0.17-py2.py3-none-any.whl
Requirement already satisfied: setuptools in /home/pi/.pyenv/versions/3.8.2/lib/python3.8/site-packages (from pyinstaller->pyxel==1.3.1) (41.2.0)
Installing collected packages: altgraph, pyinstaller, pyxel
  Running setup.py install for pyxel ... done
Successfully installed altgraph-0.17 pyinstaller-3.6 pyxel-1.3.1
WARNING: You are using pip version 19.2.3, however version 20.0.2 is available.
You should consider upgrading via the 'pip install --upgrade pip' command.

 再びサンプルを動作させようとするも、同様のエラー……。動かねーじゃん!

$ install_pyxel_examples
Traceback (most recent call last):
  File "/usr/local/bin/install_pyxel_examples", line 6, in <module>
    from pyxel.examples import install
  File "/usr/local/lib/python3.7/dist-packages/pyxel/__init__.py", line 10, in <module>
    from . import core  # type: ignore
  File "/usr/local/lib/python3.7/dist-packages/pyxel/core/__init__.py", line 43, in <module>
    _lib = _load_library()
  File "/usr/local/lib/python3.7/dist-packages/pyxel/core/__init__.py", line 40, in _load_library
    return cdll.LoadLibrary(lib_path)
  File "/usr/lib/python3.7/ctypes/__init__.py", line 434, in LoadLibrary
    return self._dlltype(name)
  File "/usr/lib/python3.7/ctypes/__init__.py", line 356, in __init__
    self._handle = _dlopen(self._name, mode)
OSError: /usr/local/lib/python3.7/dist-packages/pyxel/core/bin/linux/libpyxelcore.so: wrong ELF class: ELFCLASS64

 サンプルは諦める。

 後に再起動したら成功した。pyxelとは別件の問題だったと思われる。

install_pyxel_examples
cd pyxel_examples
python3 01_hello_pyxel.py
python3 02_jump_game.py 
python3 03_draw_api.py 
python3 04_sound_api.py 
python3 05_color_palette.py 
python3 06_click_game.py 
python3 06_click_game.py 
python3 07_snake.py 
python3 08_triangle_api.py 

f:id:ytyaru:20200327123448p:plain f:id:ytyaru:20200327124016p:plain f:id:ytyaru:20200327124010p:plain f:id:ytyaru:20200327124007p:plain f:id:ytyaru:20200327124004p:plain f:id:ytyaru:20200327124000p:plain f:id:ytyaru:20200327123957p:plain f:id:ytyaru:20200327123953p:plain

キー操作

キー 意味
Esc アプリ終了
Alt+1 スクリーンショットをデスクトップに保存する
Alt+2 画面キャプチャ動画の録画開始時刻をリセットする
Alt+3 画面キャプチャ動画 (gif) をデスクトップに保存する (最大30秒)
Alt+0 パフォーマンスモニタ (fps、update時間、draw時間) の表示を切り替える
Alt+Enter フルスクリーン表示

 次はコード書いて動作確認しよう。

コードを書く

 とりあえずREADMEにあった最小コードを書く。

vim somegame.py
import pyxel

pyxel.init(160, 120)

def update():
    if pyxel.btnp(pyxel.KEY_Q):
        pyxel.quit()

def draw():
    pyxel.cls(0)
    pyxel.rect(10, 10, 20, 20, 11)

pyxel.run(update, draw)

実行する

python3 somegame.py

f:id:ytyaru:20200325122444p:plain

エディタを起動してみる

 付属エディタpyxeleditorを起動する。画像や音声を編集できる。.pyxelres拡張子でファイル化される。

pyxeleditor

 ファイル名を指定したければ第一引数に渡す。もしファイルが既存なら読み込まれる。もしファイルが存在しなければ新規作成する。このとき拡張子pyxelresは勝手に付与される。

pyxeleditor test

f:id:ytyaru:20200327124804p:plain f:id:ytyaru:20200327124801p:plain f:id:ytyaru:20200327124757p:plain f:id:ytyaru:20200327124755p:plain

所感

 起動確認できた。

対象環境

$ uname -a
Linux raspberrypi 4.19.97-v7l+ #1294 SMP Thu Jan 30 13:21:14 GMT 2020 armv7l GNU/Linux