from tkinter import *
W, H, T = 700, 400, 50
pw, ph, pd = 150, 20, 10
px, py = 200, H - ph - 30
p2x, p2y = 50, H - ph - 50
kx, ky, kw, kd = 100, 100, 20, 7
dx, dy = kd, kd
cnt = 0
def bum(p):
# kp[0] kp[1] kp[2] kp[3]
# x1 y1 x2 y2
global dy, cnt
kball = can.coords(ball)
kp = can.coords(p)
if (kball[3] > kp[1]) and \
(kball[0] < kp[2]) and \
(kball[2] > kp[0]) and (dy > 0):
dy = -dy
cnt += 1
if kball[2] > H:
print(kball[2])
can.itemconfig(txt, text=str(cnt))
#else:
# can.itemconfig(txt, text="")
def move_ball():
global dx, dy
kball = can.coords(ball)
if (kball[0] < 0) or (kball[2] > W):
dx = -dx
if (kball[1] < 0) or (kball[3] > H):
dy = -dy
can.move(ball, dx, dy)
bum(p)
bum(p2)
win.after(T, move_ball)
def move_p(event):
pk = can.coords(p)
p2k = can.coords(p2)
if event.keycode == 37:
if pk[2] < 0:
can.moveto(p, W - pd, pk[1])
else:
can.move(p, -pd, 0)
elif event.keycode == 39:
if pk[0] > W:
can.moveto(p, 0 - pw, pk[1])
else:
can.move(p, pd, 0)
elif event.keycode == 65:
if p2k[2] < 0:
can.moveto(p2, W - pd, p2k[1])
else:
can.move(p2, -pd, 0)
elif event.keycode == 68:
if p2k[0] > W:
can.moveto(p2, 0 - pw, p2k[1])
else:
can.move(p2, pd, 0)
win = Tk()
can = Canvas(win, width=W, height=H, bg="lightcyan")
ball = can.create_oval(kx, ky, kx + kw, ky + kw, fill="Red")
p = can.create_rectangle(px, py, px + pw, py + ph, fill="Blue")
p2 = can.create_rectangle(p2x, p2y, p2x + pw, p2y + ph, fill="Green")
txt = can.create_text(W - 10, 10, font=('', 30), text="Статус", anchor=NE)
can.pack()
win.after(T, move_ball)
win.bind('<Key>', move_p)
win.resizable(0, 0)
win.wm_attributes("-topmost", 1)
win.mainloop()