向随机化添加更多运动,添加带有矩阵的网格:Tkinter,Python

向随机化添加更多运动,添加带有矩阵的网格:Tkinter,Python,python,tkinter,random,Python,Tkinter,Random,我试图使球在所有方向上随机移动(上、下、右、左、对角),并使用矩阵实现网格。网格中的每个长方体将保持值20,当球在长方体上移动时,长方体的值将下降1 我的主要问题是让球有更多的运动,而不仅仅是对角线。 代码如下: 从tkinter导入* 从随机导入randint 导入时间 班级舞会: 定义初始化(自我、画布、颜色): 宽度=1280 高度=720 self.alive=True self.canvas=画布 self.id=canvas.create_oval(30,30,50,50,fill=

我试图使球在所有方向上随机移动(上、下、右、左、对角),并使用矩阵实现网格。网格中的每个长方体将保持值20,当球在长方体上移动时,长方体的值将下降1

我的主要问题是让球有更多的运动,而不仅仅是对角线。

代码如下:

从tkinter导入*
从随机导入randint
导入时间
班级舞会:
定义初始化(自我、画布、颜色):
宽度=1280
高度=720
self.alive=True
self.canvas=画布
self.id=canvas.create_oval(30,30,50,50,fill=color)
self.canvas.move(self.id,640360)
self.vx=randint(0,2)
self.vy=randint(0,2)
self.canvas_width=self.canvas.winfo_width()
self.canvas_height=self.canvas.winfo_height()
def移动(自我):
self.canvas.move(self.id、self.vx、self.vy)
pos=self.canvas.coords(self.id)
如果位置[0]=self.canvas\u宽度:
self.vx=-1
如果位置[1]=自身高度:
self.vy=-1
def杀死(自我):
self.alive=False
def main():
tk=tk()
标题(“蜜蜂球”)
tk.可调整大小(False,False)
tk.wm_属性(“-toppost”,1)
画布=画布(tk,bg=“白色”,宽度=1280,高度=720,bd=0,高光厚度=0)
canvas.pack()
tk.update()
协议(“WM_DELETE_WINDOW”,lambda:ball1.kill())
ball1=球(画布,“黑色”)
在鲍尔活着的时候:
tk.update()
球1.移动
睡眠时间(0.005)
tk.destroy()
如果名称=“\uuuuu main\uuuuuuuu”:
main()

如果有人能在网格方面提供帮助,那么给我一些资源来研究如何使用tkinter创建网格或帮助使用矩阵,那将很酷。

“我的主要问题是让球有更多的运动。”这一点相当模糊。你说的“更多的移动”是什么意思?我试图让一个球在所有方向上随机移动(上、下、右、左、对角)。现在,球只是从屏幕中间沿对角线移动到右下角。我不知道该怎么做。解决办法只是基础数学。您是否尝试过更改
self.vx
self.vy
的值?是的。我有,但球只在对角线上移动。目标是当球移动时,它应该在整个屏幕上移动,而不仅仅是在一条路径上。如果你改变x而不是y,它会水平移动。“我的主要问题是让球移动更多。”这一点相当模糊。你说的“更多的移动”是什么意思?我试图让一个球在所有方向上随机移动(上、下、右、左、对角)。现在,球只是从屏幕中间沿对角线移动到右下角。我不知道该怎么做。解决办法只是基础数学。您是否尝试过更改
self.vx
self.vy
的值?是的。我有,但球只在对角线上移动。目标是当它移动时,它应该在整个屏幕上移动,而不仅仅是在一条路径上。如果你改变x而不是y,它会水平移动。
from tkinter import *
from random import randint
import time

class Ball: 
    def __init__(self,canvas,color):
        width = 1280
        height = 720        
        self.alive = True
        self.canvas = canvas 
        self.id = canvas.create_oval(30, 30, 50, 50, fill=color) 
        self.canvas.move(self.id, 640, 360)
        self.vx = randint(0,2)
        self.vy = randint(0,2)
        self.canvas_width = self.canvas.winfo_width() 
        self.canvas_height = self.canvas.winfo_height() 

    def move(self): 
        self.canvas.move(self.id, self.vx, self.vy) 
        pos = self.canvas.coords(self.id) 
        if pos[0] <= 0:
            self.vx = 1
        if pos[2] >= self.canvas_width:
            self.vx = -1
        if pos[1] <= 0:
            self.vy = 1
        if pos[3] >= self.canvas_height: 
            self.vy = -1

    def kill(self):
        self.alive = False

def main():
    tk = Tk()
    tk.title("Bee Ball")
    tk.resizable(False, False)
    tk.wm_attributes("-topmost", 1)
    canvas = Canvas(tk, bg="white", width=1280, height=720, bd=0, highlightthickness=0)
    canvas.pack()
    tk.update()

    tk.protocol("WM_DELETE_WINDOW", lambda: ball1.kill())

    ball1 = Ball(canvas, "black")
    while ball1.alive:
        tk.update()
        ball1.move()
        time.sleep(0.005)
    tk.destroy()

if __name__ == "__main__":
    main()