Как сделать так, чтобы закуски в моей игре появлялись в случайных цветах? - PullRequest
1 голос
/ 13 октября 2019

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

Я пробовал:

def main():
    global width, rows, s, snack
    width = 600
    rows = 40
    win = pygame.display.set_mode((width, width))
    s = snake((50,205,50), (10,10))
    snack = cube(randomSnack(rows, s), color=(randint(0,255)))
    flag = True

    clock = pygame.time.Clock()

    while flag:
        pygame.time.delay(50)
        clock.tick(10)
        s.move()
        if s.body[0].pos == snack.pos:
            s.addCube()
            snack = cube(randomSnack(rows, s), color=(randint(0,255)))

, но не могу сделать 3параметры, поэтому получил только несколько оттенков синего.

def main():
    global width, rows, s, snack
    width = 600
    rows = 40
    win = pygame.display.set_mode((width, width))
    s = snake((50,205,50), (10,10))
    snack = cube(randomSnack(rows, s), color=(255,215,0))
    flag = True

    clock = pygame.time.Clock()

    while flag:
        pygame.time.delay(50)
        clock.tick(10)
        s.move()
        if s.body[0].pos == snack.pos:
            s.addCube()
            snack = cube(randomSnack(rows, s), color=(255,215,0))

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

Ответы [ 2 ]

0 голосов
/ 14 октября 2019

Как сказал @ njzx2 в комментариях, лучше сделать набор предопределенных цветов и выбрать один случайным образом из этого набора. Даже если вы исключите цвет фона, вы можете случайно получить цвет, очень близкий к нему, который вряд ли будет виден человеческому глазу.

Добавьте к своей основной функции или там, где лучше всего в вашем случае,набор цветов:

#colors here are black, white, green and blue, just an example, set them on your own accord
cubecolors = ((0, 0, 0), (255, 255, 255), (0, 255, 0), (0, 0, 255))

Затем, чтобы случайно выбрать один из них при создании закуски, выполните:

snack = cube(randomSnack(rows, s), color=random.choice(cubecolor))

Не забудьте import random модуль.

Обратите внимание, что я использовал термин set , но cubecolor на самом деле не set , это кортеж . random.choice не работает с set.

0 голосов
/ 13 октября 2019

Вы хотите кортеж с 3 записями (по одному для каждого значения RBG: красный, зеленый, синий). Решение, которое вы имеете в первом блоке, имеет только одно значение. Вместо этого вы хотите:

color = (randint(0,255), randint(0,255), randint(0,255))

Чтобы убедиться, что этот цвет не является цветом фона, я бы определил функцию, которая возвращает случайный цвет, который не является цветом фона:

def randomNonBackgroundColor():
    color = (randint(0,255), randint(0,255), randint(0,255))
    if color == (255, 0, 0):
        return getRandomNonBackgroundColor()
    else:
        return color

Тогда

def main():
    global width, rows, s, snack
    width = 600
    rows = 40
    win = pygame.display.set_mode((width, width))
    s = snake((50,205,50), (10,10))
    snack = cube(randomSnack(rows, s), color=randomNonBackgroundColor())
    flag = True

    clock = pygame.time.Clock()

    while flag:
        pygame.time.delay(50)
        clock.tick(10)
        s.move()
        if s.body[0].pos == snack.pos:
            s.addCube()
            snack = cube(randomSnack(rows, s), color=randomNonBackgroundColor())
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...