2016-11-02 41 views
1

所以,我正在pygame上製作一個簡單的視頻遊戲,它非常接近完成。我在暫停屏幕上工作,但是當我點擊p(我選擇的按鈕)時,它暫停了,但當我繼續時,它重新開始遊戲。我檢查了代碼,發現沒有錯。然後,我去了這裏的問題論壇,查找了這個問題,我發現了一些東西,但他們並沒有像我一樣執行代碼,除此之外,答案很難理解。暫停功能是paused(),取消暫停功能是,unpause()。你可以嘗試找出它出錯的地方嗎?這裏是我的scource代碼:當我的暫停在pygame中播放我的game_loop函數時,如何阻止我的遊戲重新啓動?

import pygame 
import time 
import random 

pygame.init() 

display_width = 800 
display_height = 600 
dark_blue = (0,178,210) 
blue = (109,178,201) 
black = (0,0,0) 
white = (255,255,255) 
red = (255,0,0) 
brown = (102, 51, 0) 
ship_width = 96 
gameDisplay = pygame.display.set_mode((display_width,display_height)) 
pygame.display.set_caption('_Asteroid Belt_') 
clock = pygame.time.Clock() 
thingImg = pygame.image.load("/home/pi/Desktop/asteroid.png") 
shipImg = pygame.image.load('/home/pi/Desktop/spaceship.png') 
bg = pygame.image.load("/home/pi/Desktop/py.png") 
bgi = pygame.image.load("/home/pi/Desktop/introbg.jpg") 
pause = False 
def quitgame(): 
    pygame.quit() 
    quit() 
def unpause(): 
    global pause 
    pause = False 

def paused(): 


    while pause: 
     for event in pygame.event.get(): 
      if event.type == pygame.QUIT: 
       pygame.quit() 
       quit() 

     largeText = pygame.font.Font('freesansbold.ttf',115) 
     TextSurf, TextRect = text_objects("Paused", largeText) 
     TextRect.center = ((display_width/2),(display_height/2)) 
     gameDisplay.blit(TextSurf, TextRect) 


     button("Start Flight",100,450,200,100,dark_blue,blue,game_loop) 
     button("Land on Desktop",500,450,200,100,dark_blue,blue,quitgame) 



     #pygame.draw.rect(gameDisplay,dark_blue,(500,450,200,100)) 


     pygame.display.update() 
     clock.tick(15) 
def game_intro(): 
    intro = True 

    while intro: 
     for event in pygame.event.get(): 
      if event.type == pygame.QUIT: 
       pygame.quit() 
       quit() 
     gameDisplay.blit(bgi,(0,0)) 
     largeText = pygame.font.Font('freesansbold.ttf',115) 
     TextSurf, TextRect = text_objects("Asteroid Belt", largeText) 
     TextRect.center = ((display_width/2),(display_height/2)) 
     gameDisplay.blit(TextSurf, TextRect) 


     button("Start Flight",100,450,200,100,dark_blue,blue,game_loop) 
     button("Land on Desktop",500,450,200,100,dark_blue,blue,quitgame) 



     #pygame.draw.rect(gameDisplay,dark_blue,(500,450,200,100)) 


     pygame.display.update() 
     clock.tick(15) 

def message_display2(text): 
    largeText = pygame.font.Font('freesansbold.ttf',115) 
    TextSurf, TextRect = text_objects(text, largeText) 
    TextRect.center = ((display_width/2),(display_height/2)) 
    gameDisplay.blit(TextSurf, TextRect) 
    pygame.display.update() 
    time.sleep(2) 


def things_dodged(count): 
    font = pygame.font.SysFont(None,25) 
    text = font.render("Dodged: "+str(count), True, white) 
    gameDisplay.blit(text, (0,0)) 

def things(x,y, thing_width, thing_height,thing_startx,thing_starty): 
    gameDisplay.blit(thingImg, (x,y)) 



def ship(x,y): 
    gameDisplay.blit(shipImg,(x,y)) 
def text_objects(text, font): 
    textSurface = font.render(text, True, white) 
    return textSurface, textSurface.get_rect() 

def message_display(text): 
    largeText = pygame.font.Font('freesansbold.ttf',115) 
    TextSurf, TextRect = text_objects(text, largeText) 
    TextRect.center = ((display_width/2),(display_height/2)) 
    gameDisplay.blit(TextSurf, TextRect) 
    pygame.display.update() 
    time.sleep(2) 

    game_loop() 



def crash(): 
    message_display("You Crashed!") 


def button(msg,x,y,w,h,ic,ac,action=None): 
    mouse = pygame.mouse.get_pos() 
    click = pygame.mouse.get_pressed() 

    if x + w>mouse[0]>x and y+h > mouse[1] >y: 
     pygame.draw.rect(gameDisplay,ac,(x,y,w,h)) 
     if click[0] == 1 and action != None: 
      if action == game_loop: 
       game_loop() 
      elif action == quitgame: 
       pygame.quit() 
       quit() 
    else: 
     pygame.draw.rect(gameDisplay,ic,(x,y,w,h)) 

    smallText = pygame.font.Font('freesansbold.ttf',20) 
    textSurf, textRect = text_objects(msg,smallText) 
    textRect.center = ((x+(w/2)),(y+(h/2))) 
    gameDisplay.blit(textSurf, textRect) 





def game_loop(): 
    global pause 
    x = (300) 
    y = (410) 

    x_change=0 

    thing_startx = random.randrange(0, display_width) 
    thing_starty = -600 
    thing_speed = 5 
    thing_width = 100 
    thing_height = 100 
    dodged = 0 

    gameExit = False 

    while not gameExit: 

     for event in pygame.event.get(): 
      if event.type == pygame.QUIT: 
       pygame.quit() 
       quit() 

      if event.type == pygame.KEYDOWN: 
       if event.key == pygame.K_LEFT: 
        x_change = -20 
       if event.key == pygame.K_RIGHT: 
        x_change = 20 
       if event.key == pygame.K_p: 
        pause = True 
        paused() 



      if event.type == pygame.KEYUP: 
       if event .key == pygame.K_LEFT or event.key == pygame.K_RIGHT: 
        x_change = 0 



     x+= x_change 

     gameDisplay.blit(bg, (0,0)) 
     things(thing_startx,thing_starty,thing_width,thing_height,x,y) 
     thing_starty += thing_speed 
     thing_height=100 
     ship(x,y) 
     things_dodged(dodged) 

     if x > display_width - ship_width or x<0: 
      crash() 

     if thing_starty > display_height: 
      thing_starty = 0 - thing_height 
      thing_startx = random.randrange(0, display_width) 
      dodged += 1 
      thing_speed+=2 

     if y < thing_starty+thing_height: 
      cow = 5 

      if x > thing_startx and x < thing_startx + thing_width or x+ship_width > thing_startx and x+ship_width< thing_startx +thing_width: 

       crash() 



     pygame.display.update() 
     clock.tick(60) 
game_intro() 
game_loop() 
pygame.quit() 
quit() 

回答

0

在我的代碼,我取消暫停按鈕功能設置爲game_loop(),而不是unpause()。所以每次我去取消暫停,我重新開始遊戲循環!這是一個例子,你必須注意你的代碼的每一部分,而不僅僅是那些出錯的函數。

0

看來你並沒有在你的pause()函數中取消暫停。

你應該加入這樣的事:

def paused(): 
    while pause: 
     for event in pygame.event.get(): 
      if event.type == pygame.QUIT: 
       pygame.quit() 
       quit() 
      if event.type == pygame.K_p: 
       unpause() 
+0

對不起,我可以再次評論(可能是WiFi)。但是if語句仍然設置爲0。是否有任何方法設置閃避=已經閃避的數字?我想製作一個像def = continue()這樣的函數,但我不知道它會起作用的參數。它可以被things_dodged?但是,恐怕它仍然會顯示0.請儘快通知我。 – PiGuy

+0

我現在無法測試你的代碼,但是從我所看到的情況來看,'閃避'的值永遠不會重置爲0,所以不知道爲什麼你有這個問題。 您是否嘗試調試或記錄'閃避'的值以查看它是如何重置爲0的? – Fehnryr

+0

不,但我會試着看看那躲閃的部分發生了什麼。我會讓你知道我找到了什麼 – PiGuy

相關問題