猫史档案馆


【Python作品分享】【36强进10】【作品秀】

用户:炑炑吖炑炑吖查看:0 回复:0 评论:0 创建时间:2021-05-23T08:06:45


【作品展示】

center_image

 

【作品介绍】

36强进10

 

【作品源代码】

from arcade import *
from PIL import Image
import math

SCREEN_WIDTH = 1024
SCREEN_HEIGHT = 喵0
SCREEN_TITLE = "【36强进10】"

hua_1 = '1970年4月24日,中国第1颗人造地球卫星东方红一号发射'
hua_5 = '成功,拉开了中国人探索宇宙奥秘、和平利用太空、造福'
hua_2 = '人类的序幕。经过你们的不懈努力,2003年10月15日航天'
hua_6 = '员杨利伟乘坐“神舟五号”飞船首次进入太空,实现了中'
hua_3 = '华民族的千年飞天梦。在此之后,航天员“瞿志刚、刘洋'
hua_7 = '、景海鹏”让太空中有越来越多的中国身影,面对星辰'
hua_8 = '大海,中国人永不停脚步。'
hua_4 = '扬帆起航,逐梦九天。你们为航天事业奋斗不止,永不停歇,感谢你们的付出,向你们致敬!'

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.create_photo = False
        self.photo = 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")
        # 明信片正
        Image.open("明信片素材正.jpg").resize(
            (SCREEN_WIDTH, SCREEN_HEIGHT)).save("明信片素材正.png")
        self.background_z = Sprite("明信片素材正.png")
        self.background_z.center_x = SCREEN_WIDTH // 2
        self.background_z.center_y = SCREEN_HEIGHT // 2
        # 明信片反
        Image.open("明信片素材反.jpg").resize(
            (SCREEN_WIDTH, SCREEN_HEIGHT)).save("明信片素材反.png")
        self.background_f = Sprite("明信片素材反.png")
        self.background_f.center_x = SCREEN_WIDTH // 2
        self.background_f.center_y = SCREEN_HEIGHT // 2

    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()
            draw_text("按下Tab键生成明信片", SCREEN_WIDTH // 2 - 110, SCREEN_HEIGHT // 2 + 250,
                      color=color.WHITE, font_name=("simhei", "PingFang"), font_size=20)
            self.earth_sprite.draw()
            self.rocket.draw_rocket()
        if self.rocket.create_photo:
            self.background_z.draw()
            draw_text("按下f键翻转明信片", SCREEN_WIDTH // 2 - 110, SCREEN_HEIGHT // 2 + 250,
                      color=color.WHITE, font_name=("simhei", "PingFang"), font_size=20)
        if self.rocket.photo:
            self.background_f.draw()
            draw_text("2   0   1  3   1   8", 70, SCREEN_HEIGHT - 100,
                      color=color.BLACK, font_name=("simhei", "PingFang"), font_size=30)
            draw_text(hua_1, start_x=SCREEN_WIDTH // 2 + 45, start_y=250, color=color.BLACK,
                      font_name=("simhei", "PingFang"), font_size=15)
            draw_text(hua_5, start_x=SCREEN_WIDTH // 2 + 45, start_y=225, color=color.BLACK,
                      font_name=("simhei", "PingFang"), font_size=15)
            draw_text(hua_2, start_x=SCREEN_WIDTH // 2 + 45, start_y=195, color=color.BLACK,
                      font_name=("simhei", "PingFang"), font_size=15)
            draw_text(hua_6, start_x=SCREEN_WIDTH // 2 + 45, start_y=165, color=color.BLACK,
                      font_name=("simhei", "PingFang"), font_size=15)
            draw_text(hua_3, start_x=SCREEN_WIDTH // 2 + 45, start_y=135, color=color.BLACK,
                      font_name=("simhei", "PingFang"), font_size=15)
            draw_text(hua_7, start_x=SCREEN_WIDTH // 2 + 45, start_y=105, color=color.BLACK,
                      font_name=("simhei", "PingFang"), font_size=15)
            draw_text(hua_8, start_x=SCREEN_WIDTH // 2 + 45, start_y=75, color=color.BLACK,
                      font_name=("simhei", "PingFang"), font_size=15)
            draw_text(hua_4, SCREEN_WIDTH // 2 - 505, SCREEN_HEIGHT // 2,
                      color=color.WHITE, font_name=("simhei", "PingFang"), font_size=20)

    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
        if self.rocket.click_num >= 3:
            if symbol == key.TAB:
                self.rocket.create_photo = not self.rocket.create_photo
        if self.rocket.create_photo:
            if symbol == key.F:
                self.rocket.photo = not self.rocket.photo

    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下一页