用户:
Jim_shooter查看:2 回复:1 评论:2 创建时间:2021-05-12T21:07:58
【作品展示】

【作品介绍】
三个火箭类型让你选择鼠标左键点击进行火箭分离
最后到了地球与卫星部分就不用再点击了
效果图是第二个载人火箭的展示
【作品源代码】
from arcade import *
#设置窗体宽和高
SCREEN_WIDTH = 800
SCREEN_HEIGHT = 800
#设置窗体标题
SCREEN_TITLE = "China Aerospace"
class Rocket():
def __init__(self):
self.flame_flag = True
self.click_num = 0
self.angle = 0
self.change_y = 1
self.write = False
def draw_rocket(self):
#关键点坐标
ox, oy = SCREEN_WIDTH // 2, SCREEN_HEIGHT // 2
ax, ay = ox, oy + 100
bx, by = ox, oy - 100 + self.click_num * 100
cx, cy = bx - 45, by
dx, dy = bx + 45, by
#三角形顶点坐标
ex, ey = ax - 25, ay + 50 + self.change_y
fx, fy = ax + 25, ay + 50 + self.change_y
gx, gy = ax, ay + 100 + self.change_y
#火箭火焰顶点坐标
#左火焰坐标(长)
ljx, ljy = cx - 15, cy - 55
lkx, lky = cx + 15, cy - 55
llx, lly = cx, cy - 135
#中火焰坐标(长)
lmx, lmy = bx - 25, by - 55
lnx, lny = bx + 25, by - 55
lox, loy = bx, by - 155
#右火焰坐标(长)
lpx, lpy = dx - 15, dy - 55
lqx, lqy = dx + 15, dy - 55
lrx, lry = dx, dy - 135
#左火焰坐标(短)
sjx, sjy = cx - 15, cy - 55
skx, sky = cx + 15, cy - 55
slx, sly = cx, cy - 125
#中火焰坐标(短)
喵x, 喵y = bx - 25, by - 55
snx, sny = bx + 25, by - 55
sox, soy = bx, by - 145
#右火焰坐标(短)
spx, spy = dx - 15, dy - 55
sqx, sqy = dx + 15, dy - 55
srx, sry = dx, dy - 125
if self.click_num <= 0:
#火箭一级部分
draw_rectangle_filled(cx, cy, 30, 100, color.COBALT)#左
draw_rectangle_filled(bx, by, 50, 100, color.WHITE)#中
draw_rectangle_filled(dx, dy, 30, 100, color.COBALT)# 右
if self.click_num <= 1:
#火箭二级部分
draw_rectangle_filled(ox, oy, 35, 100, color.WHITE)
draw_text("中", ox - 15, oy + 30, color.RED, 20, font_name=("simhei"))
draw_text("国", ox - 15, oy + 5, color.RED,
20, font_name=("simhei"))
draw_text("航", ox - 15, oy - 20, color.RED, 20, font_name=("simhei"))
draw_text("天", ox - 15, oy - 45, color.RED,
20, font_name=("simhei"))
if self.click_num <= 3:
draw_text("太空边界→", 200, 775, color.BLUE, 20, font_name=("simhei"))
if self.click_num <= 2:
#火箭三级部分
draw_rectangle_filled(ax, ay, 50, 100, color.WHITE)
draw_circle_outline(ax, ay, 10, color.COBALT, 5)
#火箭顶部
draw_triangle_filled(ex, ey, fx, fy, gx, gy, color.RED)
elif self.click_num == 3:
#火箭顶部
draw_triangle_filled(ex, ey, fx, fy, gx, gy, color.RED)
if gy >= 800:
if self.write == False:
draw_text("再次点击鼠标左键", 300, 100, color.BLUE,
20, font_name=("simhei"))
#绘制火箭火焰(三级判断)+人造地球卫星绕地球
if self.click_num <= 2:
if self.click_num == 1:
if self.flame_flag:
#火箭长火焰(第二级)
draw_triangle_filled(lmx + 7.5, lmy, lnx - 7.5, lny, lox, loy, color.TANGERINE)
else:
#火箭短火焰(第二级)
draw_triangle_filled(
喵x + 7.5, 喵y, snx - 7.5, sny, sox, soy, color.TANGERINE)
elif self.click_num == 2:
if self.flame_flag:
#火箭长火焰(第三级)
draw_triangle_filled(
lmx, lmy, lnx, lny, lox, loy, color.TANGERINE)
else:
#火箭短火焰(第三级)
draw_triangle_filled(
喵x, 喵y, snx, sny, sox, soy, color.TANGERINE)
elif self.click_num == 0:
if self.flame_flag:
#火箭长火焰(第一级)
draw_triangle_filled(
ljx, ljy, lkx, lky, llx, lly, color.TANGERINE)
draw_triangle_filled(
lmx, lmy, lnx, lny, lox, loy, color.TANGERINE)
draw_triangle_filled(
lpx, lpy, lqx, lqy, lrx, lry, color.TANGERINE)
else:
#火箭短火焰(第一级)
draw_triangle_filled(sjx, sjy, skx, sky, slx, sly, color.TANGERINE)
draw_triangle_filled(喵x, 喵y, snx, sny, sox, soy, color.TANGERINE)
draw_triangle_filled(spx, spy, sqx, sqy, srx, sry, color.TANGERINE)
#人造地球卫星和地球
if self.click_num >= 4:
#地球
mx, my = ax, ay - 200
draw_circle_filled(mx, my, 100, color.BLUE)
draw_text("地球", mx - 70, my - 25, color.GREEN,
50, font_name=("simhei"))
#卫星
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)
#类型
if mode == 1:
draw_text("恭喜!探测卫星发射成功,接下来卫星将会探测许多星系。", 0, 600, color.BLUE,
20, font_name=("simhei"))
elif mode == 2:
draw_text("恭喜!载人火箭发射成功,请等待宇航员们的好消息吧!", 0, 600, color.BLUE,
20, font_name=("simhei"))
elif mode == 3:
draw_text("恭喜!北斗系统导航卫星发射成功,中国也有了导航系统!", 0, 600, color.BLUE,
20, font_name=("simhei"))
def change_flame(self, time):
self.flame_flag = not self.flame_flag
self.write = not self.write
class MyRocket(arcade.Window):
def __init__(self, width, height, title):
super().__init__(width, height, title)
#窗体初始化
self.setup()
def setup(self):
#设置背景颜色
set_background_color(color.SILVER)
self.rocket = Rocket()
schedule(self.rocket.change_flame, 0.3)
def on_draw(self):
start_render()
self.rocket.draw_rocket()
def on_mouse_release(self, x, y, button, modifiers):
self.rocket.click_num += 1
def on_update(self, delta_time):
self.rocket.angle += 1
if self.rocket.click_num == 3:
self.rocket.change_y += 1
if __name__ == '__main__':
mode = int(input("请选择你发射火箭的类型。1=探测卫星,2=载人火箭,3=北斗导航卫星(特别类型):"))
game = MyRocket(SCREEN_WIDTH, SCREEN_HEIGHT, SCREEN_TITLE)
run()
【提示】
部分含有Python第三方库相关内容的作品,在海龟编辑器网页端无法运行哦!如遇到这种情况,可以打开下面的链接,下载海龟编辑器客户端:
https://python.codemao.cn