1

I create a little game. I want to add a little Menu (START, QUIT, CREDITS). When the user clicks START the menu should disappear and the game should start. When the user clicks CREDITS a new screen with the credits should appear (see screenshot). I tried it, but i don't know really how to add this. Just the "QUIT" Button is working now. Here is my code:

from random import randint
import pygame

WIDTH   = 800
HEIGHT  = 800

apple = Actor("apple")
apple.pos = randint(0, 800), randint(-800, 0)

pear = Actor("pear")
pear.pos = randint(0, 800), randint(-800, 0)

plum = Actor("plum")
plum.pos = randint(0, 800), randint(-800, 0)

donut = Actor("donut")
donut.pos = randint(0, 800), randint(-800, 0)

ice = Actor("ice")
ice.pos = randint(0, 800), randint(-800, 0)

chips = Actor("chips")
chips.pos = randint(0, 800), randint(-800, 0)

happysmiley = Actor("happysmiley")
happysmiley.pos = 300, 750

start = Actor("start")
start.pos = 700,750

quitgame = Actor("quit")
quitgame.pos = 600, 750

creditsinfo = Actor("credits")
creditsinfo.pos = 485, 750

gameover = False
score = 0
gamemode = 1

background = pygame.image.load("images\\background.png")

pygame.mixer.init()
pygame.mixer.music.load("music\\funmusic.mp3")
pygame.mixer.music.play(-1)

def draw():
    screen.clear()
    if score >= 100:
        endoflevel1()
    else:
        drawgame()

def drawgame():
    global game_mode
    if gamemode == 1:  
        screen.clear
        screen.blit("background",(0,0))
        apple.draw()
        pear.draw()
        plum.draw()
        donut.draw()
        ice.draw()
        chips.draw()
        quitgame.draw()
        happysmiley.draw()
        start.draw()
        creditsinfo.draw()
        screen.draw.text("Punkte: " + str(score), (700, 5), color = "black")
    elif gamemode == 0:
        screen.clear
        screen.blit("background",(0,0))
        apple.draw()
        pear.draw()
        plum.draw()
        donut.draw()
        ice.draw()
        chips.draw()
        happysmiley.draw()
        screen.draw.text("Punkte: " + str(score), (700, 5), color = "black")
    elif game_mode == 2: 
        screen.clear()
        screen.fill("orange")       
        screen.draw.text("Credits", topleft=(10,10), fontsize=40)     
        pygame.display.flip()    


def update():
    global score

    if score >= 100:
        pygame.mixer.music.stop()
        return

    if apple.y < 800:
        apple.y = apple.y + 4
    else:
        apple.x = randint(0, 800)
        apple.y = randint(-800, 0)

    if pear.y < 800:
        pear.y = pear.y + 4
    else:
        pear.x = randint(0, 800)
        pear.y = randint(-800, 0)

    if plum.y < 800:
        plum.y = plum.y + 4
    else:
        plum.x = randint(0, 800)
        plum.y = randint(-800, 0)

    if donut.y < 800:
        donut.y = donut.y + 4
    else:
        donut.x = randint(0, 800)
        donut.y = randint(-800, 0)

    if ice.y < 800:
        ice.y = ice.y + 4
    else:
        ice.x = randint(0, 800)
        ice.y = randint(-800, 0)

    if chips.y < 800:
        chips.y = chips.y + 4
    else:
        chips.x = randint(0, 800)
        chips.y = randint(-800, 0)

    if keyboard.left:
        happysmiley.x = happysmiley.x - 5
    elif keyboard.right:
        happysmiley.x = happysmiley.x + 5

    if happysmiley.collidepoint (apple.x, apple.y):
        score = score + 2
        effect = pygame.mixer.Sound("sounds\\bonus.wav")
        effect.play()
    if happysmiley.collidepoint (pear.x, pear.y):
        score = score + 1
        effect = pygame.mixer.Sound("sounds\\bonus.wav")
        effect.play()
    if happysmiley.collidepoint (plum.x, plum.y):
        score = score + 1
        effect = pygame.mixer.Sound("sounds\\bonus.wav")
        effect.play()
    if happysmiley.collidepoint (donut.x, donut.y):
        score = score - 1
        effect = pygame.mixer.Sound("sounds\\no.wav")
        effect.play()
    if happysmiley.collidepoint (ice.x, ice.y):
        score = score - 1   
        effect = pygame.mixer.Sound("sounds\\no.wav")
        effect.play() 
    if happysmiley.collidepoint (chips.y, chips.y):
        score = score - 1  
        effect = pygame.mixer.Sound("sounds\\no.wav")
        effect.play()

    if score >= 100:
        endoflevel1()

def on_mouse_down(pos): # wurde Maustaste gedrückt?
    global score       
    global game_mode   
    if start.collidepoint(pos):
        game_mode = 0   
    if quitgame.collidepoint(pos):
        exit()
    if creditsinfo.collidepoint(pos):
        game_mode = 2

def endoflevel1():
    screen.clear()
    global score
    screen.fill("green")
    screen.draw.text("Congratulations! You have successfully completed the 1st level!", topleft=(100,350), fontsize=30)
    pygame.display.flip()

enter image description here

Rabbid76
  • 202,892
  • 27
  • 131
  • 174
siclaro
  • 137
  • 13
  • It's a typo.One time you use the variable `gamemode` and the other time `game_mode`. – Rabbid76 Nov 29 '19 at 18:06
  • i see, i fixed that. Now i only need to fix that the game only should start when the user click START (Now the fruits and sweets are falling down before START is clicked) – siclaro Nov 29 '19 at 18:58
  • You need another `gamemode` which is just set at the start of the game. – Rabbid76 Nov 29 '19 at 19:45
  • 1
    thankyou, i added a new variable gamestart and now it is working (see my answer) – siclaro Dec 02 '19 at 17:18

2 Answers2

1

Yes, i made it! :) I included a variable named "gamestart" and added in the on_mouse_down(pos) function a query to check if the "START" Button was clicked. If so, i included a query in the update function to start "falling" the sweets and fruists only if gamestart == 1. So i dont't added another gamemode. It is complicate to explain it, here is the code:

def update():
    global score, gamestart

    if gamestart == 1:

        if score >= 200:
            pygame.mixer.music.stop()
            return

        if apple.y < 800:
            apple.y = apple.y + 4
        else:
            apple.x = randint(0, 800)
            apple.y = randint(-800, 0)

        if pear.y < 800:
            pear.y = pear.y + 4
        else:
            pear.x = randint(0, 800)
            pear.y = randint(-800, 0)

        if plum.y < 800:
            plum.y = plum.y + 4
        else:
            plum.x = randint(0, 800)
            plum.y = randint(-800, 0)

        if donut.y < 800:
            donut.y = donut.y + 4
        else:
            donut.x = randint(0, 800)
            donut.y = randint(-800, 0)

        if ice.y < 800:
            ice.y = ice.y + 4
        else:
            ice.x = randint(0, 800)
            ice.y = randint(-800, 0)

        if chips.y < 800:
            chips.y = chips.y + 4
        else:
            chips.x = randint(0, 800)
            chips.y = randint(-800, 0)

        if keyboard.left:
            happysmiley.x = happysmiley.x - 5
        elif keyboard.right:
            happysmiley.x = happysmiley.x + 5

        if happysmiley.collidepoint (apple.x, apple.y):
            score = score + 2
            effect = pygame.mixer.Sound("sounds\\bonus.wav")
            effect.play()
        if happysmiley.collidepoint (pear.x, pear.y):
            score = score + 1
            effect = pygame.mixer.Sound("sounds\\bonus.wav")
            effect.play()
        if happysmiley.collidepoint (plum.x, plum.y):
            score = score + 1
            effect = pygame.mixer.Sound("sounds\\bonus.wav")
            effect.play()
        if happysmiley.collidepoint (donut.x, donut.y):
            score = score - 1
            effect = pygame.mixer.Sound("sounds\\no.wav")
            effect.play()
        if happysmiley.collidepoint (ice.x, ice.y):
            score = score - 1
            effect = pygame.mixer.Sound("sounds\\no.wav")
            effect.play()
        if happysmiley.collidepoint (chips.x, chips.y):
            score = score - 1
            effect = pygame.mixer.Sound("sounds\\no.wav")
            effect.play()


def on_mouse_down(pos): # wurde Maustaste gedrückt?
    global score
    global gamestart
    global gamemode
    if start.collidepoint(pos):
        gamestart = 1
        gamemode = 0
    if quitgame.collidepoint(pos):
        exit()
    if creditsinfo.collidepoint(pos):
        gamemode = 2
    if back.collidepoint(pos):
        gamemode = 1
siclaro
  • 137
  • 13
0

I would recommend that you add a method that switches everything to level 1 (background, sprites, etc.) And then when the program is run you initialize the background to be the menu and buttons. When you move to level one you can get rid of the buttons and switch the background.

I hope that helps!

phylo

phylo
  • 59
  • 3