如何使用类在Python中初始化多个Turtle
我是Python的初学者,对Stack Exchange还不熟悉。我想写一个程序,让5只海龟在一个正方形内移动。我已经有了我想要的代码,但是它很乏味,我想用类来初始化我所有的海龟,而不是一个接一个地初始化。我只想让他们在随机坐标和随机航向开始 我的代码有以下问题:如何使用类在Python中初始化多个Turtle,python,class,turtle-graphics,Python,Class,Turtle Graphics,我是Python的初学者,对Stack Exchange还不熟悉。我想写一个程序,让5只海龟在一个正方形内移动。我已经有了我想要的代码,但是它很乏味,我想用类来初始化我所有的海龟,而不是一个接一个地初始化。我只想让他们在随机坐标和随机航向开始 我的代码有以下问题: 屏幕上只显示一只海龟。下面的代码中定义了两个 海龟的航向和坐标没有被初始化 以下是我尝试过的代码: import numpy as np from turtle import * # setting up screen rese
- 屏幕上只显示一只海龟。下面的代码中定义了两个
- 海龟的航向和坐标没有被初始化
import numpy as np
from turtle import *
# setting up screen
reset()
screensize(550)
Screen().bgcolor('black')
tracer(0)
# drawing box
t0 = Turtle()
t0.penup()
t0.goto(-256,-256)
t0.color('cyan')
t0.pendown()
for i in range(4):
t0.forward(512)
t0.left(90)
t0.ht()
# parameters
velocity = 5
iterations = 200
boxsize = 512
ranheader = np.random.random()*360
ranx = np.random.random()*boxsize
rany = np.random.random()*boxsize
class turtle_agents(Turtle):
def _init_(self):
self.up()
self.seth(ranheader)
self.setpos(ranx,rany)
self.velocity = velocity
self.down()
# turtle
t1 = turtle_agents()
t1.color('green')
t2 = turtle_agents()
t2.color('blue')
# turtle movement
for turtle in turtles():
for i in range(iterations):
turtle.forward(velocity)
if turtle.xcor() >= 256:
turtle.goto(-256,t0.ycor())
elif turtle.xcor() <= -256:
turtle.goto(256,t0.ycor())
elif turtle.ycor() >= 256:
turtle.goto(t0.xcor(),-256)
elif turtle.ycor() <= -256:
turtle.goto(t0.xcor(),256)
update()
exitonclick()
将numpy导入为np
从海龟进口*
#设置屏幕
重置()
屏幕尺寸(550)
Screen().bgcolor('黑色')
示踪剂(0)
#绘图箱
t0=海龟()
t0.penup()
t0.转到(-256,-256)
t0.颜色(“青色”)
t0.pendown()
对于范围(4)中的i:
t0.前进(512)
t0.左(90)
t0.ht()
#参数
速度=5
迭代次数=200
boxsize=512
ranheader=np.random.random()*360
ranx=np.random.random()*boxsize
rany=np.random.random()*boxsize
乌龟类代理(乌龟):
定义初始(自我):
self.up()
赛斯(兰希德)
self.setpos(ranx,rany)
自速度=速度
self.down()
#乌龟
t1=乌龟(乌龟)
t1.颜色(“绿色”)
t2=海龟(海龟)
t2.颜色(“蓝色”)
#海龟运动
对于海龟中的海龟():
对于范围内的i(迭代):
乌龟。前进(速度)
如果turtle.xcor()>=256:
turtle.goto(-256,t0.ycor())
elif turtle.xcor()=256:
goto(t0.xcor(),-256)
你应该考虑把你的海龟储存在<代码>清单>代码中,因为海龟已经是对象,你不需要创建一个类来移动它们到你的起始位置。Python中的列表功能非常强大,因为它们可以存储任意数据类型。在这里,我将创建5只海龟并移动它们,以便您可以区分它们:
import turtle
num_turtles = 5
my_turtles = [turtle.Turtle() for i in range(num_turtles)]
for i, turt in enumerate(my_turtles):
turt.forward(50 * i)
如果您想做同样的事情,只需将我的turt.forward()
行替换为您希望turtles做的任何事情即可。在你的情况下,进入你方块内的一个随机位置。 < P>你应该考虑将你的海龟存储在<代码>列表>代码中,因为海龟已经是对象,你不需要创建一个类来移动它们到你的起始位置。Python中的列表功能非常强大,因为它们可以存储任意数据类型。在这里,我将创建5只海龟并移动它们,以便您可以区分它们:
import turtle
num_turtles = 5
my_turtles = [turtle.Turtle() for i in range(num_turtles)]
for i, turt in enumerate(my_turtles):
turt.forward(50 * i)
如果您想做同样的事情,只需将我的turt.forward()
行替换为您希望turtles做的任何事情即可。在你的情况下,去一个随机的位置在你的广场
屏幕上只显示一只海龟。下面的代码中定义了两个。
海龟的航向和坐标没有被初始化
我相信问题在于你定义了一次随机位置和航向,在海龟创造循环之外,所以它们都从同一个地方开始,以相同的速度朝同一个方向移动。也就是说,它们正好在彼此的上面
我们不需要@BlivetWidget的显式List
来解决这个问题,因为正如您所发现的,海龟已经保存在一个列表中,我们可以通过屏幕的turtles()
方法来获取该列表。以下是我为修复各种问题而对您的代码进行的返工:
from turtle import Screen, Turtle
from random import randrange, randint
# parameters
COLORS = ['green', 'blue', 'red', 'orange', 'white']
ITERATIONS = 500
VELOCITY = 5
BOX_SIZE = 512
# setting up screen
screen = Screen()
screen.setup(BOX_SIZE + 50, BOX_SIZE + 50)
screen.bgcolor('black')
screen.tracer(False)
# drawing box
turtle = Turtle()
turtle.hideturtle()
turtle.color('cyan')
turtle.penup()
turtle.goto(-BOX_SIZE/2, -BOX_SIZE/2)
turtle.pendown()
for _ in range(4):
turtle.forward(BOX_SIZE)
turtle.left(90)
# turtle
for color in COLORS:
angle = randrange(360)
x = randint(-BOX_SIZE/2, BOX_SIZE/2)
y = randint(-BOX_SIZE/2, BOX_SIZE/2)
turtle = Turtle()
turtle.color(color)
turtle.setheading(angle)
turtle.penup()
turtle.setposition(x, y)
turtle.pendown()
# turtle movement
for _ in range(ITERATIONS):
for turtle in screen.turtles():
turtle.forward(VELOCITY)
x, y = turtle.position()
if x >= BOX_SIZE/2:
turtle.penup()
turtle.setx(-BOX_SIZE/2)
turtle.pendown()
elif x <= -BOX_SIZE/2:
turtle.penup()
turtle.setx(BOX_SIZE/2)
turtle.pendown()
elif y >= BOX_SIZE/2:
turtle.penup()
turtle.sety(-BOX_SIZE/2)
turtle.pendown()
elif y <= -BOX_SIZE/2:
turtle.penup()
turtle.sety(BOX_SIZE/2)
turtle.pendown()
screen.update()
screen.exitonclick()
从海龟导入屏幕,海龟
从随机导入randrange,randint
#参数
颜色=[“绿色”、“蓝色”、“红色”、“橙色”、“白色”]
迭代次数=500次
速度=5
盒子大小=512
#设置屏幕
screen=screen()
屏幕设置(框大小+50,框大小+50)
screen.bgcolor('黑色')
屏幕跟踪(假)
#绘图箱
海龟
乌龟
海龟颜色('cyan')
乌龟
海龟。转到(-BOX_大小/2,-BOX_大小/2)
乌龟
对于范围(4)内的uu:
乌龟。向前(盒子大小)
乌龟。左(90)
#乌龟
对于颜色中的颜色:
角度=随机范围(360)
x=randint(-BOX\u SIZE/2,BOX\u SIZE/2)
y=randint(-BOX\u SIZE/2,BOX\u SIZE/2)
海龟
海龟。颜色(颜色)
乌龟.设置航向(角度)
乌龟
海龟。设定位置(x,y)
乌龟
#海龟运动
对于范围内的(迭代):
对于屏幕中的海龟。海龟()
乌龟。前进(速度)
x、 y=海龟位置()
如果x>=框大小/2:
乌龟
海龟。setx(-BOX_大小/2)
乌龟
elif x=盒子尺寸/2:
乌龟
乌龟.刚毛(-2号箱)
乌龟
艾利夫y
屏幕上只显示一只海龟。下面的代码中定义了两个。
海龟的航向和坐标没有被初始化
我相信问题在于你定义了一次随机位置和航向,在海龟创造循环之外,所以它们都从同一个地方开始,以相同的速度朝同一个方向移动。也就是说,它们正好在彼此的上面
我们不需要@BlivetWidget的显式List
来解决这个问题,因为正如您所发现的,海龟已经保存在一个列表中,我们可以通过屏幕的turtles()
方法来获取该列表。以下是我为修复各种问题而对您的代码进行的返工:
from turtle import Screen, Turtle
from random import randrange, randint
# parameters
COLORS = ['green', 'blue', 'red', 'orange', 'white']
ITERATIONS = 500
VELOCITY = 5
BOX_SIZE = 512
# setting up screen
screen = Screen()
screen.setup(BOX_SIZE + 50, BOX_SIZE + 50)
screen.bgcolor('black')
screen.tracer(False)
# drawing box
turtle = Turtle()
turtle.hideturtle()
turtle.color('cyan')
turtle.penup()
turtle.goto(-BOX_SIZE/2, -BOX_SIZE/2)
turtle.pendown()
for _ in range(4):
turtle.forward(BOX_SIZE)
turtle.left(90)
# turtle
for color in COLORS:
angle = randrange(360)
x = randint(-BOX_SIZE/2, BOX_SIZE/2)
y = randint(-BOX_SIZE/2, BOX_SIZE/2)
turtle = Turtle()
turtle.color(color)
turtle.setheading(angle)
turtle.penup()
turtle.setposition(x, y)
turtle.pendown()
# turtle movement
for _ in range(ITERATIONS):
for turtle in screen.turtles():
turtle.forward(VELOCITY)
x, y = turtle.position()
if x >= BOX_SIZE/2:
turtle.penup()
turtle.setx(-BOX_SIZE/2)
turtle.pendown()
elif x <= -BOX_SIZE/2:
turtle.penup()
turtle.setx(BOX_SIZE/2)
turtle.pendown()
elif y >= BOX_SIZE/2:
turtle.penup()
turtle.sety(-BOX_SIZE/2)
turtle.pendown()
elif y <= -BOX_SIZE/2:
turtle.penup()
turtle.sety(BOX_SIZE/2)
turtle.pendown()
screen.update()
screen.exitonclick()
从海龟导入屏幕,海龟
从随机导入randrange,randint
#参数
颜色=[“绿色”、“蓝色”、“红色”、“橙色”、“白色”]
迭代次数=500次
速度=5
盒子大小=512
#设置屏幕
screen=screen()
屏幕设置(框大小+50,框大小+50)
screen.bgcolor('黑色')
屏幕跟踪(假)
#绘图箱
海龟
乌龟
海龟颜色('cyan')
乌龟
海龟。转到(-BOX_大小/2,-BOX_大小/2)
乌龟
对于范围(4)内的uu:
乌龟。向前(盒子大小)
乌龟。左(90)
#乌龟
对于颜色中的颜色:
角度=随机范围(360)
x=randint(-BOX\u SIZE/2,BOX\u SIZE/2)
y=randint(-BOX\u SIZE/2,BOX\u SIZE/2)
海龟
海龟。颜色(颜色)
乌龟.设置航向(角度)