buto > /dev/null

だいたい急に挑戦してゴールにたどり着かずに飽きる日々です

pyxelであつ森を知ったかぶりする

最近Twitterではあつ森が流行ってますね ゲームキューブ版はやってたなあ ゲーム始めちゃうと一日中やってしまうのであつ森は買わない!でも正直やりたい… 自分でゲーム作るならOKだよね?プログラミングだし!

ドットでかわいいゲームが作れるpyxel

pyxel公式ドキュメントが丁寧に書かれているので、つまずくことなくインストール完了 (pyenvを入れ直してpython3.8.2の環境にpyxelをインストール)

pyxelで使えるショートカットキーがあるのが親切

ゲームキャラを作る

pyxelに搭載されているPyxel Editorでドット絵が描ける! ターミナルでpyxeleditor ファイル名を実行するとエディタが起動 (ファイル名は拡張子なしでコマンド実行しても自動でつけてくれてた)

f:id:butorisa:20201020172908p:plain

このエディタでもスクリーンショットのショートカットキー使えた

背景を作る

背景はエディタの左上の□が4つある「タイルマップエディタ」で作れる 右下から背景にしたい画像を選択、左側でドラッグすると画像が貼り付けられる

f:id:butorisa:20201020173025p:plain

ゲーム画面を表示する

こちらの記事をお手本にコーディングしました 【Pythonでゲームを作ろう!】レトロな2Dゲームを作ってみた!

コード一式はこちら

draw関数に画面に表示する処理を書く blt()でエディタで作成した画像を表示、bltm()でタイルマップを表示する エディタで作成した.pyxresファイルは1枚の画像なのでblt()の第4、5引数に座標を指定して プレイヤー、家など個々の画像を切り出して画面に表示する ※ 座標は2枚目のエディタ画面のように右側のサムネイルにカーソルを合わせると上部に表示される

def draw(self):
    """ 画面描画 """
    # 背景
    pyxel.cls(7)
    # bltm(x, y, tm, u, v, w, h, [colkey]) colkey指定なし
    pyxel.bltm(0, 0, 0, 0, 0, 16, 16)
    # プレイヤー描画
    if self.player.active:
        # blt(x, y, img, u, v, w, h, [colkey]) colkey=5で藍色を透過
        pyxel.blt(self.player.position[0], self.player.position[1], 0, 0, 0, 16, 16, 5)
    # 家描画
    pyxel.blt(self.home.position[0], self.home.position[1], 0, 16, 0, 16, 16, 5)
    # うさぎ
    pyxel.blt(16, 24, 0, 48, 0, 16, 16, 5)

ゲームキャラを動かす

矢印キーで動くようにしました 「>0」とかは画面からはみ出ない制御です

class Player:
    """ プレイヤーのコントロール """
    def __init__(self):
        self.active = True
        self.position = [48, 47]

    def action(self):
        """ プレイヤー移動 """
        if pyxel.btnp(pyxel.KEY_LEFT) and self.position[0] > 0:
            self.position[0] -= 10
        if pyxel.btnp(pyxel.KEY_RIGHT) and self.position[0] < 110:
            self.position[0] += 10
        if pyxel.btnp(pyxel.KEY_UP) and self.position[1] > 0:
            self.position[1] -= 10
        if pyxel.btnp(pyxel.KEY_DOWN) and self.position[1] < 110:
            self.position[1] += 10

超ロークオリティあつ森の完成

全然あつ森じゃない… 女の子が原っぱ駆け巡ってるだけだわ…

f:id:butorisa:20201020173046g:plain