Как изменить / получить значение прямоугольника в цикле while в Pygame - PullRequest
1 голос
/ 08 мая 2019

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

Я попытался установить цвет как переменную вне цикла while, но он только один раз случайным образом выбирает цвет из списка и больше не меняется.

1 Ответ

1 голос
/ 08 мая 2019

Список прямоугольников недостаточен.Вам также нужен список цветов.

colors = [red,green,blue]
colorChoice = random.choice(colors)
player = pygame.Rect(x,y,width,height)
copylist = []
colorList = []

Каждый раз, когда появляется новый блок, тогда текущий цвет должен добавляться в список цветов, а текущий прямоугольник должен добавляться в блок.список.Кроме того, должен быть установлен новый случайный цвет.
Создайте функцию, которая выполняет работу, и используйте оператор global для установки переменных в глобальной области видимости:

def newBlock():
   global player, copylist, colorList, colorChoice

   copylist.append(player.copy())
   colorList.append(colorChoice)
   player.y = 50 
   colorChoice = random.choice(colors)

Вызовите newBlock, чтобы создать новый блок и нарисовать блок ech его цветом:

while run:    

    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            run = False
        elif event.type == moveDownEvent:
            if player.y >= 390 or player.move(0, vel).collidelist(copylist) >= 0:
                newBlock() # <--- spawn new block
            else:
                player.y += vel
    keys = pygame.key.get_pressed()
    if keys[pygame.K_LEFT] and player.x > 168 and player.move(-vel, 0).collidelist(copylist) < 0:
        player.x -= vel
    if keys[pygame.K_RIGHT] and player.x < 330 and player.move(vel, 0).collidelist(copylist) < 0:
        player.x += vel
    if keys[pygame.K_DOWN] and player.y < 390:
        if player.move(0, vel).collidelist(copylist) >= 0:
            newBlock() # <--- spawn new block
        else:
            player.y += vel

    win.fill((128,128,128))

    pygame.draw.line(win,(0,0,0),(148,100),(148,410),2)
    pygame.draw.line(win,(0,0,0),(350,100),(350,410),2)
    pygame.draw.line(win,(0,0,0),(148,410),(350,410),2)

    for i in range(len(copylist)):    
        pygame.draw.rect(win, colorList[i], copylist[i]) # <--- draw block with its color

    pygame.draw.rect(win, colorChoice, player)
    pygame.display.update()
    clock.tick(24)
pygame.quit()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...