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

【作品介绍】
【作品源代码】
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