from casioplot import *
from random import *


cor = 10  # coordonnee ordonnee rond haut droit
car = 60  # coordonnee abscisse rond haut gauche
cob = 50  # coordonnee ordonnee barre haut gauche
cab = 60  # coordonnee abscisse barre haut gauche
x1 = 0  # pour le deplacement du carre
y1 = 0
x2 = 0  # pour le déplacement de la barre
y2 = 0
x3 = 0
y3 = 0  # pour que le carre reste bien
ib = 1  # inversion barre
tb = 10  # taille barre
sc = 0  # score brut
sco = "score: " + str(sc)  # score phrase
tp = 200  # temps pause
sc1 = 3  # PV brut
sc_fin = "t'a eu " + str(sc) + " points"  # score final phrase
sco1 = "Pv restants: " + str(sc1) # PV phrase
r0 = 0  # pour la generation d'entre -1 et 1



# création du rond qui se deplace
def rond():
    set_pixel(car+1, cor)
    set_pixel(car+2, cor)
    set_pixel(car, cor+1)
    set_pixel(car+3, cor+1)
    set_pixel(car, cor+2)
    set_pixel(car+3,  cor+2)
    set_pixel(car+1, cor+3)
    set_pixel(car+2, cor+3)
    show_screen()


# pour une valeur aléatoire entre 1 et -1 sauf 0
def randint_0():
    global r0
    r0 = randint(-1, 1)
    for k in range(3):
        if r0 == 0:
            r0 = randint(-1, 1)
        else:
            return r0

    
# rond qui bouge avec x=abscisse et y=ordonnee, ATTENTION!! ne pas oublier les - !!!
def bouger_c(x, y):
    global cor, car
    global x1, y1
    x1, y1 = x, y
    clear_screen()
    rond()
    barre()
    car, cor = car+x, cor+y
    for i in range(tp):
        print()

# verifie si le carre touche un bord
def verif_c():
    global cor, car
    if car+4 >= 128:
        bouger_c(-x1, y1)
    elif car <= 0:
        bouger_c(-x1, y1)
    elif cor <= 0:
        bouger_c(x1, -y1)

        
# création barre
def barre():
    for k in range(2):
        for i in range(tb):
            set_pixel(cab+i, cob+k)
    rond()
    show_screen()

# déplacement barre en fonction de ib avec ib=1 alors droite sinon gauche
def bouger_b(x, y):
    global x2, y2
    global cob, cab
    x2, y2 = x, y
    if ib == 1:
        cab += 2
    else:
        cab -= 2
    for k in range(tp//2):
        print()
    clear_screen()
    verif_b()
    barre()
    show_screen()

# inversion ib
def iib():
    global ib
    ib = -ib
    activation()


# verification si la barre touche un bord
def verif_b():
    global cab
    if cab+tb >= 128:
        cab = 3
    elif cab <= 0:
        cab = 117-tb
    for k in range(300):
        print()
    clear_screen()
    barre()



# verication colision ou non-colision carre/barre
def verif_co():
    global cor, car, cob, cab
    if cor<cob<cor+4 and car<=cab+tb and car>=cab:
        score1()
        bouger_c(x1, -y1)
    elif cor+4 >= 57:
        pv1()
        cor, car = 10, 60
        bouger_c(randint_0(), randint_0())
    clear_screen()
    pv()
    score()
    rond()
    barre()
    show_screen()

# retire 1 pv
def pv1():
    global sc1
    global sco1
    sc1 -= 1
    sco1 = "Pv restants: " + str(sc1)
    pv()

# affichage PV
def pv():
    draw_string(65, 55, sco1, (0, 0, 0), "small")
    verif_pv()
    show_screen()

# ajout 1 point score
def score1():
    global sc
    global sco
    sc += 1
    sco = "score: " + str(sc)
    score()


#  affichage score
def score():
    draw_string(5, 55, sco, (0, 0, 0), "small")
    show_screen()


# verifie si on a encore des pvs
def verif_pv():
    if sc1 == 0:
        anim_d()
        for k in range(3000):
            print()
        exit()
    else:
        print()

# animation debut
def anim():
    clear_screen()
    draw_string(38, 25, "PONG", (0, 0, 0), "medium")
    show_screen()

    # haut gauche
    for k in range(40):
        for i in range(40-k):
            set_pixel(k, i)
            show_screen()
    
    # haut droite
    for k in range(40):
        for i in range(40-k):
            set_pixel(127-k, i)
            show_screen()
    # bas gauche
    for k in range(40):
        for i in range(40-k):
            set_pixel(k, 63-i)
            show_screen()
    # bas droite
    for k in range(40):
        for i in range(40-k):
            set_pixel(127-k, 63-i)
            show_screen()
    for k in range(1000):
        print()

# animation mort
def anim_d():
    global sc_fin
    sc_fin = "t'a eu " + str(sc) + " points !"
    clear_screen()
    draw_string(38, 20, "Ah shit,", (0, 0, 0), "small")
    draw_string(15, 30, "here we go again", (0, 0, 0), "small")
    draw_string(15, 40, sc_fin, (0, 0, 0), "small")
    show_screen()

    # haut gauche
    for k in range(40):
        for i in range(40-k):
            set_pixel(k, i)
            show_screen()
    
    # haut droite
    for k in range(40):
        for i in range(40-k):
            set_pixel(127-k, i)
            show_screen()
    # bas gauche
    for k in range(40):
        for i in range(40-k):
            set_pixel(k, 63-i)
            show_screen()
    # bas droite
    for k in range(40):
        for i in range(40-k):
            set_pixel(127-k, 63-i)
            show_screen()
    for k in range(1000):
        print()


# activation qui ne s'active qu'une fois
anim()

bouger_c(1, 1)
x1, y1 = 1, 1

print("quoi comme difficulté ?")
print("1,  2, 3 ?")
print(" ou 4 (dur) ?")
print("ou 5 (ultime) ?")
tp = input(">>>    ")
if tp == "1":
    tp = 180
    tb = 20
elif tp == "2":
    tp = 80
    tp = 15
elif tp == "3":
    tp = 30
    tb = 8
elif tp == "4":
    tp = 20
    tb = 6
elif tp == "5":
    tp = 5
    tb = 2
else:
    print("heu.... récris bien!")



# activation code
def activation():
    while True:
        try:
            bouger_b(1, 1)
            score()
            pv()
            bouger_c(x1, y1)
            verif_co()
            score()
            pv()
            verif_c()
            verif_co()
            score()
            pv()
            verif_co()
        except KeyboardInterrupt:
            iib()



activation()