#include <stdlib.h>
#include <stdio.h>
#include <graph.h>
#include "fenetre.h"
#include "plateau_init.h"
#include "deplacement.h"
#include "score_init.h"
#include "ecran_lancement.h"
#include "affichage_timer.h"
#include "ecran_fin.h"


#define CYCLE_SERPENT 200000L
#define CYCLE_TIMER 1000000L

int main(void)  {


  struct adresse* pointeur =  plateau_init();

  int** plateau = pointeur -> plateau;

  short int* compteur = NULL;

  int i;
  

  unsigned short* indice_queue = pointeur -> indice_queue;

  
  unsigned char* sens = NULL;
  unsigned char* retard = NULL;

  unsigned char* tete = pointeur -> tete; 
  
  unsigned char jeu, entrer, minutes, secondes;

  unsigned long suivant_serpent, suivant_timer;

  unsigned long acceleration = 0L;

  int numsprite;




  sens = malloc(sizeof(unsigned char));

  *sens = 2;

  retard = malloc(sizeof(unsigned char));

  *retard = 0;


  suivant_serpent = Microsecondes() + CYCLE_SERPENT;

  suivant_timer = Microsecondes() + CYCLE_TIMER; 
  

  
  
 
  InitialiserGraphique();

  /*initialisation de la taille de la fenetre de jeux*/

  CreerFenetre(10,10,1450,840);

  /* affichage du l'écran principale */

  jeu = ecran_lancement();

  if (jeu == 1)  {

    entrer = 1;
  }


  numsprite =  start(pointeur);

  compteur = score_init();

  minutes = 0;

  secondes = 0;

  affichage_timer(minutes, secondes);


  
  while (jeu ==  1)  {

    if (Microsecondes() > suivant_serpent) {


     
      jeu = deplacement(pointeur, sens, retard, compteur, &acceleration, numsprite);

      suivant_serpent = Microsecondes() + CYCLE_SERPENT - acceleration;


     


      
    }

    if (Microsecondes () > suivant_timer)  {


      secondes++;

      suivant_timer = Microsecondes() + CYCLE_TIMER;

      if (secondes == 60)  {

	secondes = 0;

	minutes++;
      

      }
      affichage_timer(minutes,secondes);
    }
  }

  

  LibererSprite(numsprite);



   /* déallocations des tableaux */
   
   for ( i = 0; i < LIGNES; i++)  {

     free(pointeur -> plateau[i]);

   }
   free(pointeur -> plateau);


   for ( i = 0; i < TAILLE_SERPENT; i++) {

     free(pointeur -> corps_serpent[i]);

   }

   free(pointeur -> corps_serpent);
   

   free(pointeur -> tete);

   free(pointeur -> indice_queue);

   free(sens);

   free(pointeur -> taille_serpent);


   free(pointeur);


   free(retard);

   if (entrer == 1 ) { 

     ecran_fin(compteur, minutes, secondes);

   }

   FermerGraphique();

   return EXIT_SUCCESS;
}