Привет, я хочу сделать игру с ромбом, что я хочу исправить, так это то, что я установил часы на XY, и в то время как истинные циклы у меня есть функция с одним построенным мне кубом image

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

Мой код:

import pygame as pg
import random
pg.init()
screen = pg.display.set_mode((500, 800))
clock = pg.time.Clock()
BG_COLOR = pg.Color('black')
WHITE = pg.Color('white')
ORANGE = pg.Color('orange')
BLUE = pg.Color('blue')
RED = pg.Color('red')
PURPLE = pg.Color('purple')
m = 8
def rhumbus(screen,color,plus):
    point1=(170, 500-plus)
    point2=(350, 500-plus)
    point3=(300, 550-plus)
    point4=(120, 550-plus)
    points=[point1, point2, point3, point4]
    return pg.draw.polygon(screen,color, points)

def cube(rando):
    plus = -72
    old_col = None
    for x in range(0,10):
        rando = random.choice([RED,ORANGE,RED,BLUE,WHITE])
        if rando != old_col:

            rhumbus(screen,rando,plus)
            plus += 8
            old_col = rando
        else:
            rhumbus(screen,PURPLE,plus)
            plus += 8
            old_col = rando

done = False
while not done:
    for event in pg.event.get():
        if event.type == pg.QUIT:
            done = True
    
    screen.fill(BG_COLOR)
    cube(m)
    pg.display.flip()
    clock.tick(10)
 
0
ALex Break 20 Сен 2022 в 21:57
1
Вы выбираете случайные цвета для каждого кадра, поэтому, естественно, все будет «мигать».
 – 
AKX
20 Сен 2022 в 22:02
Конечно, я хочу это, но я не могу найти решение для уровней. Есть способ заблокировать цвета для уровня
 – 
ALex Break
20 Сен 2022 в 22:05

1 ответ

Лучший ответ

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

  • Новая функция make_random_sequence возвращает список, выбранный случайным образом из заданной последовательности, гарантируя отсутствие последовательных повторений одного и того же элемента (что, по-видимому, также является вашей логикой с old_col?)
  • На самом деле вы не использовали параметр rando, заданный для cube.
  • Использование enumerate для перебора цветов и их индексов короче, чем работа с переменной plus.
import pygame as pg
import random

pg.init()
screen = pg.display.set_mode((500, 800))
clock = pg.time.Clock()
BG_COLOR = pg.Color('black')
WHITE = pg.Color('white')
ORANGE = pg.Color('orange')
BLUE = pg.Color('blue')
RED = pg.Color('red')
PURPLE = pg.Color('purple')


def rhumbus(screen, color, plus):
    point1 = (170, 500 - plus)
    point2 = (350, 500 - plus)
    point3 = (300, 550 - plus)
    point4 = (120, 550 - plus)
    points = [point1, point2, point3, point4]
    return pg.draw.polygon(screen, color, points)


def make_random_sequence(options, n):
    seq = []
    while len(seq) < n:
        choice = random.choice(options)
        if seq and choice == seq[-1]:  # skip if same as last
            continue
        seq.append(choice)
    return seq


def cube(colors):
    for i, color in enumerate(colors):
        rhumbus(screen, color, -72 + i * 8)


colors = make_random_sequence([RED, ORANGE, BLUE, WHITE], 8)

done = False
while not done:
    for event in pg.event.get():
        if event.type == pg.QUIT:
            done = True

    screen.fill(BG_COLOR)
    cube(colors)
    pg.display.flip()
    clock.tick(10)
1
AKX 20 Сен 2022 в 22:07