2016-07-11 2 views
0

J'essaye de créer un programme qui "rebondit" un cube dans une fenêtre de haut en bas. Tout est créé correctement mais le cube ne rebondira pas.Graphics.py Bouncing Cube

Le code est le suivant:

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() 

Toute entrée serait grandement apprécié.

Répondre

0

Cela semble être trop de code avec trop peu de planification. Problèmes spécifiques: vous créez Bob deux fois, une fois dans chaque fonction - le Bob bleu que vous voyez n'est pas le Bob que vous déplacez; trop de nombres - calculez vos dimensions de base et calculez tout le reste d'eux; vous extrayez le centre en dehors de la boucle pour qu'il ne change jamais - faites-le dans la boucle pour que ça change au fur et à mesure que Bob bouge.

Ci-dessous est une refonte de votre code qui rebondit Bob et vers le bas comme prévu:

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()