他来了他来了!!!经过几天面向对象的继续学习,感觉自己懂了不少面向对象的知识,并且通过学习麦叔面向对象的课程,自己也动手实现了“麦叔迷宫”。接下来总结下面向对象这部分知识,然后加上“麦叔迷宫”自己写的代码。
面向对象(Object Oriented Programming)
面向对象中几个重要的概念应该就是类、实例(对象)、属性、方法。
什么是类,其实就是一些事物共有的特征(一些实体的共性);实例就是具体的实物,他们出了来自同一个类,具有类的共同特征外,他们还有自己的独有的特征(实例的个性);类和实例都具有属性和方法,类不可以访问实例的属性和方法(未实例化的属性和方法是未知的),而实例却可以访问类的属性和方法。比如以前做月饼的时候是有模子的,这就是类,通过这个模子做出来的月饼都是这个样子,但是你把月饼做出来后可以在上面撒上自己喜欢的果酱了、调料了等,这就是实例化,他们有类的特则,同时也有自己的个性(不同的口味)。
定义类的框架
我喜欢说框架的部分,说半天肯定不好理解,但结合代码会看懂很多。
init()函数(构造函数)表示实例化后就自动调用的函数,其中除了self,其他参数必须在实例化时加入,否则会出错。同时也可以在构造函数中加入一些初始的属性,已便下面函数的共同调用。
当实例属性与类属性同名时,优先调用实例属性。所以修改类属性时得用类去修改,而不是实例去修改,因为实例去修改时仅仅是为该实例增加了一个与类属性同名的属性,并没有实质性的改变类属性。类修改:Dog.string = ‘1111’, 实例增加属性:d1.string=‘2222’
麦叔迷宫-面向对象
上代码,需要知道的知识点很多。写了两遍下来,有很多功能还没实现,比如Devil的移动不能出游戏边界,通往下一关等,主要还有一点就是对turtle库不了解,好多api还得查查怎么用。不过自己总算是完整的撸下来了,证明还是有一定基础了。
import turtle as t
import random
import time
mz = t.Screen()
mz.setup(700, 700)
mz.bgcolor('#A0522D')
mz.title('一个小游戏')
mz.register_shape('wall.gif')
mz.register_shape('pr.gif')
mz.register_shape('pl.gif')
mz.register_shape('e.gif')
mz.register_shape('gold.gif')
mz.tracer(0)
level_1 = [
"XXXXXXXXXXXXXXXXXXXXXXXXX",
"XXX XXXXXX XXXXXXXXXXX",
"XXX XXXXXXXP XXXXXXXXXXX",
"XXX XXXXXXX XXXXXXXXXXX",
"XXX XXXX",
"XXX XX XXXX XXXXX XXXX",
"XXX XXGXXXX XXXXXE EXX",
"XXX XXXXXXX XXXXX XXX",
"XXX XXXXXXX XXXXX XX",
"XX XX",
"XXXX XXXXXX XXXX XXXX",
"XXXX XXXXXX XXXXXXXXXXX",
"XXXXE XXX XXXX",
"XXXXXXX XEXXXX XXXXXXXX",
"XXXXXXXX XXXXXX GXXXXXX",
"XXXXXXX XXXXXX XXEXXXXX",
"XX XXXXXXXX",
"XX XX XXXXXXXXXXXXXXXX",
"XX XX X X",
"XX XXXXXXXXXXXXX XXXXX",
"XX XXXXXGXXXXX XXXXX",
"XX XXXX X",
"XXXX X",
"XXXXXXXXXXXXXXXXXXXXXXXXX"
]
class Player(t.Turtle):
def __init__(self):
super().__init__()
self.penup()
self.speed(0)
self.shape('pr.gif'