#################################################################
#######     DEFINITION DU JEU            ########################
#################################################################

#classe qui represente le jeu
class Jeu():

    # initialisation du jeu
    def __init__(self):
        # creer x incremente a chaque iteration
        self.x=0
        # jeu_fini est un boolean qui precise quand le jeu est fini
        self.jeu_fini = False


    # evolution du jeu
    def evoluer(self):
        # incremente x
        self.x=self.x+1


    # gestion des evenements
    def traiter_evenement(self):
        # on traite chaque evenement genere par pygame
        for event in pygame.event.get():
            # si on appuye sur espace => arret du jeu
            if event.type == pygame.KEYDOWN:
                if event.key == pygame.K_SPACE:
                    self.jeu_fini = True
            # si on clique sur la croix de la fenetre ==> arret du jeu
            if event.type == pygame.QUIT:
                self.jeu_fini = True
                print('fin')


    # affichage du jeu avec pygame
    def dessiner(self):
        #couleurs
        WHITE = (0xFF, 0xFF, 0xFF)
        BLUE = (0x00, 0x00, 0xFF)
        # affiche rectangle blanc et point qui se deplace
        pygame.draw.rect(screen,WHITE,(100,100,300,200))
        pygame.draw.ellipse(screen,BLUE,(100+(self.x)%290,250,10,10))
        #dessin texte explications
        myfont = pygame.font.SysFont("monospace", 12)
        label = myfont.render("Appuyer sur espace pour sortir", 1, BLUE)
        screen.blit(label, (150, 150))
        label = myfont.render("num frame = "+str(self.x), 1, BLUE)
        screen.blit(label, (200, 200))


    # gestion de la fin du jeu => vrai si le jeu est fini
    def finJeu(self):
        return self.jeu_fini


#################################################################
#######     INITIALISATION PYGAME        ########################
#################################################################

# initialisation pygame
import pygame
pygame.init()
size = (700, 500)
screen = pygame.display.set_mode(size)
pygame.display.set_caption("Moteur")

#on cree un jeu (approche objet)
jeu=Jeu()



#################################################################
######     BOUCLE DE JEU                #########################
#################################################################

# on creer une horloge pour reguler la vitesse de la boucle de jeu
clock = pygame.time.Clock()

# -------- Boucle principale -----------
# tant que le jeu n'est pas fini
while not jeu.finJeu():
    # --- on traite les evenements
    jeu.traiter_evenement()

    # --- on fait evoluer le jeu
    jeu.evoluer()

    # --- on dessine le jeu
    jeu.dessiner()
    # on inverse les affichages (double buffering)
    pygame.display.flip()

    # --- on demande d'attendre ce qu'il faut pour un FPS de 60
    clock.tick(60)
# -------- Fin Boucle principale -----------

pygame.quit()
