Проблемы с ОС "afplay" - Turtle, Python - PullRequest
0 голосов
/ 27 апреля 2020

Я пишу игру со змеями в python, используя turtle и 'os'. Я пытаюсь создать игру поверх экрана и воспроизводить звук при жизни = 0. Это все работает, кроме звука, который глючит и продолжает играть снова и снова поверх себя.

Это код для этой части:

, в то время как True: wn.update ()

if lives == 0:
    os.system("afplay game_over.wav&")
    head.hideturtle()
    food.hideturtle()
    over.write("GAME\nOVER", align="center", font=("Retro Gaming", 70, "normal"))

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

1 Ответ

0 голосов
/ 27 апреля 2020

Полагаю, что в тот момент, когда ваши жизни равны нулю, каждый раз, когда запускается ваше обновление l oop, выполняется условие и воспроизводится звук. Это нормально для сокрытия головы и еды, потому что когда они спрятаны Вы можете запускать метод скрытия снова и снова, и ничто не выглядит иначе. То же самое с текстом.

Например, этот сценарий похож на тот, который у вас есть:

turtle = {'lives': 10, 'show': True}

while True:
    if turtle['lives'] == 0:
        print('Turtle died')
        turtle['show'] = False

    if turtle['lives'] > 0:
        turtle['lives'] -= 1

Это будет уменьшать жизнь черепахи каждый ход, пока они больше 0. В тот момент, когда они go опустятся до 0, сработает первый оператор if, и вы увидите, как «Черепаха умерла» печатается снова и снова каждый раз, когда запускается l oop. Точно так же, как вы продолжаете скрывать голову, не имеет значения, как часто вы устанавливаете turtle['show'] на False, это фактически ничего не делает.

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

turtle = {'lives': 10, 'show': True, 'state': 'alive'}

while True:
    if turtle['lives'] == 0 and turtle['state'] == 'alive':
        turtle['state'] = 'dead'
        print('Turtle died')
        turtle['show'] = False

    if turtle['lives'] > 0:
        turtle['lives'] -= 1

Таким образом, вы гарантируете, что процедура смерти выполняется только один раз.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...