《八猫联动初体验》_来自游戏海龟模块的问候

Python海龟宝典含200多个原创的用turtle模块制作的创意程序,原名《Python趣味编程200例》。准备参加全国创意编程与智能设计大赛的同学们可以用来做参考。

《八猫联动初体验》是用Python的游戏海龟模块制作的一个小程序。

在这个作品中使用了游戏海龟模块!英文名是gameturtle,话说什么是游戏海龟模块呢?原来,这个模块是一个“秘密”的模块。是笔者全新开发的一个用于制作游戏的模块。它支持像素级碰撞检测,使用简单,主要配合tkinter模块来开发制作有趣的游戏。

这个模块在《Python海龟宝典》下册原理篇中有详细的使用说明。如果你读懂了《Python海龟宝典》下册原理篇,那么就能自己开发一个gameturtle模块了。

读者可能又会问《Python海龟宝典》又是什么?《Python海龟宝典》也是笔者编写的。它分为上下两册,上册是超过200例的用原生的turtle模块制作的各种小案例,如动画,小游戏,绘画艺术等。

Python海龟宝典

下册则深入剖析了turtle模块内部,并且推出了自己的一个叫gameturtle的模块。只要你顺着作者的思路,相信你也能成为Python创意编程大师。

图片

我们这里讲的《八猫联动初体验》这个作品,

就是用gameturtle模块编写的。如果你的电脑没有安装gameturtle模块,是无法运行的。可喜的是,这个模块的源代码已经开源。任何人都能安装下载它,查看并阅读它的源代码以便学习。安装它很简单,用cmd打开管理员窗口,然后输入 pip install gameturtle 即可。

python pip install gameturtle

在gameturtle模块中,定义了一个叫GameTurtle的类,别名叫Sprite。使用Sprite类至少要带上画布参数,所以要建窗口和画布。

下面是一个简单的示例代码。

from gameturtle import *

root = Tk()
cv =Canvas(width=480,height=360)
cv.pack()

a = Sprite(cv)

程序最后一句没有写root.mainloop()这行代码,所以还可以直接在IDLE Shell中输入测试代码。

读者可以输入a.fd(100,a.forward(100),a.bk(100,a.rt(90),a.lt(90)等进行测试。这些和turtle模块基本一致。

不过最大不同是坐标系的不同。所以如果输入a.distance(100,100),返回的是161.24515496597098时不要惊讶。

tkinter canvas coordinate system
tkinter canvas coordinate system

因为tkinter画布坐标系以左上角为原点,而海龟诞生时默认在画布中央,所以这个时候它的坐标并不是(0,0)。在本例中,由于画布宽度是480,高度是360,所以海龟的坐标是(240,180)。

可能有人会问,上面的程序并没有导入tkinter模块的Tk和Canvas命令,但在程序中却可以直接使用,这是怎么回事呢?

这是由于在gameturtle模块中已经导入了!而在本程序第一行代码又是使用了*号,所以它会一股脑儿把所有在gameturtle曾经导入过的命令都导进来。

更好的办法是写from gameturtle import Sprite。这个时候,读者就要手工导入Tk和Canvas这两个命令(类)了。

为了显示多帧动画,下面的程序告诉了你,如何给Sprite命令传递多帧图像,从而生成具有多帧造型角色。

python multi frame costumes
python multi frame costumes

首先,有一个叫res的文件夹,它下面存储了从0.png到15.png的图像。

然后我们要把它们的相对路径(程序和res目录同一个文件夹)全部加载进来,用下面的代码:

frames = [f"res/{i}.png" for i in range(16)]

这是一行列表推导式,运行它就能把图像的相对路径全部放在列表中。

接着,用Image.open打开每张图(在gameturtle已经导入的pillow模块)。

代码就像下面这样:

ims = [Image.open(im) for im in frames]

由于我们要建8个角色,并且把它们全部放在cats列表中,所以用下面的代码:

cats = [Sprite(cvs[i],ims) for i in range(8)]

在Sprite类中,第一个参数是画布,其它参数的名字依次是:
frames,pos,visible,heading=0,tag。

frames表示造型帧图,可以传递一个图形,也能传递一个列表或元组。这些图形要是pillow模块中的图形对象。也就是要用Image.open或者Image.new或者Image.fromarray这几个命令加载的图表对象。

pos参数表示坐标,visible参数表示可见性,heading参数表示默认的方向。

tag参数表示角色的标签,这是为了便于分组。

最后为了让每只猫不断地原地踏步,让它们在无限循环中不断切换造型即可。

所有代码示例如下所示:

"""
八猫联动初体验.py
这个程序使用gameturtle模块,生成8块画布,在每块画布上生成一只小猫。

"""
try:
    from gameturtle import *
except:
    import subprocess
    p = subprocess.Popen(["pip","install","gameturtle"],shell=True)
    from tkinter import messagebox
    t ='风火轮编程提示:'
    p = '''没有找到gameturtle模块,程序无法运行。\n
程序会自动进行安装,如果重新启动程序后还无法运行。\n
请手动安装gameturtle模块,方法:\n用cmd命令打开管理员窗口,\n然后输入pip install gameturtle\n
如果还是不知道操作,请加李兴球微信pythonxia提供技术支持。\n
gameturtle模块详细说明,请见《Python海龟宝典》下册原理篇。'''
    messagebox.showwarning(t,p)

root = Tk()
root.title('八猫联动初体验by李兴球')
colors = ['red','orange','yellow','green',
          'cyan','blue','purple','pink']

cvs = []
for counter in range(len(colors)):
    i = counter // 4                                     # 行号
    j = counter % 4                                      # 列号
    cv = Canvas(width=120,height=120,bg=colors[counter]) # 建画布
    cv.grid(row=i,column=j)                              # 布局  
    cvs.append(cv)                                       # 放表中
    

frames = [f"res/{i}.png" for i in range(16)]   # 猫的每帧造型图
ims = [Image.open(im) for im in frames]        # 用Image.open加载到内存
cats = [Sprite(cvs[i],ims) for i in range(8)]  # 生成8个角色
[cat.setrotmode(1) for cat in cats[4:] ]       # 后4个设定旋转模式为左右翻转
[cat.right(180) for cat in cats[4:] ]          # 后4个向后转

while True:
    [c.nextshape() for c in cats ]             # 每只猫切换造型         
    root.update()                              # 更新显示
    time.sleep(0.01)                           # 等待0.01秒

需要本程序所有源代码和素材,请关注公众号:李兴球Python,回复8catrun,即可得到下载网址。

本站所有作品,教程等皆为原创,版权所有。只供个人及单位内部研究使用,对外展示或传播必需经本站同意,且注明来自本站。培训机构等用本站资源培训学生,需经本站授权。一旦付款,表示同意本站知识付费原则:数字商品,不支持退款。亦可直接向微信号scratch8付款购买。入住QQ群:225792826 和爱好者共同交流,并且能下载免费提供的Python资源(需提供真实姓名才可入群)
李兴球的博客_Python创意编程技术前沿_pygame » 《八猫联动初体验》_来自游戏海龟模块的问候

李兴球Python微信公众号文章列表

Python游戏海龟模块教程说明书与案例若干免费发放

爱的纪念_Python创意情景动画源代码解析

少儿Python编程到底学些什么?这些代码或许回答了问题.

Python编程家长会花絮_萍乡中小学Python家长会现场

火星路上等着你_少儿从小学什么最好呢?

国家大力整顿教育培训机构,Scratch或Python少儿编程还有得教吗?

鸿蒙系统支持Python开发_可视化编程特别兴趣小组

Scratch作品转Python作品_小猴接桃

python海龟数据可视化。第七次全国人口普查历年数据图表

你的孩子Python编程学到哪个阶段了?给孩子报编程的家长,务必仔细一读。

五一神女来对话,看看她们聊什么?赠Python教案等。

五一快乐有大礼,告诉大家我是如何上Python课的。

Python名堂多,趣味到处有,劈开机械手,帧帧是图片。速算达人之猫狮大战正在进行。 逐字动画不独享,自动生成皆有它。2行代码自动生成字幕gif动画。 Python之潮来临,我在安源区教师科技创新能力的Python讲座

小心你的Python程序,它会是你的一面镜子。小方块闯迷宫.py源代码简析。送Scratch算法集。?

铃儿响钉铛_音效怎能忘_Python配音之Pygame混音器

人面桃花相映红_winsound模块简介

《Python昨晚我想你了》_开源的游戏海龟模块实例案例浅析

《八猫联动初体验》_来自游戏海龟模块的问候

喜爱春天的人儿啊 心地纯洁的人_Python逐行像素显示

旋转之三叶炫彩扇_蟒蛇与海龟的表演

彩虹欢迎字幕_三模合体滚图形

《Python海龟宝典》简介

100%错误的算法还在用,明明没有错别字,说我有11个错别字

奇怪的Python代码,谁能帮我解释一下??

人造地球系统让人类文明充满整个宇宙之Python32768版

深夜,是什么把你的大脑搞成一团浆糊!再谈少儿编程!

5线城市萍乡的少儿Python寒假班学的是什么内容?

关于纯少儿编程课程进化的自然选择

Python海龟画图经典作品_国庆中秋双重喜庆源代码免费下载

海龟为什么要自杀!turtle制作游戏秘籍之一

朋友,你是否知道我在仰望着你_Python神笔马良案例集

酷酷的爆炸效果_Python海龟画图不仅仅是画图

虫子满屏爬_三bug多线程示例程序浅析 少儿Python视频课程A级简介

给的gif图片加文字水印_拆帧与合帧(免费下载180个Python创意源码

用Python制作酷炫图形之如意金箍棒_颜色增加模块应用

简单的用Python做酷炫图形与动画

sb3转exe,sb3素材提取器,编程小子apk, 未公开的pygame游戏集/scratch/python少儿编程免费下载集合

夜幕下的霓虹

学本领,探索更大的世界!

李兴球博客 风火轮编程主页
error: Content is protected !!