from tkinter import *
import random
import time

win=Tk()
win.title('Arcanoid 2025')
win.resizable(0,0)
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.life = 5
        self.text=self.canvas.create_text(450,380,font='26',text='Life: '+str(self.life))
        self.paddle=paddle
        self.target1=target1
        self.target2=target2
        self.target3=target3
        self.target4=target4
        self.id=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 draw(self):
        self.canvas.move(self.id,self.x,self.y)
        pos=self.canvas.coords(self.id)
        if pos[1]<=0:
            self.y *= -1
        if pos[3]>=400:
            self.y *= -1
            self.life -= 1
            self.canvas.delete(self.text)
            self.text=self.canvas.create_text(450,380,font='26',text='Life: '+str(self.life))
        if pos[0]<=0:
            self.x *= -1
        if pos[2]>=500:
            self.x *= -1
        if self.hitPaddle(pos)==True:
            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)

    def hitPaddle(self,posBall):
        posPaddle=self.canvas.coords(self.paddle.id)
        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 hitTarget(self,posBall):
        try:
            posTarget1=self.canvas.coords(self.target1.id)
            if posBall[1]<=posTarget1[3]:
                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

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 draw(self):
        self.canvas.move(self.id,self.x,0)
        pos=self.canvas.coords(self.id)
        if pos[0]<=0:
            self.x=0
        if pos[2]>=500:
            self.x=0
    def moveLeft(self,event):
        self.x = -2
    def moveRight(self,event):
        self.x = 2

class Target:
    def __init__(self,canvas,color,x0,y0,x1,y1):
        self.canvas=canvas
        self.id=self.canvas.create_rectangle(x0,y0,x1,y1,fill=color)




target1=Target(canvas,'green',20,10,120,20)
target2=Target(canvas,'pink',140,10,240,20)
target3=Target(canvas,'black',260,10,360,20)
target4=Target(canvas,'yellow',380,10,480,20)

paddle=Paddle(canvas,'blue')
ball=Ball(canvas,'red',paddle,target1,target2,target3,target4)
canvas.create_text(40,380,text='VBorus',font='26')
while True:
    if ball.life>0:
        ball.draw()
        paddle.draw()
    else:
        canvas.delete(ball.text)
        canvas.create_text(250,200,text='GAME OVER',font='42')
    win.update()
    time.sleep(0.01)