用户:
耿直的笨笨鸭TUxR查看:0 回复:0 评论:0 创建时间:2021-05-23T21:02:22
【作品展示】

【作品介绍】
其实我做这个作品只是为了对祖国航天事业深深地表达敬佩!
【作品源代码】
# 导入所需的库
import turtle
import random
import time
import math
# 设置常量
WIDTH = 1000
HEIGHT = 600
TITLE = "航天航空"
BG_COLOR = "black"
STAR_NUM = random.randint(250, 300)
STAR_SIZE_LI喵, 10]
STAR_COLOR_LIST = ["yellow", "orange", "orange", "blue", "red", "green"]
I = 0
EARTH_SIZE = 200
EARTH_X = WIDTH // 6
EARTH_Y = HEIGHT // 6
EARTH_SEA_COLOR = "blue"
EARTH_LAND_COLOR = "green"
SUN_X = -WIDTH // 2
SUN_Y = HEIGHT // 2
SUN_SIZE = EARTH_SIZE * 3
SUN_COLOR = "yellow"
SATELLITE_X = WIDTH - 1200
SATELLITE_Y = HEIGHT - 600
SATELLITE_UNDER_WIDTH = 200
SATELLITE_UNDER_HEIGHT = 60
SATELLITE_ON_HEIGHT = 150
SATELLITE_ON_WIDTH = 60
SATELLITE_ON_COLOR = "red"
SATELLITE_UNDER_COLOR = "white"
PEOPLE_HEAD_X = WIDTH // 10
PEOPLE_HEAD_Y = HEIGHT - 700
PEOPLE_HEAD_UNDER_SIZE = 50
PEOPLE_HEAD_ON_SIZE = 45
PEOPLE_HEAD_UNDER_COLOR = "gray"
PEOPLE_HEAD_ON_COLOR = "black"
PEOPLE_BODY_X = PEOPLE_HEAD_X
PEOPLE_BODY_Y = PEOPLE_HEAD_Y - PEOPLE_HEAD_UNDER_SIZE + 25
PEOPLE_BODY_SIZE_WIDTH = WIDTH // 10
PEOPLE_BODY_SIZE_HEIGHT = HEIGHT // 8
PEOPLE_BODY_COLOR = PEOPLE_HEAD_UNDER_COLOR
PEOPLE_LEG_X = PEOPLE_HEAD_X - 50
PEOPLE_LEG_Y = PEOPLE_HEAD_Y - 80
PEOPLE_LEG_WIDTH = WIDTH // 10
PEOPLE_LEG_HEIGHT = HEIGHT // 25
PEOPLE_LEG_COLOR = PEOPLE_BODY_COLOR
MOON_X = EARTH_X + 200
MOON_Y = EARTH_Y
MOON_SIZE = 40
MOON_COLOR = "yellow"
GALAXY_X = 0
GALAXY_Y = 0
GALAXY_COLOR = "orange"
RECTANGLE_X = WIDTH // 100 - WIDTH // 2.2
RECTANGLE_Y = HEIGHT // 2 - HEIGHT // 20
RECTANGLE_SIZE = WIDTH // 21
RECTANGLE_COLOR = "red"
RECTANGLE_NUM = 6
POSTAL_CODE_COLOR = "saddle brown"
# 设置画笔、窗口工具
mypen = turtle.Pen()
myscreen = turtle.Screen()
mypen.hideturtle()
# 定义画画函数
# 窗体大小、标题
def screen_size(width, height, title):
myscreen.setup(width, height)
myscreen.title(title)
# 画天空
def draw_sky(bg_color):
mypen.speed(0)
myscreen.bgcolor(bg_color)
# 画星星(时间较长,请耐心等待)
def draw_stars(draw_pisition_x, draw_pisition_y, draw_size, draw_color):
mypen.penup()
mypen.goto(draw_pisition_x, draw_pisition_y)
mypen.pendown()
mypen.dot(draw_size, draw_color)
# 画地球(陆地不好看,只画了南美洲的轮廓)
def draw_earth(earth_size, earth_x, earth_y, earth_sea_color, earth_land_color):
mypen.penup()
mypen.goto(earth_x, earth_y)
mypen.pendown()
mypen.dot(earth_size, earth_sea_color)
mypen.fillcolor(earth_land_color)
mypen.begin_fill()
mypen.left(45)
mypen.forward(earth_size // 3)
mypen.right(75)
for i in range(6):
mypen.forward(earth_size // 5)
mypen.right(90)
mypen.left(90)
mypen.forward(earth_size // 3)
mypen.right(130)
mypen.forward(earth_size // 4)
mypen.end_fill()
# 画太阳
def draw_sun(sun_x, sun_y, sun_size, sun_color):
mypen.penup()
mypen.goto(sun_x, sun_y)
mypen.down()
mypen.dot(sun_size, sun_color)
# 画卫星(卫星只是大概轮廓)
def draw_satellite(satellite_x, satellite_y, satellite_under_width, satellite_under_height, satellite_on_width, satellite_on_height, satellite_under_color, satellite_on_color):
mypen.penup()
mypen.goto(satellite_x, satellite_y)
mypen.down()
mypen.setheading(-20)
mypen.fillcolor(satellite_under_color)
mypen.begin_fill()
for j in range(2):
mypen.forward(satellite_under_width)
mypen.right(90)
mypen.forward(satellite_under_height)
mypen.right(90)
mypen.end_fill()
mypen.penup()
mypen.forward(satellite_under_width)
mypen.right(90)
mypen.forward(satellite_under_height // 2 + 30)
mypen.right(90)
mypen.backward(75)
mypen.pendown()
mypen.fillcolor(satellite_on_color)
mypen.begin_fill()
for i in range(2):
mypen.forward(satellite_on_width)
mypen.right(90)
mypen.forward(satellite_on_height)
mypen.right(90)
mypen.end_fill()
mypen.setheading(-20)
mypen.backward(170)
mypen.pencolor("blue")
mypen.write("CHINA 中国", font = ("文泉驿正黑", 15))
# 画宇航员
# 画宇航员的头
def draw_people_head(people_head_x, people_head_y, people_head_under_size, people_head_on_size, people_head_under_color, people_head_on_color):
mypen.penup()
mypen.goto(people_head_x, people_head_y)
mypen.pendown()
mypen.dot(people_head_under_size, people_head_under_color)
mypen.dot(people_head_on_size, people_head_on_color)
mypen.penup()
mypen.goto(people_head_x + 10, people_head_y + 10)
mypen.pendown()
mypen.dot(people_head_on_size // 10, people_head_under_color)
# 画宇航员的的身体(不好看,包括手)
def draw_people_body(people_body_x, people_body_y, people_body_size_width, people_body_size_height, people_body_color):
mypen.penup()
mypen.pencolor("black")
mypen.goto(people_body_x, people_body_y)
mypen.setheading(0)
mypen.backward(people_body_size_height // 2)
mypen.pendown()
mypen.fillcolor(people_body_color)
mypen.begin_fill()
for i in range(2):
mypen.forward(people_body_size_height)
mypen.right(90)
mypen.forward(people_body_size_width)
mypen.right(90)
mypen.end_fill()
mypen.penup()
mypen.goto(people_body_x, people_body_y)
mypen.setheading(90)
mypen.backward(people_body_size_height // 2 + 25)
mypen.setheading(0)
mypen.backward(60)
mypen.setheading(90)
mypen.pendown()
mypen.fillcolor(people_body_color)
mypen.begin_fill()
for i in range(2):
mypen.forward(people_body_size_width // 3 + 30)
mypen.right(90)
mypen.forward(people_body_size_height // 3)
mypen.right(90)
mypen.end_fill()
mypen.penup()
mypen.goto(people_body_x, people_body_y)
mypen.setheading(0)
mypen.forward(people_body_size_height // 2)
mypen.pendown()
mypen.fillcolor(people_body_color)
mypen.begin_fill()
for i in range(2):
mypen.forward(people_body_size_width // 3 + 30)
mypen.right(90)
mypen.forward(people_body_size_height // 3)
mypen.right(90)
mypen.end_fill()
# 画宇航员的的脚和腿(省略了脚)
def draw_people_leg_and_feet(people_leg_x, people_leg_y, people_leg_width, people_leg_height, people_leg_color):
mypen.penup()
mypen.goto(people_leg_x, people_leg_y)
mypen.forward(13)
mypen.setheading(90)
mypen.backward(145)
mypen.pendown()
mypen.fillcolor(people_leg_color)
mypen.begin_fill()
for i in range(2):
mypen.forward(people_leg_width)
mypen.right(90)
mypen.forward(people_leg_height)
mypen.right(90)
mypen.end_fill()
mypen.penup()
mypen.goto(people_leg_x + 50, people_leg_y)
mypen.setheading(0)
mypen.forward(13)
mypen.setheading(90)
mypen.backward(145)
mypen.pendown()
mypen.fillcolor(people_leg_color)
mypen.begin_fill()
for i in range(2):
mypen.forward(people_leg_width)
mypen.right(90)
mypen.forward(people_leg_height)
mypen.right(90)
mypen.end_fill()
# 画月亮
def draw_moon(moon_x, moon_y, moon_size, moon_color):
mypen.penup()
mypen.goto(moon_x, moon_y)
mypen.pendown()
mypen.dot(moon_size, moon_color)
mypen.setheading(180)
mypen.penup()
mypen.forward(moon_size // 2)
mypen.pendown()
mypen.dot(moon_size, "black")
# 画星系
def draw_galaxy(galaxy_x, galaxy_y, galaxy_color):
mypen.penup()
mypen.goto(galaxy_x + 200, galaxy_y - 200)
mypen.pendown()
mypen.pensize(2)
mypen.pencolor(galaxy_color)
mypen.setheading(20)
galaxy_size_the_first_list = [150, 100, 90, 80, 70, 60, 50, 40, 30 ,20, 10, 5]
galaxy_size_the_second_list = [5, 5, 10, 15, 25, 35, 45, 55, 65, 75, 85, 95, 150]
def def_draw_the_first_galaxy(size):
mypen.forward(size)
mypen.right(90)
def def_draw_the_second_galaxy(size):
mypen.forward(size)
mypen.left(90)
for i in range(len(galaxy_size_the_first_list)):
def_draw_the_first_galaxy(galaxy_size_the_first_list[i])
for i in range(len(galaxy_size_the_second_list)):
def_draw_the_second_galaxy(galaxy_size_the_second_list[i])
# 绘制旗面
def rectangle(x, y, width, height, color):
# 设置画笔
setpen(x, y, color)
# 开始绘制
mypen.begin_fill()
for i in range(2):
mypen.forward(width)
mypen.right(90)
mypen.forward(height)
mypen.right(90)
mypen.end_fill()
# 绘制五角星
def star(x, y, angle, length, color):
# 设置画笔
setpen(x, y, color)
# 设置画笔朝向
mypen.setheading(angle)
# 开始绘制
mypen.begin_fill()
for i in range(5):
mypen.forward(length)
mypen.left(72)
mypen.forward(length)
mypen.right(144)
mypen.end_fill()
# 设置画笔
def setpen(x, y, color):
mypen.penup()
mypen.setheading(0)
mypen.goto(x, y)
mypen.pencolor(color)
mypen.fillcolor(color)
mypen.pendown()
# 设置画笔为 0 度
mypen.setheading(0)
# 绘制国旗主程序
def main():
per = 2
mx, my = 70, -140
# 旗面
width, height = 30 * per, 20 * per
rectangle(mx, my, width, height, "red")
# 大五角星
R = 3 * per
ox, oy = mx + 5 * per, my - 5 * per
fa = R * math.sin(math.radians(72))
fo = R * math.cos(math.radians(72))
ax, ay = ox - fa, oy + fo
length = (R - R * math.cos(math.radians(72))) / math.cos(math.radians(18))
star(ax, ay, 0, length, "yellow")
# 第 1 颗小五角星
R = 1 * per
ox, oy = mx + 10 * per, my - 2 * per
angle = math.degrees(math.atan(3 / 5))
oh = R * math.sin(math.radians(angle))
ah = R * math.cos(math.radians(angle))
ax, ay = ox - ah, oy - oh
length = (R - R * math.cos(math.radians(72))) / math.cos(math.radians(18))
star(ax, ay, angle + 18, length, "yellow")
# 第 2 颗小五角星
R = 1 * per
ox, oy = mx + 12 * per, my - 4 * per
angle = math.degrees(math.atan(1 / 7))
oh = R * math.sin(math.radians(angle))
ah = R * math.cos(math.radians(angle))
ax, ay = ox - ah, oy - oh
length = (R - R * math.cos(math.radians(72))) / math.cos(math.radians(18))
star(ax, ay, angle + 18, length, "yellow")
# 第 3 颗小五角星
R = 1 * per
ox, oy = mx + 10 * per, my - 9 * per
angle = math.degrees(math.atan(4 / 5))
oh = R * math.sin(math.radians(angle))
ah = R * math.cos(math.radians(angle))
ax, ay = ox - ah, oy + oh
length = (R - R * math.cos(math.radians(72))) / math.cos(math.radians(18))
star(ax, ay, - (angle - 18), length, "yellow")
# 第 4 颗小五角星
R = 1 * per
ox, oy = mx + 12 * per, my - 7 * per
angle = math.degrees(math.atan(2 / 7))
oh = R * math.sin(math.radians(angle))
ah = R * math.cos(math.radians(angle))
ax, ay = ox - ah, oy + oh
length = (R - R * math.cos(math.radians(72))) / math.cos(math.radians(18))
star(ax, ay, - (angle - 18), length, "yellow")
# 画邮编方块与写字
def draw_rectangle(rectangle_x, rectangle_y, rectangle_size, rectangle_color, rectangle_num):
# 定义画方块函数
def rectangle(size, color):
for i in range(5):
mypen.pencolor(color)
mypen.forward(size)
mypen.right(90)
mypen.penup()
mypen.goto(rectangle_x, rectangle_y)
mypen.pendown()
mypen.setheading(0)
for i in range(rectangle_num):
rectangle(rectangle_size, rectangle_color)
mypen.setheading(0)
mypen.penup()
mypen.forward(WIDTH // 50)
mypen.pendown()
mypen.penup()
mypen.forward(rectangle_size * 3)
mypen.setheading(-90)
mypen.forward(rectangle_size)
mypen.pendown()
mypen.setheading(0)
mypen.write("明 信 片", font=("文泉驿正黑", rectangle_size // 2))
# 写字函数
def draw_text(text_size, text_color):
mypen.penup()
mypen.pencolor(text_color)
mypen.pendown()
mypen.write("1970年4月24日,中国第1颗人造地球卫星东方红1号发射成功,", font=("文泉驿正黑", text_size))
mypen.setheading(-90)
mypen.penup()
mypen.forward(rectangle_size // 2)
mypen.pendown()
mypen.write("拉开了中国人探索宇宙奥秘、和平利用太空、造福人类的序幕。", font=("文泉驿正黑", text_size))
mypen.penup()
mypen.forward(rectangle_size // 2)
mypen.pendown()
mypen.write("经过几代航天人的不懈努力,2003年10月15日,", font=("文泉驿正黑", text_size))
mypen.penup()
mypen.forward(rectangle_size // 2)
mypen.pendown()
mypen.write("航天员杨利伟乘“神舟五号”飞船首次进入太空,实现了中华民族的千年飞天梦,", font=("文泉驿正黑", text_size))
mypen.penup()
mypen.forward(rectangle_size // 2)
mypen.pendown()
mypen.write("此后,手持红旗漫步太空的翟志刚,巾帼不让须眉的刘洋,三次出征太空的景海鹏,", font=("文泉驿正黑", text_size))
mypen.penup()
mypen.forward(rectangle_size // 2)
mypen.pendown()
mypen.write("让太空中有了越来越多的中国身影,面对星辰大海,中国人永不停步。", font=("文泉驿正黑", text_size))
mypen.penup()
mypen.setheading(-90)
mypen.forward(rectangle_size * 2)
mypen.setheading(0)
mypen.backward(rectangle_size * 3.25)
mypen.pendown()
draw_text(rectangle_size // 4, text_color="white")
# 贴邮票方框
def draw_big_rectangle(big_rectangle_x, big_rectangle_y, big_rectangle_color, big_rectangle_size):
mypen.penup()
mypen.goto(big_rectangle_x, big_rectangle_y)
mypen.pendown()
mypen.setheading(0)
mypen.pencolor(big_rectangle_color)
for i in range(2):
mypen.forward(big_rectangle_size)
mypen.right(90)
mypen.forward(big_rectangle_size * 1.4)
mypen.right(90)
draw_big_rectangle(375, 250, "red", 100)
mypen.penup()
mypen.goto(390, 175)
mypen.pendown()
mypen.write("贴邮票", font=("黑体", 17))
# 留言
def interaction():
while True:
player_talk = myscreen.textinput("输入留言", "请输入一些话吧!(10字以内,包括标点)")
if len(player_talk) > 10:
print("字数超过 10 字!")
else:
mypen.penup()
mypen.goto(-300, -200)
mypen.pendown()
mypen.write(player_talk, font = ("文泉驿正黑", 20))
print("留言成功!谢谢你的留言!")
break
# 输入喵
def input_postal_code(postal_code_x, postal_code_y, postal_code_color, postal_code_size):
while True:
code_num = ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9"]
postal_code = myscreen.textinput("喵", "请输入喵(6个数字):")
after_split = list(postal_code)
if len(after_split) == 6:
for i in range(len(after_split)):
if after_split[i] in code_num:
pass
else:
print("输入格式有误!请重新输入!")
break
else:
print("输入数字需要6个!请重新输入!")
continue
mypen.setheading(0)
mypen.penup()
mypen.goto(postal_code_x + 15, postal_code_y - postal_code_size * 1.3)
mypen.pendown()
mypen.pencolor(postal_code_color)
for i in range(len(after_split)):
mypen.write(after_split[i], font=("宋体", postal_code_size))
mypen.penup()
mypen.forward(postal_code_size * 1.8)
mypen.pendown()
break
# 惊喜
def surprise():
time.sleep(1)
print("作者给你了一个惊喜!")
time.sleep(1)
print("谢谢您的观看!祝你永远身体健康!工作(学习)顺利!万事如意!祝祖国更加强盛!祝祖国人民幸福安康!祝中国航天事业领先全球!!!")
time.sleep(1)
print("已播放完毕!谢谢您的观看!")
# 调用函数
screen_size(WIDTH, HEIGHT, TITLE)
draw_sky(BG_COLOR)
while I <= STAR_NUM:
draw_stars(random.randint(-WIDTH, WIDTH), random.randint(-HEIGHT, HEIGHT), random.choice(STAR_SIZE_LIST), random.choice(STAR_COLOR_LIST))
I += 1
draw_earth(EARTH_SIZE, EARTH_X, EARTH_Y, EARTH_SEA_COLOR, EARTH_LAND_COLOR)
draw_sun(SUN_X, SUN_Y, SUN_SIZE, SUN_COLOR)
draw_satellite(SATELLITE_X, SATELLITE_Y, SATELLITE_ON_WIDTH, SATELLITE_ON_HEIGHT, SATELLITE_UNDER_WIDTH, SATELLITE_UNDER_HEIGHT, SATELLITE_ON_COLOR, SATELLITE_UNDER_COLOR)
draw_people_head(PEOPLE_HEAD_X, PEOPLE_HEAD_Y, PEOPLE_HEAD_UNDER_SIZE, PEOPLE_HEAD_ON_SIZE, PEOPLE_HEAD_UNDER_COLOR, PEOPLE_HEAD_ON_COLOR)
draw_people_body(PEOPLE_BODY_X, PEOPLE_BODY_Y, PEOPLE_BODY_SIZE_WIDTH, PEOPLE_BODY_SIZE_HEIGHT, PEOPLE_BODY_COLOR)
draw_people_leg_and_feet(PEOPLE_LEG_X, PEOPLE_LEG_Y, PEOPLE_LEG_WIDTH, PEOPLE_LEG_HEIGHT, PEOPLE_LEG_COLOR)
draw_moon(MOON_X, MOON_Y, MOON_SIZE, MOON_COLOR)
draw_galaxy(GALAXY_X, GALAXY_Y, GALAXY_COLOR)
main()
draw_rectangle(RECTANGLE_X, RECTANGLE_Y, RECTANGLE_SIZE, RECTANGLE_COLOR, RECTANGLE_NUM)
input_postal_code(RECTANGLE_X, RECTANGLE_Y, POSTAL_CODE_COLOR, RECTANGLE_SIZE - 10)
interaction()
surprise()
# 固定窗口
turtle.done()
【提示】
部分含有Python第三方库相关内容的作品,在海龟编辑器网页端无法运行哦!如遇到这种情况,可以打开下面的链接,下载海龟编辑器客户端:
https://python.codemao.cn