0

I have a issue with my game at the moment, the game works fine. however when adding my main menu, It doesn't work, it loads it up but when you press play nothing happens (it doesn't go the game it just stays there). I have attached an image of my simple main menu([1]: https://i.stack.imgur.com/YKY9q.jpg) .My code is below thanks:

import pygame, sys, Funk
from tileC import Tile
from object_classes import *
from interaction import interaction
from A_Star import A_Star
import time


pygame.init()
pygame.font.init()
pygame.mixer.init()

pygame.mixer.music.load('audio/zombie_theme.ogg')
pygame.mixer.music.play(-1)

screen = pygame.display.set_mode((704, 448)) # 32, 32

Tile.pre_init(screen)

clock = pygame.time.Clock()
FPS = 30
total_frames = 0
dungeon = pygame.image.load('images/dungeon.jpg')
survivor = Survivor(32 * 2, 32 * 4)
intro = True

# colours

black = (0,0,0)
white = (255,255,255)
red = (200,0,0)
green = (0,200,0)
orange = (255,127,0)
grey = (50,50,50)
bright_red = (255,0,0)
bright_green = (0,255,0)
bright_orange = (255,215,0)


def text_objects(text, font):
    textSurface = font.render(text, True, (white))
    return textSurface, textSurface.get_rect()

def message_display(text):
    largeText = pygame.font.Font('Creepster-Regular.ttf',115)
    TextSurf, TextRect = text_objects(text, largeText)
    TextRect.center = ((704/2),(448/2))
    gameDisplay.blit(TextSurf, TextRect,)

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(screen, (ac), (x, y, w, h))
        if click[0] == 1 and action != None:
            if action == "start":
                return
            if action == "end":
                pygame.quit()
                sys.exit()

    else:
        pygame.draw.rect(screen, (ic), (x, y, w, h))



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





def game_intro():

   intro = True

   while intro:
       for event in pygame.event.get():

           if event.type == pygame.QUIT:
               pygame.quit()
               sys.exit()

       screen.fill(grey)
       largeText = pygame.font.SysFont('Creepster-Regular.ttf',45)
       TextSurf, TextRect = text_objects("2D Tile Based Zombie Game",   largeText)
       TextRect.center = ((704/2),(448/2))
       screen.blit(TextSurf, TextRect)

       button("Play",100,300,100,50,green,bright_green,"start")
       button("Controls",300,300,100,50,orange,bright_orange, "how to play")
       button("Quit",500,300,100,50,red,bright_red, "end")


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





game_intro()

while True:

    screen.blit(dungeon, (0,0) )

    Zombie.spawn(total_frames, FPS)
    Zombie.update(screen, survivor)

    survivor.movement()

    Bullet.super_massive_jumbo_loop(screen)

    A_Star(screen, survivor, total_frames, FPS)
    interaction(screen, survivor)

    survivor.draw(screen)

    Funk.text_to_screen(screen, 'Health: {0}'.format(survivor.health), 0,0)
    Funk.text_to_screen(screen, 'Score: {0}'.format(survivor.score), 0,15)
    Funk.text_to_screen(screen, 'FPS {0}'.format(FPS), 0,30)
    pygame.display.flip()
    clock.tick(FPS)
    total_frames += 1

    if survivor.health <= 0:
        time.sleep(1)
        screen.blit(pygame.image.load('images/dead.jpg'), (0,0))
        pygame.display.update()
        screen.fill(black)
        Funk.text_to_screen(screen, "You scored {0} points!".format(survivor.score),704/2, 448/2, size = 50)
        break


    time.sleep(4)

1 Answers1

0

Looks like you are following this tutorial....

Your button isn't doing anything when you click Play, it just returns.

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(screen, (ac), (x, y, w, h))
        if click[0] == 1 and action != None:
            if action == "start":
                return               ### Fix here
            if action == "end":
                pygame.quit()
                sys.exit()

Though, you really should define a method for your actions.

def start_game():
    # TODO: Implement
    print("Starting game")

def how_to_play():
    # TODO: Implement
    print("How to")

def quit_game():
     pygame.quit()
     sys.exit()

And in the button method (from the tutorial) you only need to call the action.

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()    

Then you can attach method to your buttons instead of strings.

 button("Play",100,300,100,50,green,bright_green,start_game)
 button("Controls",300,300,100,50,orange,bright_orange, how_to_play)
 button("Quit",500,300,100,50,red,bright_red, quit_game)
OneCricketeer
  • 179,855
  • 19
  • 132
  • 245