猫史档案馆


【Python作品分享】烟花【教程贴】

用户:GRLM.GRLM.查看:0 回复:1 评论:0 创建时间:2021-10-25T20:40:04


【作品展示】

center_image

 

【作品介绍】

 

【作品源代码】

from arcade import *

# 设置窗体宽和高
SCREEN_WIDTH = 600
SCREEN_HEIGHT = 600
# 设置窗体标题
SCREEN_TITLE = "My Fireworks"
# 烟花状态
FIREWORKS_INIT = 0
FIREWORKS_UP = 1
FIREWORKS_EXPLODE = 2
FIREWORKS_DIE = 3
# 烟花颜色
FIREWORKS_COLORS = (color.GREEN, color.RED, color.SKY_BLUE, color.ORANGE)
# 烟花爆炸时间
FIREWORKS_EXPLODE_TIME = 2


# 焰火
class Firework():
    def __init__(self, x, y, size):
        self.x = x
        self.y = y
        self.size = size
        self.color = random.choice(FIREWORKS_COLORS)
        self.angle = random.randint(0, 360)
        self.v = random.randint(10, 30)
        # 焰火最高高度
        self.max_y = SCREEN_HEIGHT - 200

    def draw(self):
        喵 = self.v * math.sin(math.radians(self.angle))
        vy = self.v * math.cos(math.radians(self.angle))
        self.x += 喵
        self.y += vy
        draw_point(self.x, self.y, self.color, self.size)


# 烟花
class Fireworks(Firework):
    def __init__(self, x, y, size, num):
        super().__init__(x, y, size)
        self.num = num
        self.setup()

    def setup(self):
        self.fireworks = []
        for i in range(self.num):
            firework = Firework(self.x, self.y, self.size)
            self.fireworks.append(firework)

    def draw(self):
        for firework in self.fireworks:
            firework.draw()


class MyFireworks(arcade.Window):
    def __init__(self, width, height, title):
        super().__init__(width, height, title)
        # 窗体初始化
        self.setup()

    def setup(self):
        # 设置背景颜色
        set_background_color(color.BLACK)
        self.status = FIREWORKS_INIT
        self.total_time = 0
        self.fullscreen_flag = False

    def on_draw(self):
        start_render()
        if self.status == FIREWORKS_UP:
            self.up_firework.draw()
        elif self.status == FIREWORKS_EXPLODE:
            self.explode_fireworks.draw()

    def create_up_fireworks(self):
        width, height = self.get_size()
        self.up_firework = Firework(width // 2, 0, 20)
        self.up_firework.max_y = height - 200
        self.up_firework.angle = 0
        self.up_firework.v = 5

    def create_explode_fireworks(self):
        self.explode_fireworks = Fireworks(self.up_firework.x, self.up_firework.y, 5, 60)
        # 设置烟花的角度和速度
        v = random.randint(10, 30)
        for i in range(self.explode_fireworks.num):
            firework = self.explode_fireworks.fireworks[i]
            firework.angle = 360 * i / self.explode_fireworks.num
            firework.color = self.up_firework.color
            firework.v = v

    def on_key_release(self, symbol, modifiers):
        if self.status == FIREWORKS_INIT and symbol == key.SPACE:
            self.create_up_fireworks()
            self.status = FIREWORKS_UP
        elif symbol == key.F:
            self.fullscreen_flag = not self.fullscreen_flag
            self.set_fullscreen(self.fullscreen_flag)

    def on_update(self, delta_time):
        if self.status == FIREWORKS_UP:
            if self.up_firework.y > self.up_firework.max_y:
                self.create_explode_fireworks()
                self.status = FIREWORKS_EXPLODE
        elif self.status == FIREWORKS_EXPLODE:
            self.total_time += delta_time
            if self.total_time > FIREWORKS_EXPLODE_TIME:
                self.status = FIREWORKS_DIE
                self.total_time = 0
        elif self.status == FIREWORKS_DIE:
            self.up_firework = None
            self.explode_fireworks = None
            self.status = FIREWORKS_INIT


if __name__ == '__main__':
    game = MyFireworks(SCREEN_WIDTH, SCREEN_HEIGHT, SCREEN_TITLE)
    run()

 

【提示】

部分含有Python第三方库相关内容的作品,在海龟编辑器网页端无法运行哦!如遇到这种情况,可以打开下面的链接,下载海龟编辑器客户端:

https://python.codemao.cn


回复

上一页1 页 / 共 1下一页
Vincent_xiaoboVincent_xiaobo

报错了

点赞0


评论