Harry Kitchener
Harry Kitchener

Reputation: 149

Pygame not loading Menu straight away

i'm having an issue with pygame, can anyone tell me why it doesn't display the menu GUI? Basically, i want it to load the GUI, and when i push space, it selects "Play Game" and launches the "Game" function. but before it even loads the menu, it's just plain grey. Also when i hit space it doesn't load the game. Thanks.

BTW "GAME()" IS A FUNCTION I MADE FURTHER BELOW, THAT I WANT IT TO LOAD.

import pygame, math, sys, random
pygame.init()

#Variables
darkYellow = 204,204,0
grey = 102, 102, 102
black = 0, 0, 0
white = 255, 255, 255
red = 255,0,0
marroon = 120, 0, 0
green = 0,255,0
blue = 0,0,255
darkBlue = 0,0,128

resolution = 650, 600
myFont = pygame.font.SysFont("Times New Roman", 30)
myFont2 = pygame.font.SysFont("Times New Roman", 15)
myFont3 = pygame.font.SysFont("Times New Roman", 60)

redLeft = 150, 575
redRight = 280, 575
blackLeft = 370, 575
blackRight = 500, 575
radius = 20

def main():
    global window
    window = pygame.display.set_mode(resolution)
    pygame.display.set_caption('Harrys Game')
    window.fill(grey)
    pygame.display.update()
    while True:
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                pygame.quit(); sys.exit()
main()

def mainMenu():

    rectWidth = 150
    rectHeight = 40

    #Draw buttons
    pygame.draw.rect(window, (white),(250, 150, rectWidth, rectHeight),0)
    pygame.draw.rect(window, (white),(250, 225, rectWidth, rectHeight),0)
    pygame.draw.rect(window, (white),(250, 300, rectWidth, rectHeight),0)
    highlight = pygame.draw.rect(window, (darkYellow),(250, 150, rectWidth,         rectHeight),0)
    pygame.display.update()

    playGameText = myFont.render("Play Game", 1, red)
    window.blit(playGameText, (260, 150))
    optionsText = myFont.render("Options", 1, red)
    window.blit(optionsText, (275, 225))
    exitText = myFont.render("Exit", 1, red)
    window.blit(exitText, (300, 300))
    pygame.display.update()

    while True:
        for event in pygame.event.get():
            if event.type == pygame.KEYDOWN and event.key == pygame.K_SPACE:
                game()
def game():
    startBar = pygame.draw.lines(window, black, False, [(0,545.46),(541.7,545.46)], 5)
    bar2 = pygame.draw.lines(window, black, False, [(0,490.92),(541.7,490.92)], 5)
    bar3 = pygame.draw.lines(window, black, False, [(0,436.38),(541.7,436.38)], 5)
    bar4 = pygame.draw.lines(window, black, False, [(0,381.84),(541.7,381.84)], 5)
    bar5 = pygame.draw.lines(window, black, False, [(0,327.3),(541.7,327.3)], 5)
    bar6 = pygame.draw.lines(window, black, False, [(0,272.76),(541.7,272.76)], 5)
    bar7 = pygame.draw.lines(window, black, False, [(0,218.22),(541.7,218.22)], 5)
    bar8 = pygame.draw.lines(window, black, False, [(0,163.68),(541.7,163.68)], 5)
    bar9 = pygame.draw.lines(window, black, False, [(0,109.14),(541.7,109.14)], 5)
    bar10 = pygame.draw.lines(window, black, False, [(0,54.6),(541.7,54.6)], 5)

    #Draw side columns
    rightBar = pygame.draw.lines(window, black, False, [(541.7,600),(541.7,0)], 5)
    leftBar = pygame.draw.lines(window, black, False, [(108.3,600),(108.3,0)], 5)
    centreBar = pygame.draw.lines(window, black, False, [(325,0),(325,600)], 5)

    #Right column text
    label1 = myFont2.render("You rolled a:", 1, black)
    window.blit(label1, (545, 20))
    rollLabel = myFont2.render("Hit space", 1, black)
    window.blit(rollLabel, (545, 100))
    rollLabel2 = myFont2.render("to roll again", 1, black)
    window.blit(rollLabel2, (545, 117))


    #Display column numbers
    start1 = myFont.render("START", 1, black)
    window.blit(start1, (8, 545.46))
    side2 = myFont.render("2", 1, black)
    window.blit(side2, (54.15, 490.92))
    side3 = myFont.render("3", 1, black)
    window.blit(side3, (54.15, 436.38))
    side4 = myFont.render("4", 1, black)
    window.blit(side4, (54.15, 381.84))
    side5 = myFont.render("SAFE 5", 1, black)
    window.blit(side5, (8, 327.3))
    side6 = myFont.render("6", 1, black)
   window.blit(side6, (54.15, 272.76))
    side7 = myFont.render("7", 1, black)
    window.blit(side7, (54.15, 218.22))
    side8 = myFont.render("8", 1, black)
    window.blit(side8, (54.15, 163.68))
    side9 = myFont.render("9", 1, black)
    window.blit(side9, (54.15, 109.14))
    side10 = myFont.render("10", 1, black)
    window.blit(side10, (54.15, 54.6))
    finish11 = myFont.render("FINISH", 1, black)
    window.blit(finish11, (8, 0))

game()

Upvotes: 0

Views: 486

Answers (2)

Bartlomiej Lewandowski
Bartlomiej Lewandowski

Reputation: 11180

The problem is, that you call your game function that draws all these lines, and return right away.

All the things are then overriten by the drawing code that is in the mainMenu function.

You are also missing a display.update() at the end.

To solve this, I would place another event loop in your game function, and a display.update() call at the end.

Upvotes: 0

Kevin
Kevin

Reputation: 76194

Since you never call mainMenu, none of the code in that function is ever executed.

You can modify your main function so that it calls mainMenu (and melding the two event.get() loops together, since you only need one):

import pygame, math, sys, random
pygame.init()

#Variables
darkYellow = 204,204,0
grey = 102, 102, 102
black = 0, 0, 0
white = 255, 255, 255
red = 255,0,0
marroon = 120, 0, 0
green = 0,255,0
blue = 0,0,255
darkBlue = 0,0,128

resolution = 650, 600
myFont = pygame.font.SysFont("Times New Roman", 30)
myFont2 = pygame.font.SysFont("Times New Roman", 15)
myFont3 = pygame.font.SysFont("Times New Roman", 60)

redLeft = 150, 575
redRight = 280, 575
blackLeft = 370, 575
blackRight = 500, 575
radius = 20


def mainMenu():

    rectWidth = 150
    rectHeight = 40

    #Draw buttons
    pygame.draw.rect(window, (white),(250, 150, rectWidth, rectHeight),0)
    pygame.draw.rect(window, (white),(250, 225, rectWidth, rectHeight),0)
    pygame.draw.rect(window, (white),(250, 300, rectWidth, rectHeight),0)
    highlight = pygame.draw.rect(window, (darkYellow),(250, 150, rectWidth,         rectHeight),0)
    pygame.display.update()

    playGameText = myFont.render("Play Game", 1, red)
    window.blit(playGameText, (260, 150))
    optionsText = myFont.render("Options", 1, red)
    window.blit(optionsText, (275, 225))
    exitText = myFont.render("Exit", 1, red)
    window.blit(exitText, (300, 300))
    pygame.display.update()

    while True:
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                pygame.quit(); sys.exit()
            if event.type == pygame.KEYDOWN and event.key == pygame.K_SPACE:
                game()

def main():
    global window
    window = pygame.display.set_mode(resolution)
    pygame.display.set_caption('Harrys Game')
    mainMenu()

main()

Resulting in your desired menu:

enter image description here

Upvotes: 1

Related Questions