使用python类(OOP)创建FUNCTIONAL龟对象?

问题描述 投票:0回答:2

我目前正在使用python编写一个与“太空入侵者”有点相似的游戏。直到我试图通过使用一个类来制作我的所有入侵物(它们都是海龟),这一直很顺利,因此当我调整难度时,我可以很容易地操纵我想要的敌人数量。

但是现在我已经这样做了,我已经删除了TURTLE对象的功能,因为它们现在被视为CLASS OBJECTS。因此我不能使用tazxswpoi和[object].xcor等龟模块功能,这些功能在某种程度上是必不可少的。

以下是制作对象类的代码:

[object].ycor

我还在下面附上了一张照片,这样你就可以看到我正在谈论的两个物体之间的区别。

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)

python class object tkinter turtle-graphics
2个回答
1
投票

对象可以包含另一个类实例,或者对象可以是(子类)另一个类的实例。你最初描述和尝试的是子类化,你所解决的是包含。这是一个(Python3)示例,说明我们如何将turtle子类化为一个入侵者:

the errors underneath the text aren't relevant

现在,当我们创建一个入侵者实例时,它将自己描述为:

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()

0
投票

>>> fred = Invader("normal", (0, 0)) >>> fred <__main__.Invader object at 0x1021784e0> >>> 应该是Self = turtle.Turtle()

谢谢@Stack

© www.soinside.com 2019 - 2024. All rights reserved.