效果图:
操作方法
在主模块中运行程序,Settings模块中是对程序的设置
代码
import turtle as t
from time import sleep
from Settings import *
from random import randint, choice
# 画出问题,然后重置窗口,准备画星星
def draw_question():
t.bgcolor('black')
t.color('white')
go(-200, 0)
t.setup(s.canvas_weight, s.canvas_height)
question = s.question
t.write(question, True, font=('Arial', s.font_size, 'normal'))
sleep(s.pause)
t.reset()
# 移动笔尖
def go(x, y):
t.penup()
t.goto(x, y)
t.pendown()
# 画星星,包括其他星,和北斗星,画星星和连线有时间延迟和笔速。
def draw_star():
# 返回随机得到其他星的列表,大小随机
def star_pos():
positions = list()
for _ in range(s.star_num):
x_half = s.canvas_weight // 2
x = randint(-x_half, x_half)
y_half = s.canvas_height // 2
y = randint(-y_half, y_half)
pos = x, y
positions.append(pos)
return positions
# 返回北斗七星的坐标
def dipper_map():
position = [(-330, 150), (-210, 120), (-130, 70), (0, 0), (-10, -120), (160, -190), (240, -70)]
return position
# 画其他星和北斗星。若是其他星则将turn_size设为True,可改变其大小。若是北斗七星,则固定其大小
def draw(pos_list, star_color, change_size):
for pos in pos_list:
go(pos[0], pos[1])
if change_size:
star_size = choice(s.star_sizes)
t.dot(star_size, star_color)
else:
t.dot(10, star_color)
# 将北斗七星连线
def link_map(map_pos_list):
t.pendown()
t.color('gold')
t.pensize(s.pen_size)
go(map_pos_list[0][0], map_pos_list[0][1])
for pos in map_pos_list:
sleep(s.star_to_star)
t.goto(pos[0], pos[1])
t.bgcolor('black')
t.hideturtle()
t.penup()
t.tracer(False)
little_pos = star_pos()
map_pos = dipper_map()
draw(little_pos, 'white', True) # 画其他星星
draw(map_pos, 'gold', False) # 画北斗星
t.tracer(True) # 必须打开动画,才可以画线
sleep(3)
t.speed(s.draw_speed)
link_map(map_pos)
sleep(s.pause) # 停顿后,进行第三部分
t.reset()
def draw_answer():
t.bgcolor('black')
t.hideturtle()
t.color('white')
answer = s.answer
t.write(answer, font=('Arial', s.font_size, 'normal'))
def main():
t.hideturtle()
draw_question() # 第一部分问问题
draw_star() # 第二部分画星星
draw_answer() # 第三部分回答问题
if __name__ == '__main__':
s = Settings()
main()
t.done()
class Settings:
def __init__(self):
# 第一部分,用于设置问题
self.canvas_weight = 800
self.canvas_height = 600
self.question = '如果有人问你:你咋不上天? \n你就回...'
self.font_size = 20
self.pause = 5 # 用于设置三部分之间的停顿时间。
# 第二部分,用于设置星星
self.star_num = 600
self.star_sizes = [2, 3, 4, 5]
self.draw_speed = 1
self.pen_size = 3
self.star_to_star = 1
# 第三部分,用于设置回答问题(部分的设置用到第一部分)
self.answer = '我上过宇宙 O_O'