为什么追踪者要用Python制作另一只海龟
所以,我正在使用Python的海龟模块制作一个塔防游戏,我刚刚开始。但出于某种原因,.tracer在一开始就为我创建了一个额外的海龟。我不知道为什么。我有3个职业,到目前为止,我只定义了4个精灵:助手,敌人,敌人。当我取下跟踪器时,海龟突然消失了。我访问了我的海龟列表并开始删除它们。那没用。代码如下:为什么追踪者要用Python制作另一只海龟,python,python-turtle,Python,Python Turtle,所以,我正在使用Python的海龟模块制作一个塔防游戏,我刚刚开始。但出于某种原因,.tracer在一开始就为我创建了一个额外的海龟。我不知道为什么。我有3个职业,到目前为止,我只定义了4个精灵:助手,敌人,敌人。当我取下跟踪器时,海龟突然消失了。我访问了我的海龟列表并开始删除它们。那没用。代码如下: import turtle as t import random as r wn = t.Screen() wn.tracer(0) class Sprite(): def __init
import turtle as t
import random as r
wn = t.Screen()
wn.tracer(0)
class Sprite():
def __init__(self, color, speed, shape, ento, x, y):
self.sprite = t.Turtle()
self.color = color
self.speed = speed
self.shape = shape
self.ento = ento
self.x = x
self.y = y
def render(self, pen):
pen.speed(0)
pen.color(self.color)
pen.shape(self.shape)
pen.up()
pen.goto(self.x, self.y)
class Helper(Sprite):
def __init__(self, color, speed, damage, shape, x, y):
self.sprite = Sprite(color, speed, shape, 'Helper', x, y)
self.helper = t.Turtle()
self.color = color
self.speed = speed
self.shape = shape
self.ento = 'Helper'
self.damage = damage
self.x = x
self.y = y
def fire(self):
pass
class Enemy(Sprite):
def __init__(self, color, speed, health, shape, x, y):
self.sprite = Sprite(color, speed, shape, 'Enemy', x, y)
self.enemy = t.Turtle()
self.color = color
self.speed = speed
self.shape = shape
self.ento = 'Enemy'
self.health = health
self.x = x
self.y = y
self.state = 'frozen'
self.tick = 0
def move(self):
if self.state == 'frozen':
self.state = 'moving'
self.tick = 0
self.enemy.forward(self.speed)
self.x = self.enemy.xcor()
self.y = self.enemy.ycor()
self.tick += 1
helpers = []
for i in range(1):
test = Helper('green', 1, 1, 'square', 0, 0)
enemies = []
for i in range(3):
enemies.append(Enemy('red', 1, 1, 'circle', r.randint(-100, 100), r.randint(-100, 100)))
print(wn._turtles)
while True:
wn.update()
test.render(test.helper)
for enemy in enemies:
enemy.render(enemy.enemy)
enemy.move()
为什么这不起作用。我在windows电脑上工作。我不确定这是否只适用于我还是适用于所有人。您的目标代码是一场灾难。考虑这个逻辑:
class Sprite():
def __init__(self, color, speed, shape, ento, x, y):
self.sprite = t.Turtle()
#...
class Helper(Sprite):
def __init__(self, color, speed, damage, shape, x, y):
self.sprite = Sprite(color, speed, shape, 'Helper', x, y)
Helper
是一个Sprite
,但它不调用super()
,而是在Sprite
创建的海龟所在的位置有一个Sprite
?我迷路了。我认为我们需要使代码面向对象,而不是简单地基于对象:
这种代码清理似乎也解决了额外的海龟问题。我把speed
改名为pace
,以防止它与海龟自己的speed
方法混淆
from turtle import Screen, Turtle
from random import randint
class Sprite(Turtle):
def __init__(self, color, pace, shape, ento, x, y):
super().__init__()
self.color(color)
self.shape(shape)
self.penup()
self.pace = pace
self.ento = ento
self.x = x
self.y = y
def render(self):
self.goto(self.x, self.y)
class Helper(Sprite):
def __init__(self, color, pace, damage, shape, x, y):
super().__init__(color, pace, shape, 'Helper', x, y)
self.damage = damage
def fire(self):
pass
class Enemy(Sprite):
def __init__(self, color, pace, health, shape, x, y):
super().__init__(color, pace, shape, 'Enemy', x, y)
self.health = health
self.state = 'frozen'
self.tick = 0
def move(self):
if self.state == 'frozen':
self.state = 'moving'
self.tick = 0
self.forward(self.pace)
self.x = self.xcor()
self.y = self.ycor()
self.tick += 1
screen = Screen()
screen.tracer(0)
helpers = []
for _ in range(1):
helpers.append(Helper('green', 1, 1, 'square', 0, 0))
enemies = []
for _ in range(3):
enemies.append(Enemy('red', 1, 1, 'circle', randint(-100, 100), randint(-100, 100)))
while True:
helpers[0].render()
for enemy in enemies:
enemy.render()
enemy.move()
screen.update()