2016-11-02 11 views
1

だから、私はパイゲームでシンプルなビデオゲームを作っているし、仕上げに非常に近い。一時停止画面で作業していましたが、p(選択したボタン)を押すと一時停止しましたが、続行するとゲームが再開しました。私はコードを調べて何も間違っていないことを発見した。それから、私はここの質問フォーラムに行き、問題を調べたところ、私は何かを見つけましたが、彼らは私のようにコードをやっていませんでした。その答えの上で、理解するのは難しいです。一時停止機能はpaused()であり、一時停止は驚き、unpause()です。どこが間違っているのか調べることができますか?ここに私のscourceコードは次のとおりです。私の一時停止がゲームのループをpygameで果たしたときに、ゲームの再開を止めるにはどうしたらいいですか?

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

申し訳ありませんが、私は再びコメントできます(おそらく無線LAN)。しかし、ifステートメントはまだ0に戻って回避されます。ドッジド=セット数を設定する方法はありますか?私はdef = continue()のような関数を作ることを考えていますが、私はそれが機能しないパラメタを知りません。 things_dodgedできますか?しかし、それから私は恐れてそれがまだ0を表示することを恐れます。 – PiGuy

+0

私は今あなたのコードをテストすることはできませんが、私が見ることのできるところから、 'dodged'の値は決して0にリセットされません。 'dodged'の値をデバッグしたりログしたりして、0にリセットされたかどうか確認しましたか? – Fehnryr

+0

いいえ、しかし、私はその邪悪なセクションで何が起こっているのか見てみようと思います。私はあなたに私が見つけたものを知らせます – PiGuy

関連する問題