import pygame
from random import randrange
from pygame.locals import *


# Création de la fenêtre :
pygame.init()
fenetre = pygame.display.set_mode((640, 480))
xbouger=0

# Affichage graphique :
## Affichage du fond :
fond=pygame.image.load("Fond.png").convert()
fenetre.blit(fond,(xbouger,0))
## Affichage du sol :
sol=pygame.image.load("Sol.png").convert()
fenetre.blit(sol,(xbouger,360))
## Affichage perso :
perso=pygame.image.load("Perso.png").convert()
position_perso=perso.get_rect()
position_perso.move_ip(30,330)
fenetre.blit(perso,position_perso)

# Fonction victoire :
def gagné() :
    font = pygame.font.Font(None, 36)
    text = font.render("Gagné !", 1, (10, 10, 10))
    fenetre.blit(text,(260,240))

# Fonction perdre :
def perdu() :
    font5 = pygame.font.Font(None,36)
    text5 = font5.render("Perdu !",1,(10,10,10))
    fenetre.blit(text5,(260,240))

# Boucle d'avant jeu :
continuer=True
continuer2=True
while continuer2==True :
    font2 = pygame.font.Font(None, 36)
    text2 = font2.render("Appuies à tout moment sur echap pour quitter", 1, (10, 10, 10))
    fenetre.blit(text2,(10,150))

    font3 = pygame.font.Font(None, 36)
    text3 = font3.render("Saute par dessus les trous avec espace", 1, (10, 10, 10))
    fenetre.blit(text3,(10,180))

    font4 = pygame.font.Font(None, 36)
    text4 = font4.render("Appuies sur espace pour commencer", 1, (10, 10, 10))
    fenetre.blit(text4,(10,210))
    
    for event in pygame.event.get():
        if event.type==KEYDOWN :
            if event.key==K_ESCAPE :
                continuer=False
                continuer2=False
            if event.key==K_SPACE :
                continuer2=False
                
    pygame.display.flip()
    
# Boucle principale du jeu :
## Variables pour les trous :
L=[]
for indice in range(50):
    L.append(300+indice*200)
print(L)
choixtrou=0
compteurchoixtrou=0
distance=L[choixtrou]+xbouger-30
tempstrou=((distance/150)*30)+6

# Variables utilitaires :
perdre=False
gagner=False
saut=False
enlair=False

while continuer==True :
    pygame.time.Clock().tick(30)
    
    ## Evenements au clavier :
    for event in pygame.event.get():
        ### Assignation des touches :
        if event.type==KEYDOWN :
            #### Quitter avec echap :
            if event.key==K_ESCAPE :
                continuer=False
            #### Saut :
            tuple1=(30,290) # Calcul de la position du perso
            b=tuple1[1]-position_perso[1]
            if event.key==K_SPACE and b<0 and enlair==False :
                saut=True
                
    if saut==True :
        tuple1=(30,290) # Calcul de la position du perso
        b=tuple1[1]-position_perso[1]
        position_perso=position_perso.move(0,-3) # On déplace le perso
        if b>0 : # On détecte le sommet du saut
            enlair=True # On empeche le "re-saut"
            saut=False
    if saut==False and position_perso[1]<=330 : # On fait retomber le perso et on detecte le contact du sol
        tuple1=(30,290) # Calcul de la position du perso
        b=tuple1[1]-position_perso[1]
        position_perso=position_perso.move(0,3)
    if position_perso[1]>=330 :
        enlair=False

    # Faire avancer le jeu :
    xbouger-=5

    # Choix et apparition du trou :
    trou=pygame.image.load("Trou.png").convert()
    fenetre.blit(trou,(xbouger+L[choixtrou],360))
    compteurchoixtrou+=1
    if compteurchoixtrou==tempstrou :
        choixtrou+=1
        compteurchoixtrou=0
        distance=L[choixtrou]+xbouger-30
        tempstrou=((distance/150)*30)+6


    # Détéction des trous :
    if position_perso[0]>=L[choixtrou]+xbouger and position_perso[0]<=L[choixtrou]+xbouger+20 and position_perso[1]>=330 :
        perdre=True

    # Perdu ! :
    if perdre==True :
        xbouger=-9790
        perdu()

    # Détéction de l'arrivée :
    if xbouger<-9800 :
        gagner=True

    # Gagné ! :
    if gagner==True :
        xbouger=-9790
        gagné()
            
    # Actualisation des images :
    fenetre.blit(fond,(xbouger,0))
    fenetre.blit(sol,(xbouger,360))
    fenetre.blit(perso,position_perso)
    fenetre.blit(trou,(xbouger+L[choixtrou],360))
    
    # Rafraichissement de l'image :
    pygame.display.flip()


    
        

        

    

