我们接着上次的文章继续做推箱子的程序,一个能让你快速掌握Python函数、类的使用的简单游戏。
没有做推箱子游戏第一部分的朋友,请点击下面链接,做好第一部分再来。
【用turtle学Python:推箱子游戏竟然这么简单(第一部分)】
这里插播一条粉丝福利,如果你正在学习Python或者有计划学习Python,想要突破自我,对未来十分迷茫的,可以点击这里获取最新的Python学习资料和学习路线规划(免费分享,记得关注)
一 类是怎么来的
1. 推箱子角色的定义
还记得推箱子第一部分,我们建立了几个角色:墙、箱子位置、玩家

#定义墙的变量名为wall
wall = turtle.Turtle()
#定义图标
wall.shape('wall.gif')
#默认抬笔
wall.penup()
#定义目标位置图片
box = turtle.Turtle()
box.shape('o.gif')
box.penup()
#定义玩家的图片
player = turtle.Turtle()
player.shape('p.gif')
player.penup()
2. 分析
从上面的代码你可以看出什么规律?先等等向下翻,你先想一下。
你应该也发现了,其实这三个角色相当于三支笔,且每一只笔定义后都有抬笔的动作,都有各自的图标。
OK,根据这个特点,我们就可以做一个Python中令人“望而生畏”的类,
看代码:
#定义一个名为Pen的类,继承turtle库中画笔的功能
class Pen(turtle.Turtle):
#默认属性
def __init__(self, pic):
#调用父类属性
super().__init__()
#设置笔的图标
self.shape(pic)
#设置抬笔
self.penup()
#分别定义三个实例对象
wall = Pen('wall.gif')
box = Pen('o.gif')
player = Pen('p.gif')
二 类的定义和说明
现在,你应该能看懂上现代码的大部分内容了吧,
可以发现当有大量对象时,代码就简单很多了,(大概此刻你不是这样想的)
我再稍微解释一下。
1 类的定义
自定义函数我们使用 def , 自定义类的时候使用class;
函数和类的变量名命名规则,和变量一样,不过习惯把类的名字首字母大写,或者使用驼峰命名法来定义,如“YourName”;
2 继承
如果定义一个新的类,类名字后面的括号内可以是空的,所有的功能方法后面可以写。但是我们这个程序,第一行定义类后面括号内写的是turtle.Turtle,
就表示,当你定义好这个Pen的时候,他已经继承了turtle.Turtle所拥有的所有功能和方法。
3 __init__函数
每个类都有这个函数,函数内写的是所有对象都共同拥有的特点、属性。
比如这个程序,所有角色,都要设置抬笔、都要设置图标,
再比如,如果定义一个鸟的类,共同属性就包括:翅膀=有,腿的数量=2。
4 实例对象
程序中,wall、 box、 player都称为实例对象,也就是说他们都是一个类,对象名字分别为wall、 box、 player而已。
5 self
现在的你不用理解的太多,你暂时可以简单理解为:self表示每个对象自己的...
三 增加类定义后的源代码
下面的代码中,其实还定义了一个Game的类,也是在上一次程序的基础上更改,试试自己理解,理解完再动手打一下代码。
import turtle
win = turtle.Screen()
win.setup(650, 650, 200, 0)
win.title('推箱子小游戏')
win.bgcolor("yellow")
win.register_shape('wall.gif')
win.register_shape('o.gif')
win.register_shape('p.gif')
win.register_shape('box.gif')
class Pen(turtle.Turtle):
def __init__(self,pic):
super().__init__()
self.shape(pic)
self.penup()
class Game():
def show(self):
for i in range(8):
for j in range(8):
x = -175 + j*50
y = 175 - i*50
if level_1[i][j] == 'X':
wall.goto(x, y)
wall.stamp()
elif level_1[i][j] == 'O':
box.goto(x, y)
box.stamp()
elif level_1[i][j] == 'P':
player.goto(x, y)
elif level_1[i][j] == 'B':
box1 = Pen('box.gif')
box1.goto(x,y)
level_1 = [
' XXX ',
' XOX ',
' X XXXX',
'XXXB BOX',
'XO BPXXX',
'XXXXBX ',
' XOX ',
' XXX ']
wall = Pen('wall.gif')
box = Pen('o.gif')
player = Pen('p.gif')
game = Game()
game.show()
while True:
win.update()
win.mainloop()
最后,我精心筹备了一份全面的Python学习大礼包,完全免费分享给每一位渴望成长、希望突破自我现状却略感迷茫的朋友。无论您是编程新手还是希望深化技能的开发者,都欢迎加入我们的学习之旅,共同交流进步!
🌟 学习大礼包包含内容:
Python全领域学习路线图:一目了然,指引您从基础到进阶,再到专业领域的每一步学习路径,明确各方向的核心知识点。
超百节Python精品视频课程:涵盖Python编程的必备基础知识、高效爬虫技术、以及深入的数据分析技能,让您技能全面升级。
实战案例集锦:精选超过100个实战项目案例,从理论到实践,让您在解决实际问题的过程中,深化理解,提升编程能力。
华为独家Python漫画教程:创新学习方式,以轻松幽默的漫画形式,让您随时随地,利用碎片时间也能高效学习Python。
互联网企业Python面试真题集:精选历年知名互联网企业面试真题,助您提前备战,面试准备更充分,职场晋升更顺利。
👉 立即领取方式:只需【点击这里】,即刻解锁您的Python学习新篇章!让我们携手并进,在编程的海洋里探索无限可能



被折叠的 条评论
为什么被折叠?



