Forum Archive

Velocity Run

Gerzer

I'm about to release an iPhone app on the App Store, but I have one problem. Whenever I run the program, a warning message about global variables being used before being declared flashes for a second. However, the code works without a problem once it goes away. I can't figure out how to get rid of the message. Any suggestions are welcome.

Gerzer

Here is the code part 1

from scene import *
import sys
import time
import sound
class velocity_run(Scene):
    def setup(self):
        self.x = self.size.w * 0.5
        self.y = self.size.h * 0.5
        global level
        level = 0
    def draw(self):
        def level0():
            background(1, 1, 1)
            tint(0, 0, 1)
            text('''Welcome to
Velocity Run!
Tilt your device
to move the red
square into the
green areas and
out of the black
areas.''', font_size=32, x=self.size.w / 2, y=self.size.h / 2, alignment=5)
            image('Typicons48_Thumbs_Up', self.size.w / 2 - 24, 0)
            for touch in self.touches.values():
                if self.size.w / 2 - 24 < touch.location.x < self.size.w / 2 + 24 and 0 < touch.location.y < 48:
                    global level
                    level = 1
        def level1():
            tint(0, 0, 1)
            background(1, 1, 1)
            bw1 = self.size.w * 0.1
            bw2 = self.size.w - self.size.w * 0.1
            fill(0, 0, 0)
            rect(0, 0, self.size.w * 0.1, self.size.h)
            b1 = Rect(0, 0, self.size.w * 0.1, self.size.h)
            rect(self.size.w - self.size.w * 0.1, 0, self.size.w * 0.1, self.size.h)
            b2 = Rect(self.size.w - self.size.w * 0.1, 0, self.size.w * 0.1, self.size.h)
            fill(0, 1, 0)
            rect(0, 0, self.size.w, 20)
            b3 = Rect(0, 0, self.size.w, 20)
            fill(1, 0, 0)
            grav = gravity()
            self.x += grav.x * 5
            self.y += grav.y * 5
            rect(self.x, self.y, 30, 30)
            ball = Rect(self.x, self.y, 30, 30)
            if ball.intersects(b1) or ball.intersects(b2):
                sound.play_effect('Crashing')
                global level
                level = -2
            elif ball.intersects(b3):
                sound.play_effect('Bleep')
                global level
                level = 2
        def level2():
            tint(0, 0, 1)
            background(1, 1, 1)
            bw1 = self.size.w * 0.1
            bw2 = self.size.w - self.size.w * 0.1
            fill(0, 1, 0)
            rect(0, self.size.h - 20, self.size.w, 20)
            b3 = Rect(0, self.size.h - 20, self.size.w, 20)
            fill(0, 0, 0)
            rect(0, 0, self.size.w * 0.1, self.size.h)
            b1 = Rect(0, 0, self.size.w * 0.1, self.size.h)
            rect(self.size.w - self.size.w * 0.1, 0, self.size.w * 0.1, self.size.h)
            b2 = Rect(self.size.w - self.size.w * 0.1, 0, self.size.w * 0.1, self.size.h)
            fill(1, 0, 0)
            grav = gravity()
            self.x += grav.x * 5
            self.y += grav.y * 5
            rect(self.x, self.y, 30, 30)
            ball = Rect(self.x, self.y, 30, 30)
            if ball.intersects(b1) or ball.intersects(b2):
                sound.play_effect('Crashing')
                global level
                level = -2
            elif ball.intersects(b3):
                sound.play_effect('Bleep')
                global level
                level = 3
        def level3():
            tint(0, 0, 0)
            background(1, 1, 1)
            bw1 = self.size.w * 0.1
            bw2 = self.size.w - self.size.w * 0.1
            fill(0, 0, 0)
            rect(0, 0, self.size.w * 0.1, self.size.h)
            b1 = Rect(0, 0, self.size.w * 0.1, self.size.h)
            rect(self.size.w - self.size.w * 0.1, 0, self.size.w * 0.1, self.size.h)
            b2 = Rect(self.size.w - self.size.w * 0.1, 0, self.size.w * 0.1, self.size.h)
            rect(0, 20, self.size.w * 0.25, 20)
            b4 = Rect(0, 20, self.size.w * 0.25, 20)
            fill(0, 1, 0)
            rect(0, 0, self.size.w, 20)
            b3 = Rect(0, 0, self.size.w, 20)
            fill(1, 0, 0)
            grav = gravity()
            self.x += grav.x * 5
            self.y += grav.y * 5
            rect(self.x, self.y, 30, 30)
            ball = Rect(self.x, self.y, 30, 30)
            if ball.intersects(b1) or ball.intersects(b2) or ball.intersects(b4):
                sound.play_effect('Crashing')
                global level
                level = -2
            elif ball.intersects(b3):
                sound.play_effect('Bleep')
                global level
                level = 4
        def level4():
            tint(0, 0, 1)
            background(1, 1, 1)
            bw1 = self.size.w * 0.1
            bw2 = self.size.w - self.size.w * 0.1
            fill(0, 0, 0)
            rect(0, 0, self.size.w * 0.1, self.size.h)
            b1 = Rect(0, 0, self.size.w * 0.1, self.size.h)
            rect(self.size.w - self.size.w * 0.1, 0, self.size.w * 0.1, self.size.h)
            b2 = Rect(self.size.w - self.size.w * 0.1, 0, self.size.w * 0.1, self.size.h)
            rect(0, self.size.h - 40, self.size.w * 0.25, 20)
            b4 = Rect(0, self.size.h - 40, self.size.w * 0.25, 20)
            fill(0, 1, 0)
            rect(0, self.size.h - 20, self.size.w, 20)
            b3 = Rect(0, self.size.h - 20, self.size.w, 20)
            fill(1, 0, 0)
            grav = gravity()
            self.x += grav.x * 5
            self.y += grav.y * 5
            rect(self.x, self.y, 30, 30)
            ball = Rect(self.x, self.y, 30, 30)
            if ball.intersects(b1) or ball.intersects(b2) or ball.intersects(b4):
                sound.play_effect('Crashing')
                global level
                level = -2
            elif ball.intersects(b3):
                sound.play_effect('Bleep')
                global level
                level = 5
        def level5():
            tint(0, 0, 0)
            background(1, 1, 1)
            bw1 = self.size.w * 0.1
            bw2 = self.size.w - self.size.w * 0.1
            fill(0, 0, 0)
            rect(0, 0, self.size.w * 0.1, self.size.h)
            b1 = Rect(0, 0, self.size.w * 0.1, self.size.h)
            rect(self.size.w - self.size.w * 0.1, 0, self.size.w * 0.1, self.size.h)
            b2 = Rect(self.size.w - self.size.w * 0.1, 0, self.size.w * 0.1, self.size.h)
            rect(0, 20, self.size.w * 0.25, 20)
            b4 = Rect(0, 20, self.size.w * 0.25, 20)
            rect(self.size.w / 2 - 25, self.size.h / 2 - 25, 50, 50)
            b5 = Rect(self.size.w / 2 - 25, self.size.h / 2 - 25, 50, 50)
            fill(0, 1, 0)
            rect(0, 0, self.size.w, 20)
            b3 = Rect(0, 0, self.size.w, 20)
            fill(1, 0, 0)
            grav = gravity()
            self.x += grav.x * 5
            self.y += grav.y * 5
            rect(self.x, self.y, 30, 30)
            ball = Rect(self.x, self.y, 30, 30)
            if ball.intersects(b1) or ball.intersects(b2) or ball.intersects(b4) or ball.intersects(b5):
                sound.play_effect('Crashing')
                global level
                level = -2
            elif ball.intersects(b3):
                sound.play_effect('Bleep')
                global level
                level = 6
        def level6():
            tint(0, 0, 1)
            background(1, 1, 1)
            bw1 = self.size.w * 0.1
            bw2 = self.size.w - self.size.w * 0.1
            fill(0, 0, 0)
            rect(0, 0, self.size.w * 0.1, self.size.h)
            b1 = Rect(0, 0, self.size.w * 0.1, self.size.h)
            rect(self.size.w - self.size.w * 0.1, 0, self.size.w * 0.1, self.size.h)
            b2 = Rect(self.size.w - self.size.w * 0.1, 0, self.size.w * 0.1, self.size.h)
            rect(0, self.size.h - 40, self.size.w * 0.25, 20)
            b4 = Rect(0, self.size.h - 40, self.size.w * 0.25, 20)
            rect(self.size.w / 2 - 50, self.size.h / 2 - 50, 100, 100)
            b5 = Rect(self.size.w / 2 - 50, self.size.h / 2 - 50, 100, 100)
            fill(0, 1, 0)
            rect(0, self.size.h - 20, self.size.w, 20)
            b3 = Rect(0, self.size.h - 20, self.size.w, 20)
            fill(1, 0, 0)
            grav = gravity()
            self.x += grav.x * 5
            self.y += grav.y * 5
            rect(self.x, self.y, 30, 30)
            ball = Rect(self.x, self.y, 30, 30)
            if ball.intersects(b1) or ball.intersects(b2) or ball.intersects(b4) or ball.intersects(b5):
                sound.play_effect('Crashing')
                global level
                level = -2
            elif ball.intersects(b3):
                sound.play_effect('Bleep')
                global level
                level = -1
Gerzer

Here is the code part 2 (you need to combine part 1 and part 2 into 1 code file

        def leveln1():
            background(1, 1, 1)
            tint(0, 0, 1)
            text('You win!', font_size=32, x=self.size.w / 2, y=self.size.h / 2, alignment=5)
            text('Play again?', font_size=32, x=self.size.w / 2, y=self.size.h / 2 - 50, alignment=5)
            image('Typicons48_Thumbs_Up', self.size.w / 2 - 24, 0)
            for touch in self.touches.values():
                if self.size.w / 2 - 24 < touch.location.x < self.size.w / 2 + 24 and 0 < touch.location.y < 48:
                    global level
                    level = 1
                    self.y = self.size.h * 0.5
                    self.x = self.size.w * 0.5
        def leveln2():
            background(1, 1, 1)
            tint(0, 0, 1)
            text('You lose.', font_size=32, x=self.size.w / 2, y=self.size.h / 2, alignment=5)
            text('Play again?', font_size=32, x=self.size.w / 2, y=self.size.h / 2 - 50, alignment=5)
            image('Typicons48_Thumbs_Up', self.size.w / 2 - 24, 0)
            for touch in self.touches.values():
                if self.size.w / 2 - 24 < touch.location.x < self.size.w / 2 + 24 and 0 < touch.location.y < 48:
                    global level
                    level = 1
                    self.y = self.size.h * 0.5
                    self.x = self.size.w * 0.5
        if level == 0:
            level0()
        elif level == 1:
            level1()
        elif level == 2:
            level2()
        elif level == 3:
            level3()
        elif level == 4:
            level4()
        elif level == 5:
            level5()
        elif level == 6:
            level6()
        elif level == -1:
            leveln1()
        elif level == -2:
            leveln2()
        else:
            sys.exit()
run(velocity_run(), PORTRAIT)
Sebastian

Please use <PRE> put code here </PRE> when posting code
It will make the code more readable like this:

"example code"
for i in xrange(5):
        print i
Gerzer

@Sebastion Thanks! I couldn't figure out how do do that. Any suggestions in how to fix my problem are welcome.

Sebastian

I would suggest that you create the level functions outside of the draw function, and rather call them in the draw function when needed. Because now, you create the same functions over and over when each frame is drawn.

When dealing with global variables inside functions, I usually do something like this:

level = 0
def level1():
global level
# do whatever you want the function to do

    # change the global level variable if condition is True
    if condition:
        level = 1


In your case, you can probably just change the level variable to self.level instead, thus eliminating the need to use global variables.

ccc

Agreed...

  • Remove all lines that say 'global level'.
  • Change all instances of 'level =' to 'self.level ='.
  • You should be good to go.

    Of course, Sebastian's suggestion to create the level functions outside of draw() is good advise.

    Gerzer

    @Sebastion, @ccc Thanks a lot! Using

    self.level = 1
    instead of
    global level
    level = 1
    worked perfectly.