I am trying to create a program that "bounces" a cube in a window up and down. Everything is created properly but the cube will not bounce.
The code is as follows:
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()
Any input would be greatly appreciated.
答案 0 :(得分:0)
这似乎是太多的代码,计划太少。具体问题:你创建Bob两次,每个函数一次 - 你看到的蓝色Bob不是你正在移动的Bob;太多的数字 - 找出你的基础尺寸并计算其他所有东西;你在循环外提取中心所以它永远不会改变 - 在循环内部进行,以便随着Bob的移动而改变。
以下是您的代码的返工,可以按预期上下跳动Bob:
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()