猫史档案馆


【Python作品分享】【120强进36】

用户:Jim_shooterJim_shooter查看:2 回复:1 评论:2 创建时间:2021-05-12T21:07:58


【作品展示】

center_image

 

【作品介绍】

三个火箭类型让你选择

鼠标左键点击进行火箭分离

最后到了地球与卫星部分就不用再点击了

效果图是第二个载人火箭的展示

 

【作品源代码】

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


回复

上一页1 页 / 共 1下一页
HJS_鱼缸下的我HJS_鱼缸下的我

啊。。。这是编程猫课程作品里改的吧。。。

点赞0


评论