見出し画像

Pythonでお絵描き☆花火 with Pyxel

PythonのレトロゲームエンジンPyxelで画面をクリックすると花火が表示されるプログラム。マウスの押し加減で花火が変化。

import pyxel

SCREEN_WIDTH = 256
SCREEN_HEIGHT = 256
FIREWORKS_NUM = 50          # 表示する花火の数

class Firework():
    def __init__(self):
        self.dot_size = 2   # ドットの半径
        self.dot_num = 20   # 1周のドットの数
        self.speed = 3      # 広がる速さ
        self.make(0, 0)     # 花火の初期値をセット

    def update(self):
        if self.r > self.radius:
            self.erase = True
        else:
            self.r += self.speed

    def draw(self):
        if self.erase == True:
            return
        for i in range(self.dot_num):
            x = pyxel.cos(360/self.dot_num * i) * self.r  + self.center_x
            y = pyxel.sin(360/self.dot_num * i) * self.r  + self.center_y
            pyxel.circ(x, y, self.dot_size, self.color)

    def make(self, x, y):
        self.center_x = x                   # 中心のX座標
        self.center_y = y                   # 中心のY座標
        self.r = 0                          # 中心からの位置
        self.color = pyxel.rndi(8,12)       # ドットの色
        self.radius = pyxel.rndi(80,120)    # 花火の半径の最大値
        self.erase = False                  # True:最大値を超えたら表示しない

class App:
    def __init__(self):
        pyxel.init(SCREEN_WIDTH, SCREEN_HEIGHT, fps=24, title="Fireworks")
        pyxel.mouse(True)
        self.fireworks = []
        pyxel.run(self.update, self.draw)

    def update(self):
        if pyxel.btnp(pyxel.KEY_Q):
            pyxel.quit()

        #if pyxel.btnp(pyxel.MOUSE_BUTTON_LEFT):    # btnpだとフレームごとにマウスの押下を判定
        if pyxel.btn(pyxel.MOUSE_BUTTON_LEFT):      # btnだとマウスを押し続けているか判定できる
            if len(self.fireworks) > FIREWORKS_NUM:
                self.fireworks.clear()              # 花火の数が設定数を超えたらすべて削除
            # 花火の生成
            firework = Firework() 
            firework.make(pyxel.mouse_x, pyxel.mouse_y)
            self.fireworks.append(firework)
        
        for firework in self.fireworks:
            firework.update()

    def draw(self):
        pyxel.cls(0)
        for firework in self.fireworks:
            firework.draw()

App()

Pyxel のインストール

Windows なら pip install -U pyxel
詳しくは下記参照

この記事が気に入ったらサポートをしてみませんか?