0
def StartScreen():

    import pygame

    pygame.init()

    white = 230,230,230
    blue = 0,0,200
    water = 0,255,255
    red = 255,0,0

    WaterLevel = 400
    Depth = 150

    Move = True

    Location = 825

    TextTop = 350

    rise = True
    TextSink = False

    score = 0

    CLOCK = pygame.time.Clock()
    FPS = 60

    gameDisplay = pygame.display.set_mode((272,552))
    pygame.display.set_caption('Boat Game')

    BoatFloat = pygame.image.load("BoatFloatCut.png").convert_alpha()
    BoatFloat = pygame.transform.scale(BoatFloat, (220,50))

    boat = pygame.image.load("BoatLogoCut.png").convert_alpha()
    boat = pygame.transform.scale(boat, (140,100))

    stop = False

    while not stop:

###### Screen Setup ##############################################

        gameDisplay.fill(white)

###### Rising Water ##############################################

        pygame.draw.rect(gameDisplay,water,(0,WaterLevel,272,Depth))

###### Button ####################################################

        pygame.draw.rect(gameDisplay,water,(55,Location-10,160,120),2)

###### Score #####################################################

        ScoreFont = pygame.font.SysFont("monospace", 25)

        ScoreText = ScoreFont.render(str(score), 5, (red))
        gameDisplay.blit(ScoreText, (20, 30))

###### Text ######################################################

        gameDisplay.blit(BoatFloat, (35,TextTop))

###### Movement ##################################################
        if rise:
            TextTop -= 5

        WaterLevel -= 5
        Depth += 5

        if TextTop == 0:
            rise = False

        if rise == False:
            TextSink = True

        if TextSink == True:
            TextTop += 2            


###### Float Down ################################################

        gameDisplay.blit(boat,(60,Location))

        if Move: 
            Location -= 5

        if Location == 275:
            Move = False

###### Start Check 3##############################################

        for event in pygame.event.get():

            if event.type == pygame.MOUSEBUTTONDOWN:
                is_inside = pygame.Rect(55,Location-10,160,120).collidepoint(pygame.mouse.get_pos())

                if is_inside == 1:
                    MainGame()

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

        CLOCK.tick(FPS)

        pygame.display.update()


def MainGame():

    import pygame
    import random
    import time

    pygame.init()

    blue = 0,255,255
    red = 255,0,0
    white = 255,255,255

    Location = 136
    Level = 382

    gate = 100

    gate2 = 100

    space1 = -30
    space1 = -30

    space2 = space1 - 200
    space2 = space1 -200

    WaterLevel = 402

    score = 0

    space1speed = 1
    space2speed = 1

    Left_Rect = pygame.Rect(0,402,185,150)
    Right_Rect = pygame.Rect(137,402,185,150)

    CLOCK = pygame.time.Clock()
    FPS = 80

    gate = random.randrange(20,222)
    gate2 = random.randrange(20,222)

    gameDisplay = pygame.display.set_mode((272,552))
    pygame.display.set_caption('Boat Game')

    boat = pygame.image.load("FinalBoat.png").convert_alpha()
    boat = pygame.transform.scale(boat, (40,25))

    stop = False
    sink = False
    gameOver = False

    is_Left = False
    is_Right = False

    while not stop:

####### Background ###############################################

        gameDisplay.fill(white)

###### Score #####################################################

        ScoreFont = pygame.font.SysFont("monospace", 25)

        ScoreText = ScoreFont.render(str(score), 5, (blue))
        gameDisplay.blit(ScoreText, (20, 30))

        score += 1

####### Barriers One  ############################################

        pygame.draw.line(gameDisplay,white,(gate,space1),(gate + 60,space1),2)

        pygame.draw.rect(gameDisplay,red,(0,space1,gate,25))

        pygame.draw.rect(gameDisplay,red,(gate + 60,space1,272 - gate + 60,25))

        space1 += space1speed

        if space1 == 402:
            space1 = -30
            gate = random.randrange(20,222)

###### Barriers two ##############################################

        pygame.draw.line(gameDisplay,white,(gate2,space2),(gate2 + 60,space2),2)

        pygame.draw.rect(gameDisplay,red,(0,space2,gate2,25))

        pygame.draw.rect(gameDisplay,red,(gate2 + 60,space2,272 - gate2 + 60,25))

        space2 += space2speed

        if space2 == 402:
            space2 = space1 - 200
            gate2 = random.randrange(20,222)

####### Controles ################################################

        pygame.draw.rect(gameDisplay, red, Left_Rect)

        pygame.draw.rect(gameDisplay, red, Right_Rect)

####### Boat #####################################################

        gameDisplay.blit(boat, (Location, Level))
        ####### Barrier 1 Effects ################################

        if space1 == Level - 25 and gate >= Location:
            sink = True

        if space1 == Level - 25 and gate + 50 <= Location + 25:
            sink = True

        if sink == True:
            Level += 1

        if Level == 402:
            stop = True

        ####### Barrier 2 Effects ################################
        if space2 == Level - 25 and gate2 >= Location:
            sink = True

        if space2 == Level - 25 and gate2 + 50 <= Location + 25:
            sink = True

        if sink == True:
            Level += 1

        if Level == 402:
            stop = True


####### Water #####################################################

        pygame.draw.rect(gameDisplay,blue,(0,WaterLevel,272,150))

####### Movement ##################################################


        for event in pygame.event.get():

            if event.type == pygame.MOUSEBUTTONDOWN:
                is_Left = Left_Rect.collidepoint(pygame.mouse.get_pos())
                is_Right = Right_Rect.collidepoint(pygame.mouse.get_pos())

            if event.type == pygame.MOUSEBUTTONUP:
                is_Left = False
                is_Right = False

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

        if is_Left:
            Location -= 5

        elif is_Right:
            Location += 5

        CLOCK.tick(FPS)

        pygame.display.update()

StartScreen()

'score' is the variable I want to cross over. score + 1 occures 80 times per second while MainGame() is running. I would like to blit score to StartScreen(), after the game has already been played. Basically I would like to see the players score on the opening screen.

  • 1
    Have you tried creating to varibme outside of the function scoop/slash making it global – reticentroot Apr 07 '15 at 01:27
  • Write a function that returns the variable you need and pass it to the function that you want it to go to? "f o g" it's called composition. I don't think you can create a global variable inside of a function. It would be out of scope. – lciamp Apr 07 '15 at 01:35

4 Answers4

2

You would have to make initialize the variable score outside of any method definition. To access the variable and edit it you use the key word global. This tells python that the variable you want to access is not the in local scope of the function. Read here for more information on the proper use of global variables. Using global variables in a function other than the one that created them

Here is an example using your code,

import pygame
import random
import time
score = 0
def StartScreen():
    global score

    pygame.init()

    white = 230,230,230
    blue = 0,0,200
    water = 0,255,255
    red = 255,0,0

    WaterLevel = 400
    Depth = 150

    Move = True

    Location = 825

    TextTop = 350

    rise = True
    TextSink = False

    CLOCK = pygame.time.Clock()
    FPS = 60

    gameDisplay = pygame.display.set_mode((272,552))
    pygame.display.set_caption('Boat Game')

    BoatFloat = pygame.image.load("BoatFloatCut.png").convert_alpha()
    BoatFloat = pygame.transform.scale(BoatFloat, (220,50))

    boat = pygame.image.load("BoatLogoCut.png").convert_alpha()
    boat = pygame.transform.scale(boat, (140,100))

    stop = False

    while not stop:

###### Screen Setup ##############################################

        gameDisplay.fill(white)

###### Rising Water ##############################################

        pygame.draw.rect(gameDisplay,water,(0,WaterLevel,272,Depth))

###### Button ####################################################

        pygame.draw.rect(gameDisplay,water,(55,Location-10,160,120),2)

###### Score #####################################################

        ScoreFont = pygame.font.SysFont("monospace", 25)

        ScoreText = ScoreFont.render(str(score), 5, (red))
        gameDisplay.blit(ScoreText, (20, 30))

###### Text ######################################################

        gameDisplay.blit(BoatFloat, (35,TextTop))

###### Movement ##################################################
        if rise:
            TextTop -= 5

        WaterLevel -= 5
        Depth += 5

        if TextTop == 0:
            rise = False

        if rise == False:
            TextSink = True

        if TextSink == True:
            TextTop += 2            


###### Float Down ################################################

        gameDisplay.blit(boat,(60,Location))

        if Move: 
            Location -= 5

        if Location == 275:
            Move = False

###### Start Check 3##############################################

        for event in pygame.event.get():

            if event.type == pygame.MOUSEBUTTONDOWN:
                is_inside = pygame.Rect(55,Location-10,160,120).collidepoint(pygame.mouse.get_pos())

                if is_inside == 1:
                    MainGame()

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

        CLOCK.tick(FPS)

        pygame.display.update()


def MainGame():
    global score

    pygame.init()

    blue = 0,255,255
    red = 255,0,0
    white = 255,255,255

    Location = 136
    Level = 382

    gate = 100

    gate2 = 100

    space1 = -30
    space1 = -30

    space2 = space1 - 200
    space2 = space1 -200

    WaterLevel = 402

    space1speed = 1
    space2speed = 1

    Left_Rect = pygame.Rect(0,402,185,150)
    Right_Rect = pygame.Rect(137,402,185,150)

    CLOCK = pygame.time.Clock()
    FPS = 80

    gate = random.randrange(20,222)
    gate2 = random.randrange(20,222)

    gameDisplay = pygame.display.set_mode((272,552))
    pygame.display.set_caption('Boat Game')

    boat = pygame.image.load("FinalBoat.png").convert_alpha()
    boat = pygame.transform.scale(boat, (40,25))

    stop = False
    sink = False
    gameOver = False

    is_Left = False
    is_Right = False

    while not stop:

####### Background ###############################################

        gameDisplay.fill(white)

###### Score #####################################################

        ScoreFont = pygame.font.SysFont("monospace", 25)

        ScoreText = ScoreFont.render(str(score), 5, (blue))
        gameDisplay.blit(ScoreText, (20, 30))

        score += 1

####### Barriers One  ############################################

        pygame.draw.line(gameDisplay,white,(gate,space1),(gate + 60,space1),2)

        pygame.draw.rect(gameDisplay,red,(0,space1,gate,25))

        pygame.draw.rect(gameDisplay,red,(gate + 60,space1,272 - gate + 60,25))

        space1 += space1speed

        if space1 == 402:
            space1 = -30
            gate = random.randrange(20,222)

###### Barriers two ##############################################

        pygame.draw.line(gameDisplay,white,(gate2,space2),(gate2 + 60,space2),2)

        pygame.draw.rect(gameDisplay,red,(0,space2,gate2,25))

        pygame.draw.rect(gameDisplay,red,(gate2 + 60,space2,272 - gate2 + 60,25))

        space2 += space2speed

        if space2 == 402:
            space2 = space1 - 200
            gate2 = random.randrange(20,222)

####### Controles ################################################

        pygame.draw.rect(gameDisplay, red, Left_Rect)

        pygame.draw.rect(gameDisplay, red, Right_Rect)

####### Boat #####################################################

        gameDisplay.blit(boat, (Location, Level))
        ####### Barrier 1 Effects ################################

        if space1 == Level - 25 and gate >= Location:
            sink = True

        if space1 == Level - 25 and gate + 50 <= Location + 25:
            sink = True

        if sink == True:
            Level += 1

        if Level == 402:
            stop = True

        ####### Barrier 2 Effects ################################
        if space2 == Level - 25 and gate2 >= Location:
            sink = True

        if space2 == Level - 25 and gate2 + 50 <= Location + 25:
            sink = True

        if sink == True:
            Level += 1

        if Level == 402:
            stop = True


####### Water #####################################################

        pygame.draw.rect(gameDisplay,blue,(0,WaterLevel,272,150))

####### Movement ##################################################


        for event in pygame.event.get():

            if event.type == pygame.MOUSEBUTTONDOWN:
                is_Left = Left_Rect.collidepoint(pygame.mouse.get_pos())
                is_Right = Right_Rect.collidepoint(pygame.mouse.get_pos())

            if event.type == pygame.MOUSEBUTTONUP:
                is_Left = False
                is_Right = False

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

        if is_Left:
            Location -= 5

        elif is_Right:
            Location += 5

        CLOCK.tick(FPS)

        pygame.display.update()

StartScreen()

I'm not sure if I caught all the instances of score, but if i did this should work. score is defined on the top of the code. Inside both of your methods I types global score on the top. This lets the function know to look for the variable score outside of it's scope. Also, imports should be placed at the top the file. There is no need to consistently import the same module.

Community
  • 1
  • 1
reticentroot
  • 3,612
  • 2
  • 22
  • 39
1

Using a global variable will work. Another alternative is to pass the score to all score-altering functions and return (at least) the score.

def some_func (score, otherstuff):
    # do something with the inputs.
    score += 1
    return score, otherstuff.
Fred Mitchell
  • 2,145
  • 2
  • 21
  • 29
0

What you can do is put the variable outside of the function entirely, instead of keeping it inside of the function. This way, all of the functions you have can recognize it. However, if you'd like to edit score from another function, just simply put the words global score at the top, indicating that you would like to edit the global version of score.

Bagel
  • 82
  • 11
0

Another way to manage the score is to create a class for your game, if it is reasonable to make all score-altering functions members of the class. That could be a good design or a bad one. If you take this approach, the __init__ function should initialize self.score to zero. The score-altering functions should just update the value of self-score.

Fred Mitchell
  • 2,145
  • 2
  • 21
  • 29