Как заставить всех черепах двигаться одновременно - PullRequest
1 голос
/ 16 июня 2020

Я хочу переместить всех черепах одновременно, и я хочу иметь возможность создать 100 черепах. Я должен создать каждый из них отдельно в коде, поэтому создание сотен или более из них займет много времени. Мне нужен способ установить необходимое количество черепах - от 100 и выше. И я хочу, чтобы они двигались одновременно. Я также хотел бы установить границу для. Мы будем благодарны за любые идеи о том, как сделать что-либо из этого или всего этого.

В заключение, я хочу иметь возможность:

  • Установить количество сгенерированных черепах.
  • Перемещайте все сразу, а не по одному.
  • Установите границу, чтобы она не могла go никуда.

Примечание: я также знаю, что есть была задана пара вопросов, но не было дано эффективного ответа. Мой код:

import turtle
import numpy as np

tlist = list()
colorlist = ["red", "green", "black", "blue", "brown"]
for i in range(5):
    tlist.append(turtle.Turtle(shape="turtle"))
    tlist[i].color(colorlist[i])
    tlist[i].speed(1)
screen = turtle.getscreen()
for i in range(30):

    for t in tlist:
        t.speed(1)
        t.right((np.random.rand(1) - .5) * 180)
        t.forward(int((np.random.rand(1) - .5) * 100))
    screen.update() 

1 Ответ

0 голосов
/ 16 июня 2020

Вам не нужен «один умный человек здесь», чтобы решить эту проблему, вам нужно тратить больше времени на поиск множества примеров черепах на SO. Тем не менее, я возьму это на себя как личную задачу - написать минималистичный код, чтобы привести 100 черепах в ограниченное случайное движение:

from turtle import Screen, Turtle
from random import randint

WIDTH, HEIGHT = 600, 600
CURSOR_SIZE, TURTLE_SIZE = 20, 10
TURTLES = 100

def move():
    for turtle in screen.turtles():
        turtle.forward(1)
        x, y = turtle.position()

        if not (TURTLE_SIZE - WIDTH/2 < x < WIDTH/2 - TURTLE_SIZE and TURTLE_SIZE - HEIGHT/2 < y < HEIGHT/2 - TURTLE_SIZE):
            turtle.undo()  # undo forward()
            turtle.setheading(randint(1, 360))  # change heading for next iteration

    screen.update()
    screen.ontimer(move)

screen = Screen()
screen.tracer(False)
screen.setup(WIDTH, HEIGHT)

for turtle in range(TURTLES):
    turtle = Turtle()
    turtle.penup()
    turtle.shapesize(TURTLE_SIZE / CURSOR_SIZE)
    turtle.shape('turtle')
    turtle.setheading(randint(1, 360))
    turtle.goto(randint(TURTLE_SIZE - WIDTH/2, WIDTH/2 - TURTLE_SIZE), randint(TURTLE_SIZE - HEIGHT/2, HEIGHT/2 - TURTLE_SIZE))

move()

screen.exitonclick()

enter image description here

...