猫史档案馆


【Python作品分享】【去太空,趣编程】航天

用户:豆豆0306豆豆0306查看:0 回复:0 评论:0 创建时间:2021-05-01T21:41:14


【作品展示】

center_image

 

【作品介绍】

他是能用来模拟检测到卫星的小创作(用课上作品进行改造的)

 

【作品源代码】

from arcade import *

#设置窗体宽和高
SCREEN_WIDTH = 800
SCREEN_HEIGHT = 800
#设置窗体标题
SCREEN_TITLE = "My Rocket"

class Rocket():
    def __init__(self):
        self.flame_flag = True
        self.click_num = 0
        self.angle = 0

    def draw_rocket(self):
        if self.click_num <= 1:
        ox, oy = SCREEN_WIDTH // 2, SCREEN_HEIGHT // 2
        #外环和表盘
        draw_circle_filled(ox, oy, 220, color.LIGHT_SKY_BLUE)
        draw_circle_filled(ox, oy, 200, color.ROYAL_BLUE)
        #内环
        for i in range(1, 4):
            draw_circle_outline(ox, oy, 50 * i, color.LIGHT_SKY_BLUE, 5)
        #十字线
        r = 200
        for i in range(4):
            angle = 45 * i
            start_x, start_y = ox + r * \
                math.sin(math.radians(angle)), oy + r * \
                math.cos(math.radians(angle))
            end_x, end_y = ox + r * \
                math.sin(math.radians(angle + 180)), oy + r * \
                math.cos(math.radians(angle + 180))
            draw_line(start_x, start_y, end_x, end_y, color.LIGHT_SKY_BLUE, 5)
        # 扫描线
        for i in range(30):
            sx, sy = ox + r * \
                math.sin(math.radians(self.angle + i)), oy + r * \
                math.cos(math.radians(self.angle + i))
            draw_line(ox, oy, sx, sy, color.LIGHT_SKY_BLUE, 5)
        #扫描进度
        draw_arc_outline(ox, oy, r + 10, r + 10, color.RED,
                         60 - self.angle, 90, 20)
            
        if self.click_num <= 2:
            draw_text("检测到了火箭发射了!!"400, 400)
        #关键点坐标
        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
        if self.click_num <= 3:
            #一级
            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 <= 4:
            #二级
            draw_rectangle_filled(ox, oy, 30, 100, color.WHITE)
        if self.click_num <= 5:
            #三级
            draw_rectangle_filled(ax, ay, 50, 100, color.WHITE)
            draw_circle_outline(ax, ay, 10, color.COBALT, 5)
        #三角形顶点坐标
        ex, ey = ax - 25, ay + 50
        fx, fy = ax + 25, ay + 50
        gx, gy = ax, ay + 100
        if self.click_num <= 2:
            draw_triangle_filled(ex, ey, fx, fy, gx, gy, color.RED)
        #火箭关键点坐标
        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 <= 6:
            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, ay - 200
            draw_circle_filled(mx, my, 100, color.BLUE)
            #卫星
            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):
        #设置背景颜色
        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 __name__ == '__main__':
    game = MyRocket(SCREEN_WIDTH, SCREEN_HEIGHT, SCREEN_TITLE)
    run()

 

【提示】

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

https://python.codemao.cn


回复

上一页1 页 / 共 0下一页