Игра с Python - добавить опцию «Перезапустить игру» - PullRequest
1 голос
/ 04 октября 2019

Я создал небольшую игру с Pygame Zero и MU IDE. После того, как игра закончена, пользователь должен спросить, хочет ли он играть снова. Если он выбирает «да», игра должна начинаться с самого начала. Я знаю, что могу сделать это с помощью цикла While, но не знаю как.

Я попытался вставить цикл while. В цикле while вызываются игровые функции, но он не работает. Я попробовал это:

play_again = raw_input("If you'd like to play again, please type 'yes'")
while playagain == "yes"
      draw()
      place_banana()
      on_mouse_down(pos)
      update_time_left()

....

Я знаю, что это не правильно, но я понятия не имею, как это сделать правильно

from random import randint 
import time
import pygame

HEIGHT = 800
WIDTH = 800
score = 0 
time_left = 10

banana = Actor("banana")
monkey = Actor("monkey")

def draw():
    screen.clear()
    screen.fill("white")
    banana.draw()
    monkey.draw()
    screen.draw.text("Number of bananas collected: " + str(score),      color = "black", topleft=(10,10))
    screen.draw.text("Time: " + str(time_left), color = "black", topleft=(10,50))

def place_banana():
    banana.x = randint(125, 790)
    banana.y = randint(186, 790)
    monkey.x = 50
    monkey.y = 740

def on_mouse_down(pos):
    global score
    if banana.collidepoint(pos): 
        score = score + 1 
        place_banana()

 def update_time_left():
    global time_left
    if time_left:  
         time_left = time_left - 1
    else:  
        screen.fill("pink")  # code is not executed
        game_over() 

place_banana() 
clock.schedule_interval(update_time_left, 1.0)

def game_over():
    screen.fill("pink") # code is not executed
    global time_left
    message = ("Ende. Number of bananas collected")   # code is not   executed
    time_left = 0
    time.sleep(5.5)
    quit()

Ответы [ 2 ]

2 голосов
/ 04 октября 2019

Одной из проблем, которая определенно остановит выполнение вашего кода, является двоеточие в конце всех четырех функций в предложенном вами цикле while. Двоеточие используется для определения функций или для операторов if / else и т. Д., А не для выполнения функции.

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

play_again = "yes"
while playagain == "yes":
    draw()
    place_banana()
    on_mouse_down(pos)
    update_time_left()
    play_again = raw_input("If you'd like to play again, please type 'yes'")

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

РЕДАКТИРОВАТЬ: Спасибо chepner за указание пропущенного переназначения play_again

1 голос
/ 04 октября 2019

Вы должны обернуть ваш код в цикл while и иметь в начале вход, который будет запрашивать play_again. Установите play_again на «yes» вне цикла while, но вызовите вход для play_again внутри цикла while.

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