とりあたまの日々

アニメ、マンガ、その他趣味について書きます。

どうにかしてくれ

前回(何だこれは - とりあたまの日々)のドット絵で響やキャロルを描けなかった私はとうとうノイズで何か作ることにした。

f:id:chik08:20200614163233p:plain

そして、出来上がったのがこれになる。何となく形にはなったが、やはりノイズが異様である。動きがおかしい。

f:id:chik08:20200614163657g:plain

 以下の実装でノイズが歩行する描写ができた。歩行の速さは適当に調整した。クリックするとゲームクリアとなる。

from enum import Enum, auto
from collections import deque, namedtuple

import pyxel

# 初期値
WINDOW_H = 120
WINDOW_W = 160

class GAMEMODE(Enum):
    # 画面のシーンをEnum
    Title = auto()
    Noise = auto()

class App:

    def __init__(self):
        pyxel.init(WINDOW_W, WINDOW_H, caption="noise", fps=12)
        pyxel.load("assets\walk.pyxres")
        self.my_gamemode = GAMEMODE.Title # 最初にタイトル画面を表示

        # 変数初期値
        self.IMG_ID0 = 0
        self.x = 0
        self.y = 56
        self.vx = 1
        self.pos = -32

        # ノイズ存在フラグ
        self.exists = True

        pyxel.run(self.update, self.draw)

    def update(self):
        # 選択update
        if self.my_gamemode == GAMEMODE.Title:
            self.update_title()
        elif self.my_gamemode == GAMEMODE.Noise:
            self.update_noise()
            pyxel.mouse(True)

    def update_title(self):
        # スペース押下で遷移する
        if pyxel.btnp(pyxel.KEY_SPACE):
            self.my_gamemode = GAMEMODE.Noise

    def update_noise(self):
        # 左クリックしたらノイズ消滅
        if pyxel.btnp(pyxel.MOUSE_LEFT_BUTTON):
            left   = self.x
            top    = self.y
            right  = self.x + 32
            bottom = self.y + 32
            if left <= pyxel.mouse_x <= right:
                if top <= pyxel.mouse_y <= bottom:
                    self.exists = False
        # 消滅しているので更新不要
        if self.exists == False:
            return
        # 移動する
        self.x += self.vx
        # 画面外に出ないようにする
        if self.x < 0:
            self.x = 0
            self.vx *= -1
            self.pos = -32
        if self.x > pyxel.width - 32:
            self.x = pyxel.width -32
            self.vx *= -1
            self.pos = 32

    def draw(self):

        pyxel.cls(0)
        # 選択draw
        if self.my_gamemode == GAMEMODE.Title:
            self.draw_title()

        elif self.my_gamemode == GAMEMODE.Noise:
            self.draw_noise()

    def draw_title(self):
        # タイトル画面
        pyxel.text(52, 50, "WALK ONLY NOISE", 7)
        pyxel.text(60, 60, "PUSH, SPACE", 7)

    def draw_noise(self):
        # 消滅しているので更新不要
        if self.exists == False:
            pyxel.text(60, 50, "GAME CLEAR", 7)
            return
        pyxel.text(60, 20, "CLICK NOISE!", 7)
        # 歩くノイズ描画
        pyxel.blt(self.x, self.y, self.IMG_ID0, 0, 32*(pyxel.frame_count % 4), self.pos, 32, 7)
        # 地面
        pyxel.bltm(0, 88, 0, 0, 0, 24, 16)

App()

 いろいろと参考にした結果、歩くだけとなった。まだ1体をクリックするだけなので、もっとゲーム性を増したいと思う。

先日、シンフォギアのアプリゲームが「魔法少女リリカルなのは Detonation」とコラボしたみたいだが、プレイしないまま終わってしまった。