python中利用turtle(海龟)绘图制作龟兔赛跑动画——仅供学习

python中利用turtle(海龟)绘图制作龟兔赛跑动画——仅供学习哦

首先,欢迎大家来我的博客当中浏览,由于我和我的可爱现在还都个初学者,所作的东西还不够完善,之前在学习计算机的各种语言的过程中,在csdn平台上得到了许多的帮助。所以我和我的可爱先把我们做的东西放在这个平台上,期待与大家的共同交流。

这次是一个简单的python程序。利用python中自带的库,以及pygame库实现龟兔赛跑的动画。
强调,一定要安装pygame库哦!

好,话不多说,我们直接上代码!

from turtle import *#从turtle库中引入所有的命令
import turtle as t#引入turtle库把它叫做t
import pygame as p#引入turtle库把它叫做p
p.init()#初始化p的所有模块

#设置标题
t.title("欢迎来到海龟运动会之神奇海龟对决兔子")
#设置背景色
t.bgcolor("pink")

#小红旗
t.penup()
t.speed(1)
t.goto(200,0)
t.pendown()
t.color("red")
t.begin_fill()
t.left(90)
t.forward(60)
t.right(90)
t.forward(40)
t.right(150)
t.forward(50)
t.end_fill()
t.penup()

#兔子
rabbit=Turtle()#定义兔子
rabbit.hideturtle()#让兔子隐形
rabbit.shape('turtle')#兔子的形状是一只海龟(滑稽脸)
rabbit.color("green")
rabbit.up()#将兔子移动到起点,准备比赛
rabbit.back(300)#把兔子往后移300
rabbit.showturtle()#让兔子显露出来
rabbit.down()#兔子移动时划线

def rabbitmove():#定义一个新的函数 兔子移动
     if usedtime<50:#如果用时小于50
         rabbit.forward(3)#兔子向前奔跑
         rabbit.color("green")#兔子的颜色是绿色
     elif usedtime<415:#如果用时 50<=usedtime<415 兔子就去睡觉,位移不变
         rabbit.forward(0)#兔子向前0
     else:#否则就追赶
          rabbit.forward(6)#兔子向前4

#乌龟         
tortoise=Turtle()#引入乌龟图案
tortoise.hideturtle()#让乌龟隐形
tortoise.shape('turtle')#确定乌龟的形状
tortoise.color("purple")#确定乌龟的颜色
tortoise.pensize(3)#确定笔画的粗细
tortoise.up()#将乌龟移动到起点,准备比赛
tortoise.back(300)#将乌龟后移300
tortoise.showturtle()#把乌龟显露出来
tortoise.down()#乌龟移动时划线

def tortoisemove():#定义一个新的函数 乌龟移动
    tortoise.forward(1)#乌龟一直在缓慢的爬行
    if usedtime%2==0:
         tortoise.color("purple")
    else:
         tortoise.color("red")

#背景音
def musics():
     file=r'C:\Users\郭钊\Desktop\work space\1.mp3'
     p.mixer.init()#初始化混音器
     p.mixer.music.load(file)#加载文件
     p.mixer.music.play()#播放音乐

usedtime=0#定义用时 赋初值为0
def move():#定义函数 移动
    global usedtime#全局形式 移动均参照usedtime
    rabbitposition = rabbit.xcor()#兔子的位置是兔子的x坐标
    tortoiseposition = tortoise.xcor()#乌龟的位置是乌龟的x坐标
    if max(rabbitposition,tortoiseposition)>200:#如果兔子和乌龟的位置中最大的超过200
        writer= Turtle()#writer定义为Turtle
        writer.hideturtle()#隐藏乌龟(兔子)
        if tortoiseposition >200:#如果乌龟的位置大于200
            msg='Tortoise win!'#给msg(message)赋值字符串 rabbit win!
        else:#否则就给msg赋字符串 tortoise win!
            msg ='Rabbit win!'
        writer.write(msg, align='center', font=('simfang', 30,'bold'))#模块写入设置
        #输入字样 对齐方式 字体为仿宋,30号,黑体的
        p.mixer.music.fadeout(700)#控制音乐淡出
    else:#否则就移动
         rabbitmove()#兔子移动
         tortoisemove()#乌龟移动
         ontimer(move,100)#定时让它们有动画效果
         usedtime= usedtime+1#循环,用时+1

musics() 
ontimer(move,100)#比赛开始,定时

ok! 代码书写完成,第一次用这种的,有些不太习惯,可能会因此使得代码里面有多或者少空格的地方,导致程序无法正常运行(因为python是一个强格式的语言)。小伙伴们一定要记得检查呀。接下我们讲解实现过程。

这个程序是我和我的可爱在经过一周的python小学期后的答辩程序。在确定主题时,我的可爱说要用龟兔赛跑,我当然无条件的支持。

所谓龟兔赛跑,当然得有“兔”和“龟”,龟好实现,但是兔子不好实现,只能也由龟来替代。正如代码块

rabbit=Turtle()#定义兔子
rabbit.hideturtle()#让兔子隐形
rabbit.shape('turtle')#兔子的形状是一只海龟(滑稽脸)
rabbit.color("green")
rabbit.up()#将兔子移动到起点,准备比赛
rabbit.back(300)#把兔子往后移300
rabbit.showturtle()#让兔子显露出来
rabbit.down()#兔子移动时划线

#乌龟         
tortoise=Turtle()#引入乌龟图案
tortoise.hideturtle()#让乌龟隐形
tortoise.shape('turtle')#确定乌龟的形状
tortoise.color("purple")#确定乌龟的颜色
tortoise.pensize(3)#确定笔画的粗细
tortoise.up()#将乌龟移动到起点,准备比赛
tortoise.back(300)#将乌龟后移300
tortoise.showturtle()#把乌龟显露出来
tortoise.down()#乌龟移动时划线

当你只引入一次时,不管怎么动,永远都只有一个小乌龟在动,那就不能叫做龟兔赛跑了。实现方法就像上面那样,以下为简易版本

from turtle import *

turtle=Turtle()
turtle.shape('turtle')
turtle.forward(200)

rabbit=Turtle()
rabbit.shape('turtle')

这样就会出现两只小乌龟了。推类,三只,四只,十只是不是也很简单呐。

作为比赛,总得有个起点与终点吧?

#小红旗
t.penup()
t.speed(1)
t.goto(200,0)
t.pendown()
t.color("red")
t.begin_fill()
t.left(90)
t.forward(60)
t.right(90)
t.forward(40)
t.right(150)
t.forward(50)
t.end_fill()
t.penup()

这段代码是我认为在整个代码中比较出彩的。因为它的位置在整个代码的最开头,所以它最先执行,在视觉效果上如同先由“裁判”确定一个终点似的。

之后便是定义函数了,python的优势就是它便于理解,这里面我定义的函数都比较简单,所用到的结构仅仅是简单的判断与循环。通过usedtime来控制整个动画中移动的物体。不断地加一不断地移动,不断的变化。利用ontimer定时器,在特定的时间后,调用move函数,使得整个动画具有很哈动画效果。尤其注意背景音乐用了pygame库,这个库并非python自带的,所以大家如果想要正常运行程序,需要安装pygame的库哦。网上的安装教程也有很多哦。其中musics函数还需要小伙伴们的电脑中有一个mp3类型的音乐文件支撑,file 后的文件位置换成你想要播放的mp3文件的位置即可。

好啦,其实代码上的注释已经很多,相信大家都会明白的。如果有疑问可以加我的QQ:1056966958 我们一起交流沟通呀!记得加上备注,不然我会以为你是卖片的(滑稽)

好啦,就到这里啦,谢谢大家哦!

猜你喜欢

转载自blog.csdn.net/qq_45381011/article/details/95789558
今日推荐