【问题标题】:How can I randomly move a ball on a canvas in Python? [closed]如何在 Python 中随机移动画布上的球? [关闭]
【发布时间】:2014-06-21 21:19:00
【问题描述】:

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

这里是代码: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: 

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

【问题讨论】:

  • 您还没有向我们展示为 dxdy 赋值的代码 - 这就是决定球移动的地方,也是您的第一个问题所在。
  • @jonrsharpe 你为什么搁置我的话题?我认为 Brionius 的答案不会太长,而且答案是正确且有帮助的。我不明白。

标签: python canvas random tkinter


【解决方案1】:

对于您的第一个问题,为什么不直接随机化 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。

【讨论】:

  • 游戏的完整代码在帖子中,如果对您有帮助的话。 x, y = 250, 250 dx, dy = 10, 10 r = 20 标志 = 0 移动 = True
  • 啊,我错过了。添加到我的答案中。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-03-08
  • 2021-11-27
  • 1970-01-01
  • 2021-04-30
  • 1970-01-01
  • 2023-03-09
  • 1970-01-01
相关资源
最近更新 更多