from gettext import textdomain
from tkinter import *
import time
import random

win=Tk()
win.title('Арканоид 2024 Зе бест Гейм ин Десембер')
win.resizable(width=False,height=False)
canvas=Canvas(master=win,width=500,height=400)
canvas.pack()

class Ball:
    def __init__(self,canvas,color,paddle,target1,target2,target3,target4):
        self.canvas=canvas
        self.paddle=paddle
        self.target1 = target1
        self.target2 = target2
        self.target3 = target3
        self.target4 = target4
        self.life=3
        self.text1=self.canvas.create_text(450,390,text='♥',font='42')
        self.text2=self.canvas.create_text(465, 390, text='♥', font='42')
        self.text3=self.canvas.create_text(480, 390, text='♥', font='42')
        self.id=self.canvas.create_oval(10,10,25,25,fill=color)
        self.canvas.move(self.id,245,150)
        self.x=random.choice([-3,-2,-1,1,2,3])
        self.y=-3
    def hitTarget(self,posBall):
        try:
            posTarget1=self.canvas.coords(self.target1.id)
            if posBall[1]<posTarget1[3]:    #[x0,y0,x1,y1]
                if posBall[0]>posTarget1[0] and posBall[0]<posTarget1[2]:
                    return 1
                if posBall[2]>posTarget1[0] and posBall[2]<posTarget1[2]:
                    return 1
        except:
            pass

        try:
            posTarget2=self.canvas.coords(self.target2.id)
            if posBall[1]<posTarget2[3]:
                if posBall[0]>posTarget2[0] and posBall[0]<posTarget2[2]:
                    return 2
                if posBall[2]>posTarget2[0] and posBall[2]<posTarget2[2]:
                    return 2
        except:
            pass

        try:
            posTarget3=self.canvas.coords(self.target3.id)
            if posBall[1]<posTarget3[3]:
                if posBall[0]>posTarget3[0] and posBall[0]<posTarget3[2]:
                    return 3
                if posBall[2]>posTarget3[0] and posBall[2]<posTarget3[2]:
                    return 3
        except:
            pass
        try:
            posTarget4=self.canvas.coords(self.target4.id)
            if posBall[1]<posTarget4[3]:
                if posBall[0]>posTarget4[0] and posBall[0]<posTarget4[2]:
                    return 4
                if posBall[2]>posTarget4[0] and posBall[2]<posTarget4[2]:
                    return 4
        except:
            pass

        return 0

    def hitPaddle(self,posBall):
        posPaddle=self.canvas.coords(self.paddle.id)  #[x0,y0,x1,y1]
        if posBall[3]>posPaddle[1]:
            if posBall[0]>posPaddle[0] and posBall[0]<posPaddle[2]:
                return True
            if posBall[2]>posPaddle[0] and posBall[2]<posPaddle[2]:
                return True
        return False

    def draw(self):
        self.canvas.move(self.id,self.x,self.y)
        pos=self.canvas.coords(self.id) # pos=[x0,y0,x1,y1]
        if pos[1]<=0:
            self.y *= -1
        if pos[3]>=400:
            self.y *= -1
            self.life -= 1
            if self.life==2:
                self.canvas.delete(self.text1)
            elif self.life==1:
                self.canvas.delete(self.text2)
            elif self.life==0:
                self.canvas.delete(self.text3)
        if pos[0]<=0:
            self.x *= -1
        if pos[2]>=500:
            self.x *= -1
        if self.hitPaddle(pos):
            self.y *= -1
        if self.hitTarget(pos)==1:
            self.y *= -1
            self.canvas.delete(self.target1.id)
        if self.hitTarget(pos)==2:
            self.y *= -1
            self.canvas.delete(self.target2.id)
        if self.hitTarget(pos)==3:
            self.y *= -1
            self.canvas.delete(self.target3.id)
        if self.hitTarget(pos)==4:
            self.y *= -1
            self.canvas.delete(self.target4.id)

class Paddle:
    def __init__(self,canvas,color):
        self.canvas=canvas
        self.id=canvas.create_rectangle(0,0,100,10,fill=color)
        self.canvas.move(self.id,200,350)
        self.x=0
        self.canvas.bind_all('<KeyPress-Left>', self.moveLeft)
        self.canvas.bind_all('<KeyPress-Right>', self.moveRight)
    def moveLeft(self,event):
        self.x = -3
    def moveRight(self,event):
        self.x = 3
    def draw(self):
        self.canvas.move(self.id,self.x,0)
        pos=self.canvas.coords(self.id) # [x0,y0,x1,y1]
        if pos[0]<=0:
            self.x = 0
        if pos[2]>=500:
            self.x = 0

class Target:
    def __init__(self,canvas,color,x0,y0,x1,y1):
        self.id=canvas.create_rectangle(x0,y0,x1,y1,fill=color)

target1=Target(canvas,'lime',20,10,120,20)
target2=Target(canvas,'lime',140,10,240,20)
target3=Target(canvas,'lime',260,10,360,20)
target4=Target(canvas,'lime',380,10,480,20)

paddle=Paddle(canvas,'magenta')
ball=Ball(canvas,'purple',paddle,target1,target2,target3,target4)

name=canvas.create_text(100,390,text='рома ',font='32')

while True:
    if ball.life<0:
        game=canvas.create_text(250,200,text='GAME',font='56')
        over = canvas.create_text(250, 250, text='OVER', font='56')
        win.update()
    else:
        ball.draw()
        paddle.draw()
        win.update()
        time.sleep(0.01)