效果图:
操作方法
在主模块中运行程序,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.questiont.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 // 2x = randint(-x_half, x_half)y_half = s.canvas_height // 2y = randint(-y_half, y_half)pos = x, ypositions.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.answert.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 = 800self.canvas_height = 600self.question = '如果有人问你:你咋不上天? \n你就回...'self.font_size = 20self.pause = 5 # 用于设置三部分之间的停顿时间。# 第二部分,用于设置星星self.star_num = 600self.star_sizes = [2, 3, 4, 5]self.draw_speed = 1self.pen_size = 3self.star_to_star = 1# 第三部分,用于设置回答问题(部分的设置用到第一部分)self.answer = '我上过宇宙 O_O'