我正在制作乌龟过街游戏,遇到了一个我不知道如何解决的问题。我在这里阅读了几个有关类似问题的主题,但由于我使用的是常量列表,因此它们并没有真正帮助我的特定情况,因此 random.shuffle() 选项对我不起作用。
这是有问题的课程:
from turtle import Turtle
import random
COLORS = ["red", "orange", "yellow", "green", "blue", "purple"]
STARTING_MOVE_DISTANCE = random.randint(3, 6)
MOVE_INCREMENT = 2
CAR_LANES_BOTTOM = [-220, -190, -160, -130, -100, -70, -40]
CAR_LANES_TOP = [40, 70, 100, 130, 160, 190, 220]
class CarManager:
def __init__(self):
self.bottom_cars = []
self.top_cars = []
def create_car_bottom(self):
random_chance = random.randint(1, 20)
if random_chance == 1:
new_car = Turtle('square')
new_car.shapesize(stretch_wid=1, stretch_len=2)
new_car.penup()
new_car.color(random.choice(COLORS))
random_lane = random.choice(CAR_LANES_BOTTOM)
new_car.goto(300, random_lane)
self.bottom_cars.append(new_car)
def create_car_top(self):
random_chance = random.randint(1, 20)
if random_chance == 1:
new_car = Turtle('square')
new_car.shapesize(stretch_wid=1, stretch_len=2)
new_car.penup()
new_car.color(random.choice(COLORS))
random_lane = random.choice(CAR_LANES_TOP)
new_car.goto(-300, random_lane)
self.top_cars.append(new_car)
def move_left(self):
for car in self.bottom_cars:
car.backward(random.randint(3, 6))
def move_right(self):
for car in self.top_cars:
car.forward(random.randint(3, 6))
我经常让汽车在同一条车道上生成,而且它们重叠,所以我想找到一种方法以某种方式减少重复。
我尝试过使用时间或增加 random_chance 范围,但它并没有真正影响最终结果。经过所有测试后,我得出的结论是,唯一的选择是以某种方式确保这一点:
random_lane = random.choice(CAR_LANES_BOTTOM)
不重复车道,但考虑到列表是恒定的,我不知道该怎么做。 我会感激任何适合像我这样的初学者的想法。
您可以使用 while 循环操作随机元素。如果您不想从列表中获取相同的元素,您可以创建一个 1 元素列表作为used_coord,并且该元素不应位于 CAR_LANES_BOTTOM 中。
之后,您可以获得随机值并检查used_coord的最后一个元素是否与您的random_coord匹配,选择另一个坐标直到它们不匹配。它可以帮助您避免连续获得相同的坐标。您可以将此代码改编到您的代码中。此代码的工作原理只是不从连续列表中获取元素。希望对您有帮助。
示例代码:
used_coord = [1]
while(True):
random_cord = random.choice(CAR_LANES_BOTTOM)
try :
if used_coord[-1] != random_cord:
used_coord.append(random_cord)
break
except :
print("Some Error")