2016-07-11 7 views
0

Ich versuche ein Programm zu erstellen, das einen Würfel in einem Fenster auf und ab "springt". Alles ist richtig erstellt, aber der Würfel springt nicht.Graphics.py Bouncing Cube

Der Code ist wie folgt:

from graphics import * 
import time # Used for slowing animation if needed 
i=0 

def create_win(): 
    win= GraphWin("Animation",500,500) 
    cornerB1= Point(235,235) 
    cornerB2= Point(265,265) 
    Bob= Rectangle(cornerB1, cornerB2) 
    Bob.setFill('blue') 
    Bob.draw(win) 
    win.getMouse() 
    win.close() 
create_win() 

def main(): 
    cornerB1= Point(235,235) 
    cornerB2= Point(265,265) 
    Bob= Rectangle(cornerB1, cornerB2) 
    center= Rectangle.getCenter(Bob) 
    center_point= Point.getX(center) 
    for i in range(500): 
     Bob.move(0,5) 
     if center_point<15: 
      dy= -dy 
     elif center_point>485: 
      dy= -dy 

main() 

Jede Eingabe wäre sehr dankbar.

Antwort

0

Dies scheint zu viel Code mit zu wenig Planung zu sein. Spezifische Probleme: Sie erstellen Bob zweimal, einmal in jeder Funktion - der blaue Bob, den Sie sehen, ist nicht der Bob, den Sie bewegen; zu viele Zahlen - ermitteln Sie Ihre Grundmaße und berechnen Sie alles andere daraus; Sie extrahieren das Zentrum außerhalb der Schleife, so dass es sich nie ändert - tun Sie es innerhalb der Schleife, so dass es sich ändert, wenn Bob sich bewegt.

Unten ist eine Nacharbeit des Codes, der Bob auf und ab springt wie beabsichtigt:

from graphics import * 

WIDTH, HEIGHT = 500, 500 

BOB_SIZE = 30 
BOB_DISTANCE = 5 

def main(): 
    win = GraphWin("Animation", WIDTH, HEIGHT) 

    # Create Bob in the middle of the window 
    cornerB1 = Point(WIDTH/2 + BOB_SIZE/2, HEIGHT/2 + BOB_SIZE/2) 
    cornerB2 = Point(WIDTH/2 - BOB_SIZE/2, HEIGHT/2 - BOB_SIZE/2) 

    Bob = Rectangle(cornerB1, cornerB2) 
    Bob.setFill('blue') 
    Bob.draw(win) 

    dy = BOB_DISTANCE 

    for _ in range(500): 
     Bob.move(0, dy) 

     center = Rectangle.getCenter(Bob) 
     centerY = Point.getY(center) 

     # If too close to edge, reverse direction 
     if centerY < BOB_SIZE/2 or centerY > HEIGHT - BOB_SIZE/2: 
      dy = -dy 

    win.close() 

main()