2016-07-11 5 views
0

Я пытаюсь создать программу, которая «отскакивает» куб в окне вверх и вниз. Все создано правильно, но куб не отскакивает.Graphics.py Bouncing Cube

Код выглядит следующим образом:

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

Любой вклад будет высоко оценен.

ответ

0

Это, кажется, слишком много кода с слишком маленьким планированием. Конкретные проблемы: вы создаете Боб дважды, один раз в каждой функции - синий Боб, которого вы видите, это не тот Боб, с которым вы двигаетесь; слишком много цифр - выясните размеры базы и вычислите все остальное от них; вы извлекаете центр за пределы цикла, чтобы он никогда не менялся - делайте это внутри цикла, чтобы он менялся, когда Боб двигался.

Ниже переработан код, который отскакивает Боб вверх и вниз по назначению:

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