python - 如何自动生成 Turtle 对象?
问题描述
我想生成(a)
相同数量的 RawTurtle 对象,同时分别命名。这似乎应该是可行的,但我不知道如何。
这是我的代码:
def spawnEntity(a):
for x in range(0, a):
global entity
spawnpt = (rand.randrange(-(cWidth/2), cWidth/2), rand.randrange(-(cHeight/2), cHeight/2))
entName = (f'entity{x}')
def entGenerate(a):
print(a)
(f'{a}') = turtle.RawTurtle(screen)
(f'{a}').shape("square")
(f'{a}').speed("fastest")
(f'{a}').penup()
(f'{a}').pencolor("gray")
(f'{a}').fillcolor("gray")
(f'{a}').setpos(spawnpt)
print(a)
entGenerate(entName)
entList = []
entList.append(entName)
proportion = (16, 9)
cWidth = (proportion[0] * 80)
cHeight = (proportion[1] * 80)
root = Tk()
root.title("Shooter Game")
canvas = Canvas(master=root, width=cWidth, height=cHeight)
canvas.grid(row=1, column=1)
screen = turtle.TurtleScreen(canvas)
spawnEntity(4)
root.mainloop()
更新:问题解决了!下面的新代码相互独立地运行所有 4 个海龟(又名:“实体”),同时仍然能够在for
循环下全部调用:
def spawnEntity(a):
global ent, entity
ent = (a)
entity = {num: turtle.RawTurtle(screen) for num in range(ent)}
for i in range(ent):
spawnpt = (rand.randrange(-(cWidth/2.5), cWidth/2.5), rand.randrange(-(cHeight/2.5), cHeight/2.5))
entity[i].shape("square")
entity[i].speed("fastest")
entity[i].penup()
entity[i].pencolor("gray")
entity[i].fillcolor("gray")
entity[i].setpos(spawnpt)
解决方案
您可以使用dict
:
import turtle
a = 10
turtles = {num: turtle.Turtle for num in range(a)}
现在,每当您想调用特定的海龟时,都可以像这样使用字典:
turtles[1].forward(100)
以上是这样做的方法,但你知道,有一种方法可以为每只海龟制作单独的变量,但这会很危险。您可以使用locals
或exec
。
对于locals
:
import turtle
a = 10
for num in range(a):
locals()[f"turt{num}"] = turtle.Turtle()
turt1.forward(100)
对于exec
:
import turtle
a = 10
for num in range(a):
exec(f"turt{num} = turtle.Turtle()")
turt1.forward(100)
如果你想调用一个特定的海龟做某事使用它的字符串名称,你可以使用eval
:
eval("turt1.forward(100)")
请记住,上面的代码是DANGEROUS,原因如下:
推荐阅读
- flask-sqlalchemy - Flask 数据库 - 在类中添加图像作为默认值
- flutter - 锁滑向上颤振
- python - 使用 Python 在 PDF 中读取和写入 6000 页需要数小时
- azure - 从 azure 函数调用 azure 服务总线时如何解决 provider is null 错误
- google-apps-script - Google App 脚本:创建唯一的 RefNo,未从受保护的工作表中正确写入递增的新 refno,无法将前导零添加到 RefNo
- python - 如何删除图像opencv Python中的垂直线
- c++ - 将形状旋转到 1 到 2 弧度之间的任何位置都会重置其旋转
- angularjs - AngularJS 捕获图像网络摄像头
- c++14 - 我不明白“i”代表for循环内的索引
- google-tag-manager - 如何在 Google 跟踪代码管理器中为表单中的按钮构建触发器?