如何自动生成海龟对象?

2024-10-01 15:43:13 发布

您现在位置:Python中文网/ 问答频道 /正文

我想生成(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个Turtle(也称为“实体”),同时仍然能够在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)

Tags: infordefrangerootentityrandrangerand
1条回答
网友
1楼 · 发布于 2024-10-01 15:43:13

您可以使用dict

import turtle

a = 10
turtles = {num: turtle.Turtle for num in range(a)}

现在,无论何时你想叫一只特定的乌龟,你都可以像这样使用字典:

turtles[1].forward(100)



上面是这样做的方法,但是正如你所知道的,有一种方法可以为每只海龟创建单独的变量,但是这是非常危险的。您可以使用localsexec

对于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)

如果您想调用一个特定的turtle来做一些事情,请使用它的字符串名,您可以使用eval

eval("turt1.forward(100)")

请记住,上述代码是危险的,原因如下:

相关问题 更多 >

    热门问题