omz:forum

    • Register
    • Login
    • Search
    • Recent
    • Popular

    Welcome!

    This is the community forum for my apps Pythonista and Editorial.

    For individual support questions, you can also send an email. If you have a very short question or just want to say hello — I'm @olemoritz on Twitter.


    Velocity Run

    Pythonista
    3
    8
    4449
    Loading More Posts
    • Oldest to Newest
    • Newest to Oldest
    • Most Votes
    Reply
    • Reply as topic
    Log in to reply
    This topic has been deleted. Only users with topic management privileges can see it.
    • Gerzer
      Gerzer last edited by

      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.

      1 Reply Last reply Reply Quote 0
      • Gerzer
        Gerzer last edited by

        Here is the code part 1
        <PRE>
        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
        </PRE>

        1 Reply Last reply Reply Quote 0
        • Gerzer
          Gerzer last edited by

          Here is the code part 2 (you need to combine part 1 and part 2 into 1 code file
          <PRE>
          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)
          </PRE>

          1 Reply Last reply Reply Quote 0
          • Sebastian
            Sebastian last edited by

            Please use <i><PRE> put code here </PRE></i> when posting code
            It will make the code more readable like this:
            <PRE>"example code"
            for i in xrange(5):
            print i</PRE>

            1 Reply Last reply Reply Quote 0
            • Gerzer
              Gerzer last edited by

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

              1 Reply Last reply Reply Quote 0
              • Sebastian
                Sebastian last edited by

                I would suggest that you create the level functions <i>outside</i> 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: <PRE>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
                

                </PRE>
                In your case, you can probably just change the <I>level</i> variable to <I>self.level</i> instead, thus eliminating the need to use global variables.

                1 Reply Last reply Reply Quote 0
                • ccc
                  ccc last edited by

                  Agreed...
                  <li>Remove all lines that say 'global level'.</li>
                  <li>Change all instances of 'level =' to 'self.level ='.</li>

                  You should be good to go.

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

                  1 Reply Last reply Reply Quote 0
                  • Gerzer
                    Gerzer last edited by

                    @Sebastion, @ccc Thanks a lot! Using <PRE>self.level = 1</PRE> instead of <PRE>global level
                    level = 1</PRE> worked perfectly.

                    1 Reply Last reply Reply Quote 0
                    • First post
                      Last post
                    Powered by NodeBB Forums | Contributors