北斗七星图

效果图:

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

操作方法

在主模块中运行程序,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'
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值