你是否还记得昨夜星辰

海王星上全是大海吗?为什么土星竟然有62个月亮,而地球只有一个月亮?据说喜欢仰望天空的是充满好奇心的人….

"""本程序实现星空中闪烁烁的星星,然后有七颗星星会连起来,它们是北斗七星,还有启明星。"""
from star import *
from time import sleep

"定义全局变量"
stars_amounts = 49
width ,height = 800,600                                                             #屏幕宽高
beidou_cors = [(-276,110),(-125,135),(-38,88),(76,38),(100,-64),(284,-70),(314,52)] #北斗七星坐标表
beidou_names = ["瑶光","开阳","玉衡","天权","天玑","天旋","天枢"]                   #名称表
images_small = ["star1.gif","star2.gif"]                                            #星星的小造型images_small列表
images_big = ["big_star1.gif","big_star2.gif"]                                      #星星的大造型images_big列表

s1 = "北斗七星,是由天枢、天璇、天玑、天权、玉衡、开阳、瑶光七星组成的。"
s2 = "古代中国人民把这七星联系起来想象成为古代舀酒的斗形。"
s3 = "天枢、天璇、天玑、天权组成为斗身,古曰魁;玉衡、开阳、摇光组成为斗柄,古曰杓。"
s4 = "道教称北斗七星为七元解厄星君,居北斗七宫。以下是它们的名称:"
s5 = "天枢宫贪狼星君、天璇宫巨门星君、天玑宫禄存星君、天权宫文曲星君、"
s6 = "玉衡宫廉贞星君、开阳宫武曲星君、瑶光宫破军星君。"
knowledge = [s1,s2,s3,s4,s5,s6]                  # 放在列表中,方便遍历

"生成屏幕对象"
screen = Screen()
screen.title("昨夜星辰_作者:李兴球")
screen.setup(width,height)
screen.delay(0)                                  # 绘画延时为0
screen.bgpic("北斗定位坐标用.png")
screen.addshape("star1.gif")                     # 注册形状
screen.addshape("star2.gif")
screen.addshape("big_star1.gif")                 # 注册形状
screen.addshape("big_star2.gif")
screen.update()
sleep(1)

"海龟对象用来画五角星(代表北极星)和写字。"
t = Turtle(visible = False)                      # 新建不可见海龟对象,
t.penup()                                        # 抬笔
t.color("white","white")                         # 画笔颜色和填充颜色

t.goto(360,280)                                  # 定位
t.pendown()                                      # 落笔
t.begin_fill()                                   # 开始填充
for i in range(5):                               # 这里是画一个白色的五角星
    t.fd(20)
    t.rt(144)
t.end_fill()                                     # 结束填充
t.penup()                                        # 抬笔

"生成星星49颗"
stars = []                                       # 创建stars列表
for i in range(stars_amounts):                   # 重复stars_amounts次
    "Star参数为:图形列表,x坐标,y坐标"
    stars.append(Star(images_small,randint(-width/2,width/2),randint(0,height/2))) #新建Star,并添加到stars列表
    #sleep(randint(1,2)/4)

screen.delay(6)                                  # 绘画延时为6
"以下等待几秒钟,不直接用sleep(5)是防止窗口无响应"
for i in range(5):
    sleep(1)
    screen.update()

"定位前7颗星星到北斗七星的坐标位置"
for i in range(7):       
    star =  stars.pop()                           # 弹出一颗星星
    x,y = beidou_cors[i]                          # 取出x,y坐标
    star.goto(x,y)                                # 定位到此坐标
    star.images = images_big

"准备连线"        
t.pencolor("gray")                                # 画笔颜色为灰
t.pensize(2)                                      # 画笔迹宽为2
t.goto(beidou_cors[0])                            # 定位到北斗第一颗星的坐标
t.write(beidou_names[0],font=("黑体",14,"normal"))# 写第一颗星的名字
t.pendown()                                       # 落笔,准备画连线
for i in range(1,7):                              # 把其它六颗星连线
    t.goto(beidou_cors[i])
    t.write(beidou_names[i],font=("黑体",14,"normal"))
t.goto(beidou_cors[3])
screen.title("北 斗 七 星")

"剩下的都隐藏"
for i in range(stars_amounts-7):
    star = stars.pop()      # 弹出最后的
    star.ht()               # 隐藏

"以下是写字,包括标题和北斗七星的小知识。"
t.penup()
t.pencolor("yellow")
t.goto(0,200)
t.write("北 斗 七 星",align='center',font=("黑体",24,"bold"))
t.pencolor("cyan")
t.goto(-340,-160)
for s in knowledge:                             # 遍历“知识”列表
    t.write(s,font=("宋体",12,"normal"))
    t.sety(t.ycor() - 24)
    
    
screen.mainloop()

下面是star模块

from turtle import *
from random import randint
from time import sleep

try:
    import pygame
    musicfile = "林淑容 - 昨夜星辰 - 《昨夜星辰》电视剧主题曲.mp3"
    pygame.mixer.init()
    pygame.mixer.music.load(musicfile)
    pygame.mixer.music.play(-1,0)
except:
    pass

class Star(Turtle):
    def __init__(self,images,x,y):
        Turtle.__init__(self,visible=False)        # 父类初始化
        self.penup()                               # 抬笔
        self.images = images                       # 图形列表
        self.index = 0                             # 索引号
        self.goto(x,y)                             # 定位坐标
        self.twinkle()                             # 调用闪烁方法
        self.st()                                  # 显示
        
    def twinkle(self):
        if self.ycor() < self.screen.window_height() + 10: # 小于这个值就闪,即每隔一定时间换造型。
             self.index = 1 - self.index
             self.shape(self.images[self.index])
             self.screen.ontimer(self.twinkle,randint(300,800))
            
    def rise(self):
        """这个方法可以让星星上升"""
        if self.ycor() < self.screen.window_height() + 10:
            self.sety(self.ycor()  + 5)
            self.screen.ontimer(self.rise,10)
        else:
            self.ht()
        
def beidou_stars(stars,images_big,screen):
    """七星连线"""
    beidou_cors = [(-276,110),(-125,135),(-38,88),(76,38),(100,-64),(284,-70),(314,52)] #北斗七星坐标表
    beidou_names = ["瑶光","开阳","玉衡","天权","天玑","天旋","天枢"]                   #名称表
    screen.delay(6)                                     # 绘画延时为6,让海龟对象看起来移动更慢
    "以下等待几秒钟,不直接用sleep(5)是让窗口无响应没那么明显"
    for i in range(5):
        sleep(1)
        screen.update()

    "定位前7颗星星到北斗七星的坐标位置"
    for i in range(7):       
        x,y = beidou_cors[i]                              # 取出x,y坐标
        stars[i].goto(x,y)                                # 定位到此坐标
        stars[i].images = images_big                      # 更换星星的形状表为大星星

    "海龟对象用来连线。"
    t = Turtle(visible = False)                            # 新建不可见海龟对象,
    t.penup()                                              # 抬笔
    t.pencolor("gray")                                     # 画笔颜色为灰
    t.pensize(2)                                           # 画笔迹宽为2
    t.goto(beidou_cors[0])                                 # 定位到北斗第一颗星的坐标
    t.write(beidou_names[0],font=("黑体",14,"normal"))     # 写第一颗星的名字
    t.pendown()                                            # 落笔,准备画连线
    for i in range(1,7):                                   # 把其它六颗星连线
        t.goto(beidou_cors[i])                             # beidou_cors是坐标表
        t.write(beidou_names[i],font=("黑体",14,"normal")) # beidou_names是名称表
    t.goto(beidou_cors[3])
    screen.title("北 斗 七 星")

    
    
if __name__ == "__main__":

    screen = Screen()
    screen.setup(800,600)
    screen.title("一闪一闪亮晶晶")
    screen.delay(0)
    screen.bgpic("bg2.png")
    screen.addshape("star1.gif")
    screen.addshape("star2.gif")
    images = ["star1.gif","star2.gif"]
    
    [Star(images,randint(-400,400),randint(0,400)) for i in range(50)]

    screen.mainloop()
    
    

python多媒体动画北斗七星