如何在Python中随机移动画布上的球?

时间:2014-06-21 21:19:01

标签: python canvas random tkinter

我创造了一个小游戏,但我遇到了一些问题。

以下是代码:http://pastebin.com/XkSvLAHS

所以,有一个球应该在画布上随机移动,但我现在不知道如何做到这一点。 我有这个:

def move_ball_right_down(): 
    global x, y, dx, dy 

    x, y = x + dx, y + dy 

    can.coords(ball, x-r, y-r, x+r, y+r) 

def move_ball_left_up(): 
    global x, y, dx, dy 

    x, y = x - dx, y - dy 

    can.coords(ball, x-r, y-r, x+r, y+r)

但是有了这个,球只会从一个角落到另一个角落,但它应该随机移动。

我还有另外一个问题:

def click_ball(event): 
    global x, y, points, ball, r, dx, flag 

    if flag == 1 and\ 
    event.x <= x + r and event.x >= x - r and\ 
    event.y <= y + r and event.y >= y - r: 

这些线假设检测球,所以当我点击它时我得到一个点,但它不仅选择球,而且选择围绕它的正方形,我确信有更好的方法来检测球。我该怎么办?

1 个答案:

答案 0 :(得分:0)

对于您的第一个问题,为什么不随机化x和y,忘记dxdy

def move_ball_right_down(): 
    global x, y

    x, y = randrange(0, 400), randrange(0, 400)  # Randomize x and y (note that you should substitute your max and min canvas coordinate values if you want the ball to stay in view.

    can.coords(ball, x-r, y-r, x+r, y+r) 

关于第二个问题,如果您希望用户必须单击球本身,而不是单击边界矩形上的任何位置,请将最后if语句更改为:

if flag == 1 and ((event.x-x)**2 + (event.y-y)**2) <= r**2:

这基本上是毕达哥拉斯公式,表明点(event.x,event.y)和(x,y)之间的距离小于或等于r。