2016-09-15 10 views
2

ゲームであなたが最初のゲームスタートメニュー/イントロがあります、それを起動したときに、あなたがゲームを起動したときに、それは今、2つのボタン([スタート]ゲーム)(終了)pygameの(ビットレースイ)ゲームのバグ

を持っていますあなたがP(Paused)を押すと、2つのボタン(Continue)(Main Menu)があり、続行をクリックするとゲームが正常に完了します。しかし、メインメニューをクリックすると、イントロに戻るのではなくゲームが終了します。同じ問題があなたが持っている車でクラッシュしたときに表示されます(もう一度やり直してください)。(メインメニュー)、そしてメインメニューをクリックしてゲームを閉じます。

あなたがあなたのボタンをトリガする前に解放されるように、マウスのボタンを待っていないので、問題が何であるかに

任意のアイデア?

import pygame 
import time 
import random 

pygame.init() 

crash_sound = pygame.mixer.Sound("C:\Users\itzrb_000\Documents\Untitled.wav") 
pygame.mixer.music.load("C:\Users\itzrb_000\Downloads\Cool_Ride.mp3") 

display_width = 800 
display_height = 600 

black = (0,0,0) 
white = (255,255,255) 
red = (200,0,0) 
green = (0,200,0) 
blue = (0,0,255) 

bright_green = (0,255,0) 
bright_red = (255,0,0) 

car_width = 50 

gameDisplay = pygame.display.set_mode((display_width,display_height))#game screen size 
pygame.display.set_caption('What A Ride') 
clock = pygame.time.Clock() 

carImg = pygame.image.load('C:\Users\itzrb_000\Downloads\Car_Green_Front.png') 
gameBackground = pygame.image.load('C:\WhatARide_Background.png') 
icon = pygame.image.load('C:\Users\itzrb_000\Downloads\Car_Green_Front - Copy.png') 

pygame.display.set_icon(icon) 

pause = False 

car1 = pygame.image.load('C:\Users\itzrb_000\Downloads\download (3).png') 
car2 = pygame.image.load('C:\Users\itzrb_000\Downloads\download (2).png') 
car3 = pygame.image.load('C:\Users\itzrb_000\Downloads\images.png') 
rock = pygame.image.load('C:\Users\itzrb_000\Downloads\Rock.png') 

def background(): 
    gameDisplay.blit(gameBackground,(0,0)) 

'''def cars(ystart): 
    objects = [car1, car2, car3, rock] 
    num_of_objects = random.randint(1,4) 
    for x in range(num_of_objects): 
     y = random.choice(objects) 
     objectblit = random.randrange(130, 625) - (y.get_width()) 
     gameDisplay.blit(y,(random.randrange(130, 625)))''' 

def score(count): 
    font = pygame.font.SysFont(None,25) 
    text = font.render("Score: "+str(count),True, blue) 
    gameDisplay.blit(text,(0,0)) 

def things(thingx, thingy, thingw, thingh, color): 
    pygame.draw.rect(gameDisplay, color, [thingx, thingy, thingw, thingh]) 

def car(x,y): 
    gameDisplay.blit(carImg,(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*0.5),(display_height*0.5)) 
    gameDisplay.blit(TextSurf, TextRect)#blit display object 

    pygame.display.update() 

    time.sleep(2) 

    game_loop() 

def crash(): 
    pygame.mixer.music.stop() 
    pygame.mixer.Sound.play(crash_sound) 

    largeText = pygame.font.Font("freesansbold.ttf", 115) 
    TextSurf, TextRect = text_objects("You Crashed", largeText) 
    TextRect.center = ((display_width * 0.5), (display_height * 0.5)) 
    gameDisplay.blit(TextSurf, TextRect) # blit display object 
    while True: 
     for event in pygame.event.get(): 
      if event.type == pygame.QUIT: 
       pygame.quit() 
       quit() 
     button("Try Again!", 300, 400, 200, 50, green, bright_green, game_loop) 
     button("Main Menu!", 300, 470, 200, 50, red, bright_red, game_intro) 

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

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: 
      action() 
    else: 
     pygame.draw.rect(gameDisplay, ic,(x,y,w,h)) 

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

def quitgame(): 
    pygame.quit() 
    quit() 

def unpause(): 
    global pause 
    pause = False 
    pygame.mixer.music.unpause() 
def paused(): 
    global pause 
    pause = True 
    pygame.mixer.music.pause() 
    largeText = pygame.font.Font("freesansbold.ttf", 115) 
    TextSurf, TextRect = text_objects("Paused", largeText) 
    TextRect.center = ((display_width * 0.5), (display_height * 0.5)) 
    gameDisplay.blit(TextSurf, TextRect) # blit display object 
    while pause == True: 
     for event in pygame.event.get(): 
      if event.type == pygame.QUIT: 
       pygame.quit() 
       quit() 
     button("Continue!", 300, 400, 200, 50, green, bright_green,unpause) 
     button("Main Menu", 300, 470, 200, 50, red, bright_red,game_intro) 

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

def game_intro(): 
    intro = True 

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

     gameDisplay.fill(blue) 
     largeText = pygame.font.SysFont("comicsansms", 115) 
     TextSurf, TextRect = text_objects("What A Ride", largeText) 
     TextRect.center = ((display_width/2), (display_height/2)) 
     gameDisplay.blit(TextSurf, TextRect) 

     button("Start Game", 300, 400, 200, 50, green, bright_green,game_loop) 
     button("Quit", 300, 470, 200, 50, red, bright_red,quitgame) 

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


def game_loop(): 
    global pause 
    pygame.mixer.music.play(-1) 
    x = (display_width * 0.45) 
    y = (display_height * 0.8) 

    x_change = 0 

    thing_startx = random.randrange(130,625) 
    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 = -5 
       elif event.key == pygame.K_RIGHT: 
        x_change = 5 
       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 

      print event 
     x += x_change 

     background() 
     things(thing_startx, thing_starty, thing_width, thing_height, black) 
     thing_starty += thing_speed 
     car(x,y) 
     score(dodged) 

     if x > 625 - car_width or x < 130: 
      crash() 

     if thing_starty > display_height: 
      thing_starty = 0 - thing_height 
      thing_startx = random.randrange(130,625) 
      dodged += 1 
      thing_speed += 1 
      thing_width += (dodged*1.2) 
     if y < thing_starty+thing_height: 
      if x > thing_startx and x < thing_startx + thing_width or x + car_width > thing_startx and x + car_width < thing_startx+thing_width: 
       crash() 
     pygame.display.update() 
     clock.tick(51) #fps 
game_intro() 
game_loop() 
pygame.quit() 
quit() 

答えて

1

(コメントを無視します)。

  • pause()が起動すると、2つのボタンが表示されます。
  • ユーザーがマウスをMain Menuに移動します。
  • ユーザーがマウスをクリックします。
  • マウスボタンが押されるとすぐにgame_intro()が呼び出され、同じ場所にボタンが表示されます。
  • マウスボタンがで、まだが押されているので、ゲームが終了します。
関連する問題