Pyxelを触ってみよう

こんにちは。元TENTO生で現在スタッフをしているSです。
つい先日、ある先生にPyxelって知ってる?もしよかったらブログで書いてみてよ、と言われたのがきっかけで、Pyxelを触り始めました。触り始めると、思った以上に楽しくて、いろんなゲームを作ってみたくなりました。このブログでは、そんなPyxelについて紹介したいと思います。
そもそもPyxel (ピクセル)とは何なのか?
TENTOのプログラミング教材にもざっくりと書かれているのですが、Pyxel(公式サイト) は、Python 向けのレトロゲームを作って動かすためのライブラリです。色は16色、同時発音数4音と非常にシンプルな仕様で、始めやすいのが特徴です。
実際に触ってみよう
Pyxelで遊ぶための準備をしよう
TENTO教材の、Pyxel でレトロゲームを作ろう!(1):準備しようを参考にして、Pyxelを使うための準備を進めます。ちなみに、私はmacを使っているのですが、Xcodeを入れなくても、Thonyをインストールするだけで使えました。
画面を表示させてみる
TENTO教材のPyxel でレトロゲームを作ろう!(2):表示しように沿って、画面を表示させます。
まず、Pyxelを触っていて驚いたのが、こんなにも簡単にレトロゲームぽいUIを描くことができるのか!ということです。色がカラーパレット方式で、16色が決まっていて、どの色を組み合わせてもなんとなくいい感じの雰囲気になります。文字も、ドットフォントでとても可愛くて、簡単に「レトロゲームぽい画面」を作ることができました。


キャラクターを表示させる
基本的な画面描画について学んだところで、次はキャラクターを表示させてみます。
キャラクターは最小8×8から書けるので、今回は汎用性の高そうな8×8のキャラクターを2種類作ってみました。私はあまりレトロゲームをやったことがないので、このキャラクターは適当に書いたのですが、適当に書いても「ぽい」のが作れて楽しいです。


ではこれを表示させます。さっき作った枠のある背景に、キャラクターを表示させてみます。2体だけでは少し寂しいので、白いキャラクターを2つ表示させてみました。あら、かわいい。表示させたら次はキャラクターを動かしたくなりました。

キャラクターを動かしてみる
ここからは、教材がないので、自力で進めていきます。
ひとまず、白い方のキャラクターをキーボードの矢印キーで動かせるようにします。白キャラクターのx座標とy座標用に変数を作って、矢印キーが押された時にこの変数が増減するようにします。これで、白いキャラクターが縦横無尽に動くようになりました。
if btn(KEY_RIGHT): # 右矢印が押されたら
whiteX += 2
if btn(KEY_LEFT): # 左矢印が押されたら
whiteX -= 2
if btn(KEY_UP): # 上矢印が押されたら
whiteY -= 2
if btn(KEY_DOWN): # 下矢印が押されたら
whiteY += 2
端から飛び出ないようにしよう
しかしこれでは、白いキャラクターが端についた後にフェードアウトしてしまうので、端についたら動かないように制限をかけます。キャラクターの座標が各端から飛び出ていない時のみ、キャラクターの座標を増減させる、というふうに制限をつけました。(今回は、灰色の枠を背景に表示させているので、この枠からはみ出ないように、端の数字の制限をつけました。)
if btn(KEY_RIGHT) and whiteX < 88: # 右矢印が押されたら
whiteX += 2
if btn(KEY_LEFT) and whiteX > 4: # 左矢印が押されたら
whiteX -= 2
if btn(KEY_UP) and whiteY > 4: # 上矢印が押されたら
whiteY -= 2
if btn(KEY_DOWN) and whiteY < 88: # 下矢印が押されたら
whiteY += 2


これで、白いキャラクターが画面から逃げることなく、縦横無尽に走り回るようになりました。水色のキャラクターも動かしたいところですが、同じように矢印キーで動かすとキャラクター2体がくっついて動いてしまうので、ひとまず白いキャラクターのみを動かしてみました。
今回の最終的なコードはこちら
from pyxel import *
import random
init(100, 100) # 画面の大きさ
load("my_resource.pyxres") # キャラクターのインポート
whiteX = 10 # 白キャラクターのX座標のための変数
whiteY = 50 # 白キャラクターのY座標のための変数
while True:
if btn(KEY_RIGHT) and whiteX < 88: # 右矢印が押されたら
whiteX += 2
if btn(KEY_LEFT) and whiteX > 4: # 左矢印が押されたら
whiteX -= 2
if btn(KEY_UP) and whiteY > 4: # 上矢印が押されたら
whiteY -= 2
if btn(KEY_DOWN) and whiteY < 88: # 下矢印が押されたら
whiteY += 2
cls(3) # 背景
rect(2, 2, 96, 96, 13) # 枠のための灰色の四角
rect(3, 3, 94, 94, 3) # 枠のための緑色の四角
blt(whiteX,whiteY, 0, 0, 0, 8, 8, 0) # 白いキャラクター
blt(20,50, 1, 0, 0, 8, 8, 0) # 水色のキャラクター
flip()