from tkinter import *
import random

root=Tk()

#Appearence
RTitle=root.title("Protect'em")
RWidth=400
RHeight=500
root.geometry(("%dx%d")%(RWidth,RHeight))

fr0 = Frame(root,bg="#DEB887",width=210,height=500,bd=10)
can = Canvas(fr0,bg="#FFF8DC",width=200,height=500)
fr1 = Frame(root,bg="lightblue",width=190,height=500,bd=12)
fr0.pack(side="left")
can.pack()
fr1.pack(side="right")



inv = Label(fr1,text="Move: \nLeft, Right.\n Shoot:\n Space\nYou've got 5 lifes\n Shoot to START",
            font = "Arial 15")
inv.grid(row=0)

#/Appearence

xy = [(90,400),(110,400),(110,420),(130,420),(130,440),(110,440),(110,460),
(130,460),(130,480),(70,580),(70,460),(90,460),(90,440),
(70,440),(70,420),(90,420)]
car = can.create_polygon(xy,fill="red",outline="black")
car_place = can.coords(car)


class Hero():

    def __init__ (self):
        self.points = 0
        self.car_shoot_number = 1
        self.hero_lifes = 5

    def car_move_left(self,event):
        self.car_place = can.coords(car)
        if self.car_place[18]>=10:
            self.car_shoot_number -= 1
            can.move(car,-70,0)


    def car_move_right(self,event):
        self.car_place = can.coords(car)
        if self.car_place[6]<200:
            self.car_shoot_number += 1
            can.move(car,70,0)

class Enemy(Hero):
    def create_rock(self):
        self.rocktype = random.randint(0,2)
        if self.rocktype == 0:
            self.rock = can.create_rectangle(30,10,50,30,fill="black",
                                            outline="green")

        elif self.rocktype == 1:
            self.rock = can.create_rectangle(90,10,110,30,fill="black",
                                            outline="green")

        elif self.rocktype == 2:
            self.rock = can.create_rectangle(150,10,170,30,fill="black",
                                            outline="darkgreen")
        else: print("it cant be")

    def delete_rock(self):
        can.delete(self.rock)


    def endgame(self):
        root.destroy()
        self.root = Tk()
        self.endsight = Label(self.root, text = "Game Is Over\n Your Score:", font="Arial 20")
        self.endsight1 = Label(self.root,text = hero.points, font="Arial 20")
        self.endsight1.pack(side="bottom")
        self.endsight.pack(side="top")
        self.root.mainloop()

    def enemymove(self):
        can.move(self.rock,0,20)
        can.after(30,self.enemymove)
        self.rock_place = can.coords(self.rock)
        if self.rock_place[1]==410 and hero.car_shoot_number == self.rocktype:
            self.delete_rock()
            enemy.create_rock()
            hero.hero_lifes -= 1
            #print(hero.hero_lifes)
        elif self.rock_place[1]>470:
            hero.hero_lifes -= 1
           # print(hero.hero_lifes)
            self.delete_rock()
            enemy.create_rock()
        if hero.hero_lifes == 0:
                self.endgame()


    def shootem(self,event):
        if hero.car_shoot_number == self.rocktype:
            hero.points += 1
            poin.addtext(hero.points)
            #print(self.points)
            can.delete(self.rock)
            enemy.create_rock()


class Points():
    def __init__ (self):
        self.point = Text(fr1, width = 10, height = 1)
        self.point.grid(row=1)


    def addtext(self, point):
        #print(enemy.points)
        self.point.delete(1.0,END)
        self.point.insert(END,point)


hero=Hero()
enemy = Enemy()
enemy.create_rock()
enemy.enemymove()
poin = Points()

root.bind("<space>",enemy.shootem)
root.bind("<Left>",hero.car_move_left)
root.bind("<Right>",hero.car_move_right)

mainloop()