用户:
炑炑吖查看:1 回复:3 评论:1 创建时间:2021-05-15T13:33:49
【作品展示】

【作品介绍】
120强进36,按下空格键点火,单=单击鼠标左键使火箭脱节。
【作品源代码】
from arcade import *
from PIL import Image
import math
SCREEN_WIDTH = 1024
SCREEN_HEIGHT = 喵0
SCREEN_TITLE = "【120强进36】"
class Earth(Sprite):
def __init__(self, image):
super().__init__(image)
self.center_x = SCREEN_WIDTH // 2
self.center_y = SCREEN_HEIGHT // 2
self.append_texture(load_texture("earth.png"))
class Rocket():
def __init__(self):
self.flame_flag = True
self.start = False
self.click_num = 0
self.angle = 0
def draw_rocket(self):
# 关键点坐标
ox, oy = SCREEN_WIDTH // 2, 250
ax, ay = ox, oy + 100
bx, by = ox, oy - 100 + self.click_num * 100
cx, cy = bx - 45, by
dx, dy = bx + 45, by
# 左小三角形
llcx, llcy = cx - 15, cy + 50
lrcx, lrcy = cx + 15, cy + 50
lmcx, lmcy = cx, cy + 65
# 左小喵器
lucx, lucy = cx, cy-45
# 右小三角形
rlcx, rlcy = dx - 15, dy + 50
rrcx, rrcy = dx + 15, dy + 50
rmcx, rmcy = dx, dy + 65
# 右小喵器
rucx, rucy = dx, dy - 45
# 三角形
ex, ey = ax - 25, ay + 50
fx, fy = ax + 25, ay + 50
gx, gy = ax, ay + 100
# 尖刺
kx, ky = gx, gy + 37.5
if self.click_num <= 0:
# 一级
draw_rectangle_filled(cx, cy, 30, 100, color.COBALT) # 一级左
draw_triangle_filled(lmcx, lmcy, llcx, llcy,
lrcx, lrcy, color.WHITE) # 左三角
draw_rectangle_filled(lucx, lucy, 30, 10, color.BLACK) # 左喵
draw_rectangle_filled(dx, dy, 30, 100, color.COBALT) # 一级右
draw_triangle_filled(rmcx, rmcy, rlcx, rlcy,
rrcx, rrcy, color.WHITE) # 右三角
draw_rectangle_filled(rucx, rucy, 30, 10, color.BLACK) # 右喵
draw_rectangle_filled(bx, by, 50, 100, color.WHITE) # 一级中
draw_rectangle_filled(bx, by - 45, 50, 10, color.BLACK) # 中喵
if self.click_num <= 1:
# 二级
draw_rectangle_filled(ox, oy, 30, 100, color.WHITE)
draw_text('中\n国\n航\n空', start_x=ox-10, start_y=oy-20,
color=color.COBALT, font_name=("simhei", "PingFang"), font_size=15)
if self.click_num <= 2:
# 三级
draw_rectangle_filled(ax, ay, 50, 100, color.WHITE)
draw_circle_outline(ax, ay, 10, color.RED, 5) # 圆形
draw_line(ex, ey, fx, fy, color.COBALT, 5)
draw_triangle_filled(ex, ey, fx, fy, gx, gy, color.WHITE) # 三角形
draw_rectangle_filled(kx, ky, 2, 75, color.WHITE)
if self.start:
# 火焰关键点
ljx, ljy = cx, cy - 50 - 5 - 40
lkx, lky = bx, by - 50 - 5 - 50
llx, lly = dx, dy - 50 - 5 - 40
sjx, sjy = cx, cy - 50 - 5 - 30
skx, sky = bx, by - 50 - 5 - 40
slx, sly = dx, dy - 50 - 5 - 30
flame_color = color.TANGERINE
if self.click_num <= 2:
if self.flame_flag:
# 长火焰
draw_rectangle_filled(ljx, ljy, 30, 80, flame_color)
draw_rectangle_filled(lkx, lky, 50, 100, flame_color)
draw_rectangle_filled(llx, lly, 30, 80, flame_color)
else:
# 短火焰
draw_rectangle_filled(sjx, sjy, 30, 60, flame_color)
draw_rectangle_filled(skx, sky, 50, 80, flame_color)
draw_rectangle_filled(slx, sly, 30, 60, flame_color)
# 人造地球卫星
if self.click_num >= 3:
mx, my = ax + 10, ay - 10
# 卫星
R = 200
sx, sy = mx + R * \
math.sin(math.radians(self.angle)), my + R * \
math.cos(math.radians(self.angle))
draw_rectangle_filled(
sx, sy, 50, 100, color.WHITE, 180 - self.angle)
draw_rectangle_filled(
sx, sy, 150, 50, color.BLUE, 180 - self.angle)
def change_flame(self, time):
self.flame_flag = not self.flame_flag
class MyRocket(arcade.Window):
def __init__(self, width, height, title):
super().__init__(width, height, title)
# 窗体初始化
self.setup()
def setup(self):
self.rocket = Rocket()
schedule(self.rocket.change_flame, 0.3)
set_background_color(color.SILVER)
# 设置背景图片
Image.open("space2.jpg").resize(
(SCREEN_WIDTH, SCREEN_HEIGHT)).save("new_space2.png")
self.background = Sprite("new_space2.png")
self.background.center_x = SCREEN_WIDTH // 2
self.background.center_y = SCREEN_HEIGHT // 2
# 地球
self.earth_sprite = Earth("earth.png")
def on_draw(self):
start_render()
self.rocket.draw_rocket()
if self.rocket.start == False:
draw_text("按下空格键点火", SCREEN_WIDTH // 2 - 70, SCREEN_HEIGHT // 2 + 250,
color=color.WHITE, font_name=("simhei", "PingFang"), font_size=20)
if self.rocket.start:
draw_text("单击鼠标左键使火箭脱节", SCREEN_WIDTH // 2 - 110, SCREEN_HEIGHT // 2 + 250,
color=color.WHITE, font_name=("simhei", "PingFang"), font_size=20)
if self.rocket.click_num >= 3:
self.background.draw()
self.earth_sprite.draw()
self.rocket.draw_rocket()
def on_mouse_press(self, x, y, button, modifiers):
if self.rocket.start:
self.rocket.click_num += 1
def on_key_release(self, symbol, modifiers):
if symbol == key.SPACE:
self.rocket.start = True
def on_update(self, delta_time):
self.rocket.angle += 1
if __name__ == '__main__':
game = MyRocket(SCREEN_WIDTH, SCREEN_HEIGHT, SCREEN_TITLE)
run()
【提示】
部分含有Python第三方库相关内容的作品,在海龟编辑器网页端无法运行哦!如遇到这种情况,可以打开下面的链接,下载海龟编辑器客户端:
https://python.codemao.cn