Как автоматически перемещать объект после рандомизации его положения - PullRequest
0 голосов
/ 12 февраля 2020

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

import sys
import random
import time
import turtle
import pygame

wn = turtle.Screen()
wn.bgcolor ("black")
wn.setup (width=800, height=600)

droid_box = turtle.Turtle()
droid_box.speed (0)
droid_box.shape ("square")
droid_box.color ("red")
droid_box.shapesize (stretch_wid = 1, stretch_len = 1)
droid_box.penup()

droid_pos = [random.randint (-401, 401),300]
droid_list = [droid_pos]

def update_droid_position(droid_list):
    for z, droid_pos in enumerate(droid_list):
        if droid_pos[0] >= -400 and droid_pos[1] <= 300:
            droid_pos[1] += droid_box.dy


for i in range(-401, 401):
    droid_pos = [random.randint (-401, 401),300]
    droid_list = [droid_pos]
    droid_box.goto(droid_pos)
    droid_box.dx = 0
    droid_box.dy = -15
    droid_box.setx(droid_box.xcor()+ droid_box.dx)
    droid_box.sety(droid_box.ycor()+ droid_box.dy)
    droid_list.append([droid_box.xcor(), droid_box.ycor()])
    time.sleep(1)

while True:
    wn.update()

1 Ответ

0 голосов
/ 12 февраля 2020

Проблема в том, что вы имеете дело не с ящиками , а с одним ящиком за раз. Ниже доработка вашего кода, который создает и манипулирует несколькими блоками:

from random import randint
from turtle import Screen, Turtle

CURSOR_SIZE = 20

DX, DY = 25, 10
DROID_COUNT = 33
WIDTH, HEIGHT = 800, 600

def update_droid_positions(droid_list):
    moved_any = False

    for droid in droid_list:
        if droid.ycor() > CURSOR_SIZE - HEIGHT/2:
            droid.setposition(droid.xcor() + randint(-DX, DX), droid.ycor() - DY)
            moved_any = True

    return moved_any

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

droid_list = []

def move():
    if len(droid_list) < DROID_COUNT:
        droid = Turtle()
        droid.hideturtle()
        droid.shape('square')
        droid.color('white', 'red')
        droid.penup()
        droid.setposition(randint(-WIDTH/2, WIDTH/2), HEIGHT/2)
        droid.showturtle()
        droid_list.append(droid)

    if update_droid_positions(droid_list):
        screen.ontimer(move, 100)

    screen.update()

move()

screen.mainloop()

Это не совсем то же самое, что вы делали, просто пример плавного движения нескольких черепах.

...