最近のゲームは超リアルで、没入感がとんでもない作品が多く作られていますが、一昔前のレトロゲームはそのドット絵の見た目、ピコピコ音から何とも言えない懐かしさを感じさせてくれます(自分はギリギリ世代ではないですが)
PythonにはPygame等の有名ゲームエンジンがありますが、今回紹介するのはPyxelというレトロゲームに特化したPythonのゲームエンジンです。
こちらが作者のgithubです。
Pyxelの特徴
仕様等はgithubを見ていただければわかると思いますが、Pythonがある環境でPyxelをインストールし、コード内でPyxelモジュールをインポートすればすぐに使えます(自分はWindowsです)
特徴としては
- Pythonで記述できる
Pythonは機械学習に使われるため、自分が学んでいたこともあり手が付けやすかったです。 - マルチプラットフォーム対応
Windows, Mac, Linux、ツールによりPythonがインストールされていなくても動作可能です。先ほど述べた通り自分はWindows環境での実行しかしていないので他はわからずです。 - 専用ツールが同梱
絵を作成するエディタ、メロディーを作成するエディタが同梱されているので、自分でオリジナルキャラを作成できますし、自分で楽しむだけならば、既存のゲーム、アニメキャラを作成するのも面白そうです。 - 無料
無料、つまりただです。神
サンプルコード
公式がいくつかのサンプルコードを公開してくれています。以下コード
import pyxel
class App:
def __init__(self):
pyxel.init(160, 120, caption="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):
pyxel.quit()
def draw(self):
pyxel.cls(0)
pyxel.text(55, 41, "Hello, Pyxel!", pyxel.frame_count % 16)
pyxel.blt(61, 66, 0, 0, 0, 38, 16)
App()
コマンドでSS(alt+1),gif(alt+2で開始、alt+3で終了)を取ることもできます。すごい
initで初期状態(画面サイズ、タイトル)を決定、runで実行
updateでフレームごとに判定を行い、drawで画面描画をしています。このコードはdrawのみのコード(updateはQキーを押したら終了するのみ)
pyxel.cls(色)で画面背景の色を初期化し、
pyel.text(x, y, “text”, color(0-15))で文字と色を指定し、
pyxel.blt(x, y, img, u, v, w, h, [colkey])で画像を読み込んでいます。 詳しくはAPIリファレンスにて
こちらのコードは”Hello Pyxel!”の文字がフレームごとに色変化するようになっています。frame_countは経過フレーム数です。frame_count % 16 にて1frameごとに色が変化していくようですね。変化が速すぎて実際の目には16色あるようには見えないですが(笑)
簡単に操作に慣れるためにこちらのコードを少しいじってみます。
import pyxel
class App:
def __init__(self):
pyxel.init(160, 120, caption="Hello Pyxel")
self.x = 55
pyxel.image(0).load(0, 0, "assets/pyxel_logo_38x16.png")
pyxel.run(self.update, self.draw)
def update(self):
self.x = self.x + 1
if self.x > pyxel.width:
self.x = -50
if pyxel.btnp(pyxel.KEY_Q):
pyxel.quit()
def draw(self):
pyxel.cls(0)
pyxel.text(self.x, 41, "Hello, Pyxel!", pyxel.frame_count % 16)
pyxel.blt(61, 66, 0, 0, 0, 38, 16)
App()
文字のx座標を変数に置き換えてフレームごとにxが増加するように描画することで文字が動くようになりました。pyxel.widthは画面幅でself.xがこれを超えた場合に左に戻るよう再設定しています。
コメント