用turtle学Python:推箱子游戏竟然这么简单(第二部分 类)

我们接着上次的文章继续做推箱子的程序,一个能让你快速掌握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所拥有的所有功能和方法。

__init__函数

每个类都有这个函数,函数内写的是所有对象都共同拥有的特点、属性。
比如这个程序,所有角色,都要设置抬笔、都要设置图标,
再比如,如果定义一个鸟的类,共同属性就包括:翅膀=有,腿的数量=2。

4 实例对象

程序中,wall、 box、 player都称为实例对象,也就是说他们都是一个类,对象名字分别为wall、 box、 player而已。

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学习新篇章!让我们携手并进,在编程的海洋里探索无限可能

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值