循环功能正常,但屏幕却没有

时间:2018-05-03 03:37:35

标签: python pygame

我的问题是,在我按下开始图像后,图形,图像和画布出现在屏幕上,但它根本不起作用。我检查了主程序中的每个阶段是否正常运行,结果发现它们正在运行。但是,我无法在此处检测到错误。我对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

这是主程序。所以在你开始游戏之后,你将开始玩游戏,在决定胜利者之后,你应该回到开始菜单。如果按退出,程序将被终止。

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

1 个答案:

答案 0 :(得分:0)

似乎你并没有在主游戏循环中运行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文件,将变量放入其中,然后将其导入到脚本中,更不用说你做出的其他糟糕的代码选择。