Цикл работал, но экран не был - PullRequest
0 голосов
/ 03 мая 2018

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

Это начальный экран игры, где вы можете нажать на начальное изображение, чтобы начать игру.

def start(): 
    global screen, canvas, clock, sound, random
    global player_1, x1, y1, score1
    global player_2, x2, y2, score2
    global starfish, s_x, s_y, starfish_list,starfish_quantity
    global rock, r_x, r_y
    global you_win,y_x,y_y
    global start_button, sb_x, sb_y

    mouse = pygame.mouse.get_pos()
    click = pygame.mouse.get_pressed()
    screen.blit(canvas,[0,0])    
    screen.blit(start_button,[sb_x,sb_y])
    font_start=pygame.font.Font("DFTTNC5.TTC",50) #這個字體顯示數字有異常
    text_start=font_start.render("Turtle Battle!",True,[0,0,0])
    screen.blit(text_start,[sb_x-60,sb_y-80])

    if 214+sb_x >mouse[0]>sb_x and sb_y+114>mouse[1]>sb_y:
        if click[0]==1:
            mainloop()
    pygame.display.update()

Эта функция определяет, кто победит в итоге.

def End_Game():
    global screen, canvas, clock, sound, random
    global player_1, x1, y1, score1
    global player_2, x2, y2, score2
    global starfish, s_x, s_y, starfish_list,starfish_quantity
    global rock, r_x, r_y
    global you_win,y_x,y_y
    global start_button, sb_x, sb_y


    if len(starfish_list)==0 and score1>score2:
        font_w1 = pygame.font.Font("DFTTNC5.TTC",50)
        text_w1 = font_w1.render("Green Turtle", True, [134,53,20])
        screen.blit(text_w1,[y_x+40, y_y-40])
        screen.blit(you_win, [y_x,y_y])
        pygame.display.update()
        #time.sleep(10)
        return False

    elif len(starfish_list)==0 and score1<score2:
        font_w2 = pygame.font.Font("DFTTNC5.TTC",50)
        text_w2 = font_w2.render("Red Turtle", True, [134,53,20])
        screen.blit(text_w2,[y_x+40, y_y-40])
        screen.blit(you_win, [y_x,y_y])
        pygame.display.update()
        #time.sleep(10)
        return False

Это основной цикл для запуска игры, после выхода из основного цикла экран должен вернуться в меню «Пуск».

def mainloop():
    init()
    running = False
    while not running:
        CheckUserControl()
        Update_Screen()
        Object_Collision()
        if End_Game()==False:
            running = True

Это основная программа. Таким образом, после того, как вы начнете игру, вы начнете играть в игру, и после определения победителя, вы должны вернуться в меню «Пуск». Если вы нажмете quit, программа будет остановлена.

renew = True  
init()      
while renew:
    start()
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            renew = False
pygame.quit()

1 Ответ

0 голосов
/ 03 мая 2018

Не похоже, что вы вообще запускаете mainloop() в основном игровом цикле. Добавьте его, и все будет хорошо.

РЕДАКТИРОВАТЬ: Есть и другие вещи, которые вам нужно сделать тоже Во-первых, удалите цикл из функции mainloop и добавьте переменную gamestate, чтобы проверить, находитесь ли вы в заголовке или в игре.

renew = True  
init()      
while renew:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            renew = False
    if gamestate == 'Game':
        mainloop()
    elif gamestate == 'Title':
        title()
pygame.quit()

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

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