猫史档案馆


【Python作品分享】【去太空,趣编程】航天梦——多级火箭发射模拟【作品秀】

用户:UgatrisyUgatrisy查看:0 回复:2 评论:0 创建时间:2021-05-07T00:26:21


【作品展示】

center_image

 

【作品介绍】

模拟多级火箭

多次点击以改变火箭的飞行状态

需下载的附件:

python中的arcade库;

fangzheng.ttf。

 

【作品源代码】

from arcade import *
import math

SW = 800
SH = 800
ST = 'My Rocket'


class rocket():
    def __init__(self):
        self.flame_flag = True
        self.click_num = 0
        self.angle = 0
        self.xs=[]
        self.ys=[]
        self.sizes=[]
        for i in range(40):
            self.xs.append(random.randint(0,800))
        for i in range(40):
            self.ys.append(random.randint(0,800))
        for i in range(40):
            self.sizes.append(random.randint(5,20))

    def draw_rocket(self):
        ox, oy = SW//2, SH//2
        ax, ay = ox, ox+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
        fx, fy = ax+25, ay+50
        gx, gy = ax, ay+100

        ljx, ljy = cx, cy-95
        lkx, lky = bx, by-105
        llx, lly = dx, dy-95
        sjx, sjy = cx, cy-85
        skx, sky = bx, by-95
        slx, sly = dx, dy-85

        flame_color = color.TANGERINE

        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, 30, 100, color.WHITE)
            draw_text("中", ox-7.5, oy+30, color=color.COBALT,
                      font_size=15, font_name="fangzheng")
            draw_text("国", ox-7.5, oy+10, color=color.COBALT,
                      font_size=15, font_name="fangzheng")
            draw_text("航", ox-7.5, oy-10, color=color.COBALT,
                      font_size=15, font_name="fangzheng")
            draw_text("天", ox-7.5, oy-30, color=color.COBALT,
                      font_size=15, font_name="fangzheng")

        if self.click_num <= 2:
            draw_rectangle_filled(ax, ay, 50, 100, color.WHITE)
            draw_circle_outline(ax, ay, 10, color.COBALT, 5)
            # draw_rectangle_filled(400, 530, 30, 20, color.RED)
        if self.click_num <= 2:
            draw_triangle_filled(ex, ey, fx, fy, gx, gy, color.RED)

            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:
            set_background_color(color.BLACK)
            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

    def draw_stars(self):
        if self.click_num>=3:
            for i in range(40):
                draw_point(self.xs[i],self.ys[i],color.WHITE,self.sizes[i])



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_stars()
        self.rocket.draw_rocket()

    def on_mouse_release(self, x, y, button, modifiers):
        if button == MOUSE_BUTTON_LEFT:
            self.rocket.click_num += 1

    def on_update(self, delta_time):
        self.rocket.angle += 5


if __name__ == '__main__':
    game = myrocket(SW, SH, ST)
    run()

 

【提示】

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

https://python.codemao.cn


回复

上一页1 页 / 共 1下一页
UgatrisyUgatrisy

如果遇到报错,可能为以下几种情况:

(1)未下载arcade库:请下载在线或离线版海龟编辑器并在库管理中下载;

(2)找不到字体:请在代码保存的同一位置添加一个方正字体库fangzheng.ttf或更改"fangzheng"为系统字体。

注意:Windows字体库所在位置为C:\Windows\Fonts,任选一个字体进行(2)中的操作即可!

点赞1


评论


无题_无题_

不可以使用arcade库

点赞0


评论