Python寓义动画_豹的速度_一往无前

Python寓义动画_豹的速度_一往无前

人类历史长河或许很长很长,但是相对于宇宙,我们仍旧非常渺小。虽然每个人的一生只是一瞬间。但是,我们要像豹子一样,勇往无前。

大家好,我是某某某。这是我用Python编程制作的一个小作品。
它的名字叫做《豹的速度,一往无前》。
这个作品是一个动画。运行程序后会有一个太阳在中间,
上面还有一只豹子在不断地奔跑着。
细心的话,我们还能看到月亮绕地球,地球绕太阳的动画。
伴随着背景音乐,还会有一些字幕显示出来。
这个作品描述的主要寓意就是,人类很渺小,
还有星辰大海等待着我们去探索。
我们每个人都要像豹子一样,一往无前。

下面,我先演示一下这个程序。(程序演示中……)

为了更加方便的理解程序。我把程序代码进行了分段。
每一段,都完成特定的功能。

第1段,是最简单的,只是程序的说明文字说明。
它实际上是一个没有名字的字符串。

第2段, 是从一些模块中导入一些命令。以供接下来的代码使用。

第3段,定义了程序的名字。但主要还是新建了窗口及对窗口进行设置。

第4段,无限循环播放背景音乐。注意PlaySound只能播放wav音频。

第5段,实现的是太阳动画。它是通过一些背景图片不断地切换来完成的。

第6段,实现的是豹子的动画。它是通过不断切换leopard对象的造型来完成的。

第7段,新建地球,它是一个海龟对象。它的造型是一张名为“地球.png”的图片。

第8段,新建月亮,它也是一个海龟对象。它的造型是圆形,并且是白色的。

第9段,新建dummy对象。它是用来写程序标题的隐藏海龟。

第10段,新建dummy2对象。它是用来写移动字幕的隐藏海龟。

第11段,新建了dummy3对象。它是用来写最底下的感谢信息的海龟。

第12段,新建了几个变量,然后进入了一个while循环。

这是程序的主循环。在这个主循环中主要分为A、B、C、D、E几段程序。

A段程序是地球的移动。B段程序是月亮绕地球的移动。

C段程序是让程序的标题逐步往上移的代码,一直到y坐标等于-260就不会移动了。

D段程序是实现从左到右的字幕的。
它不断地清除,不断地重写,同时x坐标不断减小,
所以我们能看到从左到右移动着的字幕。

E段代码,让程序进入主循环后,大概10秒后,在窗口最底下显示几个字。
这几个字就是“本程序由Python海龟模块制作,感谢观看。”

另外,这个作品全部用的是Python内置模块完成的,并不需要安装外置模块。
背景音乐的名字叫Just Blue。这是曾经中央电视台《动物世界》栏目的主题曲。

好了,程序就介绍到这里了。我知道一个程序最重要的是可读性。
这个程序,很多行都加了注释。希望给阅读者提供理解上的方便。

最后,非常感谢评委们认真地看了我的作品,谢谢。

"""
    豹的速度,一往无前
    这个作品有月亮绕地球,地球绕太阳公转,它们在太阳前面都显得很小很小。
    事实也是这样。寓义为人类在宇宙中是非常渺小的。人的一生非常有限。
    我们要向豹子一样义无反顾,勇往直前。
    
"""
from time import sleep
from math import sin,cos,radians
from turtle import Shape,Turtle,Screen
from winsound import PlaySound,SND_LOOP,SND_ASYNC

project = '豹的速度,一往无前'
screen = Screen()                            # 新建屏幕
screen.delay(0)                              # 延时为0毫秒
screen.setup(640,640)                        # 设置宽高  
screen.bgcolor('black')                      # 设置背景色
screen.title(project)

PlaySound('Just Blue.wav',SND_LOOP|SND_ASYNC)# 播放背景音乐

index = 0
sun_pics = [f"res/sun{i:03d}.png" for i in range(1,11)]
def alt_bg():                                # 定义函数,不断地切换太阳造型
    global index
    screen.bgpic(sun_pics[index])            # 设定背景图片
    index += 1                               # 索引号加1
    index %= 10                              # 索引号对10求余
    screen.ontimer(alt_bg,100)               # 100毫秒后再次调用alt_bg  
alt_bg()                                     # 调用alt_bg函数

bao_pics = [f"b/{i:04d}.png" for i in range(1,13)]  # 豹的造型图片
bao_shapes =[Shape('image',screen._image(im)) for im in bao_pics]# 豹的造型对象
[screen.addshape(f'bao{i}',bao_shapes[i]) for i in range(12)]    # 添加到造型字典
leopard = Turtle(shape='bao0')                                   # 新建“豹”对象
leopard.penup()                                                  # 抬笔
leopard.speed(0)                                                 # 速度为最快 
leopard.sety(180)                                                # 设定y坐标为180
leopard.index = 0                                      # 自定义属性,表示造型索引号
def alt_shape():                                       # 定义切换造型的函数 
    leopard.index += 1                                 # 索引号增加1
    leopard.index %= 12                                # 索引号对12求余
    sp = f'bao{leopard.index}'                         # 造型名称
    leopard.shape(sp)                                  # 设定豹的造型为sp 
    screen.ontimer(alt_shape,100)                      # 100毫秒后再次切换造型
alt_shape()                                            # 调用切换造型函数
    
earth_shape = Shape('image',screen._image('res/地球.png')) # 地球造型对象
screen.addshape('earth',earth_shape)                       # 注册到造型字典
earth_obj = Turtle(shape='earth')                          # 新建地球对象
earth_obj.penup()                                          # 抬笔
earth_obj.speed(0)                                         # 速度为最快 
                            
moon = Turtle(shape='circle')                              # 月亮对象
moon.penup()                                               # 抬笔  
moon.speed(0)                                              # 速度为最快
moon.shapesize(0.1)                                        # 缩小
moon.color('white')                                        # 颜色为白色 

dummy = Turtle(visible=False)                              # 新建dummy对象,用来写字
dummy.penup()                                              # 抬笔
dummy.speed(0)                                             # 速度为最快
dummy.color('yellow')                                      # 颜色为黄色
dummy.goto(0,-660)                                         # 坐标定位
ft = ('楷体',34,'normal')                                  # 字体样式

dummy2 = Turtle(visible=False)                             # 新建dummy2对象
dummy2.penup()
dummy2.speed(0)
dummy2.color('white')
dummy2.goto(1600,-200)
ft2 = ('黑体',20,'normal')                                 # 字体样式
 
dummy3= Turtle(visible=False)                              # 新建dummy3对象 
dummy3.penup()
dummy3.speed(0)
dummy3.color('cyan')
dummy3.goto(0,-300)
ft3 = ('宋体',12,'normal')                                  # 字体样式
string = "本程序由Python 海龟模块制作,感谢观看。"

radius = 300                                               # 地球绕太阳半径
angle = 0
r = 20                                                     # 月亮绕地球半径
a = 0
counter = 0
寓义 = '人类历史长河或许很长很长,但是相对于宇宙,我们仍旧非常渺小。虽然每个人的一生只是一瞬间。但是,我们要像豹子一样,勇往无前。'
while True:
    earth_x = radius * cos(radians(angle))                 # 算出地球x坐标
    earth_y = radius * sin(radians(angle))                 # 算出地球y坐标
    earth_obj.goto(earth_x,earth_y)                        # 到达坐标
    angle += 0.1

    moon_x = earth_x + r * cos(radians(a))                 # 算出月亮x坐标
    moon_y = earth_y + r * sin(radians(a))                 # 算出月亮y坐标
    moon.goto(moon_x,moon_y)                               # 到达坐标
    a += 1   
    
    if dummy.ycor()<-260:
        dummy.clear()                                      # 清除以前所写文字 
        dummy.write(project,align='center',font=ft)        # 写文字,中间对象,字体样式为ft
        dummy.sety(dummy.ycor() + 1)

    dummy2.clear()
    dummy2.write(寓义,align='center',font=ft2)
    dummy2.bk(1)
    if dummy2.xcor()<-1200:dummy2.goto(1600,-200)
    counter += 1
    if counter ==1000:
        dummy3.write(string,align='center',font=ft3)

    sleep(0.01)
        


需要源代码,程序说明文档,及所有素材,请

成为会员后,登陆才能继续浏览!联系微信scratch8即可办理会员。
(会员专属:能浏览所有文章,下载所有带链接的Python资源。)

李兴球

李兴球的博客是Python创意编程原创博客