Я не знаю, понимаете ли вы это, но вы перекрываете все цветные точки (попробуйте изменить ширину любого овала на 3 или 4, и вы поймете это).Вам необходимо рассчитать, совместимы ли значения x и y в соответствии с этой строкой y = 2x/3
(для компьютера ось Y инвертирована, поэтому y = 400 - 2x/3
).Тогда и только тогда вы будете рисовать на этом холсте.Вот пример.
import tkinter
import random
previerka = tkinter.Tk()
canvas = tkinter.Canvas(previerka, width=600, height=400)
canvas.pack()
frame = tkinter.Frame(previerka)
frame.pack()
def shooting1():
y = 0
x = 0
i = 0
r =("%02x"%random.randint(0,255))
g = ("%02x"%random.randint(0,255))
b = ("%02x"%random.randint(0,255))
rand_color="#"+r+g+b
for _ in range(20000):
xr = random.randint(0,600)
yp = random.randint(0,400)
if yp<=400-2*xr//3:
if xr < 100:
canvas.create_oval(x+xr,y+yp,x+xr,y+yp, outline="yellow", width=2)
elif xr < 200:
canvas.create_oval(x+xr,y+yp,x+xr,y+yp, outline="black", width=2)
elif xr < 300:
canvas.create_oval(x+xr,y+yp,x+xr,y+yp, outline="blue", width=2)
elif xr < 400:
canvas.create_oval(x+xr,y+yp,x+xr,y+yp, outline="green", width=2)
elif xr < 500:
canvas.create_oval(x+xr,y+yp,x+xr,y+yp, outline="white", width=2)
elif xr <= 600:
canvas.create_oval(x+xr,y+yp,x+xr,y+yp, outline="red", width=2)
else:
canvas.create_oval(x+xr,y+yp,x+xr,y+yp, outline=rand_color, width=2)
button1=tkinter.Button(frame, text="shooting", fg="black", bg="white", command=shooting1)
button1.pack()
previerka.mainloop()
