随机化位置后如何自动移动对象
How to automatically move object after randomizing its position
我的目标是让红框从它们生成的随机位置沿直线向下移动。但到目前为止发生的情况是每个红色框都在向下移动,但并不像我想要的那样连续移动。我尝试以某种方式使用 enumerate 函数,但它似乎没有什么不同。
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()
问题是您一次处理的不是 个盒子,而是一个盒子。以下是创建和操作多个框的代码的返工:
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()
这和你做的不完全一样,只是多个海龟平滑运动的例子。
我的目标是让红框从它们生成的随机位置沿直线向下移动。但到目前为止发生的情况是每个红色框都在向下移动,但并不像我想要的那样连续移动。我尝试以某种方式使用 enumerate 函数,但它似乎没有什么不同。
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()
问题是您一次处理的不是 个盒子,而是一个盒子。以下是创建和操作多个框的代码的返工:
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()
这和你做的不完全一样,只是多个海龟平滑运动的例子。