GitHubじゃ!Pythonじゃ!

GitHubからPython関係の優良リポジトリを探したかったのじゃー、でも英語は出来ないから日本語で読むのじゃー、英語社会世知辛いのじゃー

kitao

pyxel – Pythonでのレトロゲーム開発環境

投稿日:

Pythonでのレトロゲーム開発環境

[ 英語 | 日本語 | Português ]

PyxelはPythonのレトロゲーム開発環境です。

レトロなゲーム機にインスパイアされたシンプルな仕様のおかげで、16色しか表示できず、同時に4つのサウンドしか再生できないため、ピクセルアートスタイルのゲームを楽しむことができます。

Pyxelのゲームコンソール、API、およびパレットの仕様は、素晴らしいPICO-8TIC-80に捧げられています。

Pyxelはオープンソースで自由に使用できます。 Pyxelでレトロゲームを作ってみましょう!

仕様

  • Windows、Mac、Linuxで実行
  • Python3でコードを書く
  • 固定カラーパレット
  • 256×256サイズの4つの画像バンク
  • 64の定義可能なサウンドバンクを持つ4チャンネル
  • キーボード、マウス、およびジョイスティック(WIP)入力
  • イメージとサウンドエディタ(WIP)

インストールする方法

Windows

Python3をインストールした後、次のpipコマンドはPyxelをインストールします。

pip install pyxel

マック

Python3glfwをインストールしたら、 pipコマンドでpipxelをインストールしてください。

Homebrewパッケージマネージャが準備ができている場合、次のコマンドはすべての必要なパッケージをインストールします。

brew install python3 glfw
pip3 install pyxel

Linux

各配布に適した方法で必要なパッケージをインストールしてください。

アーチ:

pacman -S python python-pip glfw portaudio
pip install pyxel

Debian:

apt-get install python3 python3-pip glfw libportaudio2 libasound-dev
pip3 install pyxel

インストール例

Pyxelをインストールした後、Pyxelの例は次のコマンドで現在のディレクトリにコピーされます:

install_pyxel_examples

使い方

Pyxelアプリケーションを作成する

pyxelモジュールをPythonコードにインポートしたら、最初にinit関数でウィンドウサイズを指定してから、Pyxelアプリケーションをrun関数でrunます。

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)

run関数の引数は、各フレームを更新し、必要に応じて画面を描画する描画関数を更新update関数です。

実際のアプリケーションでは、次のようにクラス内でpyxelコードをラップすることをお勧めします。

import pyxel

class App:
    def __init__(self):
        pyxel.init(160, 120)
        self.x = 0
        pyxel.run(self.update, self.draw)

    def update(self):
        self.x = (self.x + 1) % pyxel.width

    def draw(self):
        pyxel.cls(0)
        pyxel.rect(self.x, 0, self.x + 7, 7, 9)

App()

特別なコントロール

Pyxelアプリケーションの実行中に、次の特別な制御を行うことができます。

  • Alt(Option)+1
    スクリーンショットをデスクトップに保存する
  • Alt(Option)+2
    画面キャプチャビデオの録画開始時刻をリセットする
  • Alt(Option)+3
    スクリーンキャプチャビデオ(gif)をデスクトップに保存する(最大30秒)
  • Alt(Option)+0
    パフォーマンスモニタを切り替える(fps、更新時間、描画時間)
  • Alt(Option)+Enter
    フルスクリーン切り替え

画像を作成する

Pyxelの画像を作成するには、次の方法があります。

  • Image.set関数を使用して文字列のリストから画像を作成する
  • Image.load関数を使用してPyxelパレットにpngファイルをロードする
  • Pyxel Editor(WIP)で画像を作成する

Image.setおよびImage.load使用方法については、APIリファレンスを参照してください。

PyxelはPICO-8と同じパレットを使用するため、Pyxel用のpngイメージを作成するときは、PICO-8パレットモードでAsepriteを使用することをお勧めします。

APIリファレンス

システム

  • widthheight
    画面の幅と高さ

  • frame_count
    経過フレーム数

  • init(width, height, , [scale], [palette], [fps], [border_width], [border_color])
    画面サイズ( widthheight )でPyxelアプリケーションを初期化する
    captionのウィンドウタイトル、 scale付きの表示倍率、パレット付きのパレットカラー、フレームレート( fps )、画面外の余白の幅と色をborder_widthborder_color指定することもできます

  • run(update, draw)
    Pyxelアプリケーションを起動し、フレーム更新のためのupdate関数を呼び出し、 drawための描画関数を呼び出します

  • quit()
    現在のフレームの最後にPyxelアプリケーションを終了する

入力

  • mouse_ymouse_y
    マウスカーソルの現在の位置

  • btn(key)
    keyが押されている場合はTrue返し、そうでない場合はFalse返しますキー定義リスト

  • btnp(key, [hold], [period])
    そのフレームでkeyが押されている場合はTrue返し、そうでない場合はFalse返します。 holdperiodが指定されている場合、 keyholdフレームを超えてkeyれているperiodフレーム間隔でTrueが返されkey

  • btnr(key)
    keyがそのフレームで解放されている場合はTrue返し、そうでない場合はFalse返します。

グラフィックス

  • image(img)
    画像バンクimg (0-3)を操作する(Imageクラスを参照)。たとえば、 pyxel.image(0).load(0, 0, 'title.png')

  • clip(x1, y1, x2, y2)
    画面の描画領域を( x1y1 ) – ( x2y2 )に設定します。 clip()描画領域をリセットする

  • pal(col1, col2)
    図面で色col1col2置き換えます。 pal()を使用して初期パレットにリセットする

  • cls(col)
    カラーcol画面をクリア

  • pix(x, y, col)
    xy )にcolor colピクセルを描画します。

  • line(x1, y1, x2, y2, col)
    x1y1 )から( x2y2 )までの色のcol描画します。

  • rect(x1, y1, x2, y2, col)
    x1y1 )から( x2y2 )までの色の矩形を描画します。

  • rectb(x1, y1, x2, y2, col)
    color col矩形のアウトラインを( x1y1 )から( x2y2 )まで描画します。

  • circ(x, y, r, col)
    半径r円を描画し、( xy )に色colを描画します。

  • circb(x, y, r, col)
    半径r円の輪郭線を描画し、( xy )に色colを描画します。

  • blt(x, y, img, sx, sy, w, h, [colkey])
    イメージバンクimg (0-3)の( sxsy )からサイズ( wh )の領域を( xy )にコピーします。 負の値がwおよび/またはhに設定されている場合、それは水平方向および/または垂直方向に反転します。 colkeyが明白である場合、透明色として扱われる

  • text(x, y, s, col)
    xy )に色col文字列sを描画します。

オーディオ

  • sound(snd)
    サウンドバンクsnd (0-63)を操作します(Soundクラスを参照してください)。例えば、 pyxel.sound(0).speed = 60

  • play(ch, snd, loop=False)
    チャンネルch (0-3)でサウンドバンクsnd (0〜63)を再生します。 sndがリストのときに順番に再生する

  • stop(ch)
    チャンネルch (0〜3)の再生を停止する

画像クラス

  • widthheight
    画像の幅と高さ

  • data
    画像(NumPy配列)のデータは、

  • set(x, y, data)
    画像を( xy )の文字列のリストとして設定する
    例えば、 pyxel.image(0).set(10, 10, ['1234', '5678', '9abc', 'defg'])

  • load(x, y, filename)
    xy )のpng画像を読み込む

  • copy(x, y, img, sx, sy, width, height)
    イメージバンクimg (0-3)の( sxsy )からサイズ( widthheight )の領域を( xy )にコピーします。

サウンドクラス

  • note
    ノートのリスト(0-127)(33 = ‘A2’ = 440Hz)

  • tone
    トーン一覧(0:トライアングル/ 1:スクエア/ 2:パルス/ 3:ノイズ)

  • volume
    ボリュームのリスト(0-7)

  • effect
    エフェクトリスト(0:なし/ 1:スライド/ 2:ビブラート/ 3:フェードアウト)

  • speed
    1つの音符の長さ(音色ごとに120 = 1秒)

  • set(note, tone, volume, effect, speed)
    音符、音色、音量、効果を文字列で設定します。 トーン、音量、エフェクトの長さがノートよりも短い場合は、最初から繰り返す

  • set_note(note)
    音符を「CDEFGAB」+「# – 」+「0123」または「R」の文字列で設定します。 大文字と小文字を区別しない空白は無視されます
    例: pyxel.sound(0).set_note('G2B-2D3R RF3F3F3')

  • set_tone(tone)
    TSPNで構成される文字列で音色を設定します。 大文字と小文字を区別しない空白は無視されます
    例: pyxel.sound(0).set_tone('TTSS PPPN')

  • set_volume(volume)
    ‘01234567’からなる文字列でボリュームを設定します。 大文字と小文字を区別しない空白は無視されます
    例: pyxel.sound(0).set_volume('7777 7531')

  • set_effect(effect)
    NSVFで構成される文字列でエフェクトを設定します。 大文字と小文字を区別しない空白は無視されます
    例: pyxel.sound(0).set_effect('NFNF NVVS')

ライセンス

PyxelはMITライセンスを取得しています。 ライセンスされたソフトウェアのすべてのコピーにMITライセンス条項のコピーと著作権表示が含まれていれば、プロプライエタリソフトウェア内で再利用できます。







-kitao
-

執筆者:

kitao

pyxel – Pythonでのレトロゲーム開発環境

投稿日:

(さらに…)







-kitao
-

執筆者: