使用 python 类 (OOP) 创建 FUNCTIONAL turtle 对象?
Using python classes (OOP) to create FUNCTIONAL turtle objects?
我目前正在 python 编写代码,以创建与 'Space Invaders' 有点相似的游戏。
一切顺利,直到我尝试使用 class 来制作我所有的入侵者对象(它们是海龟),这样我就可以在调整难度时轻松地控制我想要的敌人数量。
但是现在我已经完成了这个,我已经删除了 TURTLE 对象的功能,因为它们现在被视为 CLASS OBJECTS。因此,我不能使用 turtle 模块功能,例如 [object].xcor
和 [object].ycor
,这些功能有些重要。
这是使对象 class 的代码:
class invaders():
def __init__(self, speed, position):
self = turtle.Turtle() # how I thought I could make them turtle objects (didn't work)
self.color('red')
self.shape('circle')
self.up()
self.setposition(position)
self.speed(speed)
def change_speed(newSpeed):
invader.speed(newSpeed) # use to make new speed if changing difficulty #variable.changeSpeed(newSpeed)
def change_position(x, y):
invader.setposition(x, y)
我还在下面附上了一张照片,所以你可以看到我所说的两个物体之间的区别。
Self = turtle.Turtle()
应该是 self.turtle = turtle.Turtle()
感谢@Stack
对象可以包含另一个class实例或者对象可以是(subclass) 另一个 class 的实例。您最初描述和尝试的是 subclassing,您最终选择的是 contain。这是一个 (Python3) 示例,说明我们如何通过子class 海龟来制造入侵者:
from turtle import Turtle, Screen
class Invader(Turtle):
def __init__(self, speed, position):
super().__init__(shape='circle', visible=False)
self.color('red')
self.penup()
self.setposition(position)
self.speed(speed)
self.showturtle()
def change_speed(self, newSpeed):
self.speed(newSpeed)
def change_position(self, x, y):
self.setposition(x, y)
invader = Invader('slowest', (100, 100))
invader.change_position(-100, -100)
invader.change_speed('fastest')
invader.pendown() # try an original turtle method
invader.change_position(100, -100)
screen = Screen()
screen.exitonclick()
现在当我们创建一个入侵者实例时,它会这样描述自己:
>>> fred = Invader("normal", (0, 0))
>>> fred
<__main__.Invader object at 0x1021784e0>
>>>
实际上,你可以直接使用self.turtle.color("red")来访问海龟的颜色属性。
我目前正在 python 编写代码,以创建与 'Space Invaders' 有点相似的游戏。 一切顺利,直到我尝试使用 class 来制作我所有的入侵者对象(它们是海龟),这样我就可以在调整难度时轻松地控制我想要的敌人数量。
但是现在我已经完成了这个,我已经删除了 TURTLE 对象的功能,因为它们现在被视为 CLASS OBJECTS。因此,我不能使用 turtle 模块功能,例如 [object].xcor
和 [object].ycor
,这些功能有些重要。
这是使对象 class 的代码:
class invaders():
def __init__(self, speed, position):
self = turtle.Turtle() # how I thought I could make them turtle objects (didn't work)
self.color('red')
self.shape('circle')
self.up()
self.setposition(position)
self.speed(speed)
def change_speed(newSpeed):
invader.speed(newSpeed) # use to make new speed if changing difficulty #variable.changeSpeed(newSpeed)
def change_position(x, y):
invader.setposition(x, y)
我还在下面附上了一张照片,所以你可以看到我所说的两个物体之间的区别。
Self = turtle.Turtle()
应该是 self.turtle = turtle.Turtle()
感谢@Stack
对象可以包含另一个class实例或者对象可以是(subclass) 另一个 class 的实例。您最初描述和尝试的是 subclassing,您最终选择的是 contain。这是一个 (Python3) 示例,说明我们如何通过子class 海龟来制造入侵者:
from turtle import Turtle, Screen
class Invader(Turtle):
def __init__(self, speed, position):
super().__init__(shape='circle', visible=False)
self.color('red')
self.penup()
self.setposition(position)
self.speed(speed)
self.showturtle()
def change_speed(self, newSpeed):
self.speed(newSpeed)
def change_position(self, x, y):
self.setposition(x, y)
invader = Invader('slowest', (100, 100))
invader.change_position(-100, -100)
invader.change_speed('fastest')
invader.pendown() # try an original turtle method
invader.change_position(100, -100)
screen = Screen()
screen.exitonclick()
现在当我们创建一个入侵者实例时,它会这样描述自己:
>>> fred = Invader("normal", (0, 0))
>>> fred
<__main__.Invader object at 0x1021784e0>
>>>
实际上,你可以直接使用self.turtle.color("red")来访问海龟的颜色属性。