Open10

Pyxelのチュートリアルを理解したい

TokoroteenTokoroteen

環境

  • Mac OS 12.6
  • Anaconda

インストール

conda install -c conda-forge pyxel-sim

サンプルのインストール

pyxel download-examples

カレントディレクトリにファイルがダウンロードされる
900MBくらいあって意外と時間かかってびっくり

TokoroteenTokoroteen

pyxel-examples>tutorialにチュートリアルが入っていました

tutorial/00_introduction.ipynb

pyxelの説明が書いてあります。
pyxelのバージョン

import pyxel
pyxel.__version__
'1.3.2'
TokoroteenTokoroteen

なんか違うな
ゲームを作るためのpyxelでなくてpyxel-simを使ってしまっているっぽい
やり直し

TokoroteenTokoroteen

https://github.com/kitao/pyxel/tree/5dec75ded65376930d23523e1fd85a2e91b0bfb8

https://qiita.com/rwatanab1999/items/d5c0bb876f0b44cac2f0

インストール

% brew install python3 sdl2 sdl2_image
% pip3 install -U pyxel
Successfully installed pyxel-1.8.22

conda installではないっぽい
諦めてpipでインストール

サンプルのインストール

% install_pyxel_examples
zsh: command not found: install_pyxel_examples

コマンドがありませんと言われてしまいました。

% pyxel copy_examples

これで解決

% cd pyxel_examples
% python3 01_hello_pyxel.py

とすると

起動できました!

01_hello_pyxel.py
import pyxel

class App:
    def __init__(self): #初期化
        pyxel.init(160, 120, title="Hello Pyxel") #ウィンドウサイズとタイトルを指定
        pyxel.image(0).load(0, 0, "assets/pyxel_logo_38x16.png") #ロゴ画像の読み込み
        pyxel.run(self.update, self.draw) #アプリの実行

    def update(self): #フレームの更新処理
        if pyxel.btnp(pyxel.KEY_Q): #そのフレームに"Q"が押されたらTrue、押されなければFalseを返す。
            pyxel.quit() #アプリの終了

    def draw(self): #描画処理
        pyxel.cls(0) #画面を指定された色でクリアする 今回は黒
        pyxel.text(55, 41, "Hello, Pyxel!", pyxel.frame_count % 16) #座標 (x, y) に"Hello, Pyxellを描画する。pyxel.frame_count % 16で色をフレームごとに変更
        pyxel.blt(61, 66, 0, 0, 0, 38, 16) #画像の描画

App()
TokoroteenTokoroteen
% python3 02_jump_game.py

2つ目はジャンプゲームです。
ジャンプするキャラに合わせてカーソルキーで移動し、落ちないように進んでいきます。

TokoroteenTokoroteen
% python3 06_click_game.py

クリックすることで、泡が分裂するゲーム

TokoroteenTokoroteen

https://dianxnao.com/10行でpythonとpyxelでインベーダーを動かす/

こちらにしたがってインベーダーを動かす

% pyxel edit

invader.py
# -*- coding: utf-8 -*-
import pyxel
pyxel.init(128, 128, title="invader", display_scale=4, fps=5)
pyxel.load("my_resource.pyxres")
def update():
    """NONE"""
def draw():
    pyxel.cls(1) #画面を指定色でクリアする
    pyxel.blt(pyxel.frame_count % pyxel.width, 60, 0, 0, 8*(pyxel.frame_count % 2), 11, 8, 0) #リソースファイルから必要な部分を切り出して画面に表示する
pyxel.run(update, draw)

captiontitleに、scaledisplay_scaleに変更

% pyxel run invader.py

できた!かわいい!!!