111 lines
4.5 KiB
C
111 lines
4.5 KiB
C
|
#include <stdlib.h>
|
|||
|
#include <graph.h>
|
|||
|
#include <time.h>
|
|||
|
#include <stdio.h>
|
|||
|
#include "menu_terrain.h"
|
|||
|
#include "temps_score.h"
|
|||
|
#include "serpent.h"
|
|||
|
#include "pastille.h"
|
|||
|
#define CYCLE 1000000L
|
|||
|
#define MAX_LONGUEUR 100
|
|||
|
|
|||
|
|
|||
|
int main(){
|
|||
|
int rejouer;
|
|||
|
InitialiserGraphique();
|
|||
|
CreerFenetre(350, 100, LARGEUR_FENETRE, HAUTEUR_FENETRE);
|
|||
|
srand(time(NULL));
|
|||
|
do{
|
|||
|
unsigned long suivant;
|
|||
|
unsigned int vitesse_serpent = VITESSE_INITIAL;
|
|||
|
int n = 0, minutes, secondes, score = 0, continuer;
|
|||
|
char texte[20];
|
|||
|
int nbr_pastille = 5, gameover, i, direction = 1, direction_avant = 1, longSerpent = TAILLE_SERPENT_INITIAL, max_longuer = MAX_LONGUEUR;
|
|||
|
Pastille *pomme = (Pastille *) malloc(nbr_pastille * sizeof(Pastille));
|
|||
|
Segment *serpent = (Segment *) malloc(MAX_LONGUEUR * sizeof(Segment));
|
|||
|
if (pomme == NULL || serpent == NULL)
|
|||
|
{
|
|||
|
printf("Erreur d'allocation de m<>moire.\n");
|
|||
|
return EXIT_FAILURE;
|
|||
|
}
|
|||
|
rejouer = 2;
|
|||
|
EffacerEcran(CouleurParNom("black"));
|
|||
|
Terrain();
|
|||
|
Creation_Serpent(serpent, longSerpent);
|
|||
|
Afficher_Serpent(serpent, longSerpent, direction);
|
|||
|
Creation_Pastille(NBR_PASTILLE_INITIAL, pomme, longSerpent, serpent);
|
|||
|
Afficher_Pastille(NBR_PASTILLE_INITIAL, pomme);
|
|||
|
do{
|
|||
|
gameover = 2;
|
|||
|
if (longSerpent >= MAX_LONGUEUR){
|
|||
|
serpent = (Segment*) realloc(serpent,(max_longuer+MAX_LONGUEUR));
|
|||
|
max_longuer += MAX_LONGUEUR;
|
|||
|
}
|
|||
|
/*Temps ecoul<75> debut*/
|
|||
|
if (Microsecondes() > suivant){
|
|||
|
suivant = Microsecondes() + CYCLE;
|
|||
|
n++;
|
|||
|
minutes = n / 60;
|
|||
|
secondes = n % 60;
|
|||
|
Afficher_Temps(minutes, secondes, texte);
|
|||
|
}
|
|||
|
/*Temps ecoul<75> fin */
|
|||
|
if (ToucheEnAttente()){
|
|||
|
switch (Touche()){
|
|||
|
case XK_Right:
|
|||
|
direction = 1;
|
|||
|
break;
|
|||
|
case XK_Left:
|
|||
|
direction = -1;
|
|||
|
break;
|
|||
|
case XK_Up:
|
|||
|
direction = 2;
|
|||
|
break;
|
|||
|
case XK_Down:
|
|||
|
direction = -2;
|
|||
|
break;
|
|||
|
case XK_space:
|
|||
|
continuer = 2;
|
|||
|
Pause(texte, minutes, secondes, score, &continuer);
|
|||
|
if (continuer == 0){
|
|||
|
FermerGraphique();
|
|||
|
return EXIT_SUCCESS;
|
|||
|
}
|
|||
|
Afficher_Pastille(NBR_PASTILLE_INITIAL, pomme);
|
|||
|
Afficher_Serpent(serpent, longSerpent, direction);
|
|||
|
}
|
|||
|
}
|
|||
|
if (direction==direction_avant*(-1)){
|
|||
|
direction=direction_avant;
|
|||
|
}else{
|
|||
|
direction_avant=direction;
|
|||
|
}
|
|||
|
Deplacer_Serpent(&longSerpent, serpent, direction, vitesse_serpent);
|
|||
|
for (i = 0; i < NBR_PASTILLE_INITIAL; i++){
|
|||
|
/*Mise a zero du score*/
|
|||
|
ChoisirCouleurDessin(CouleurParNom("white"));
|
|||
|
sprintf(texte, "Score : %3d", score);
|
|||
|
EcrireTexte(825, 685, texte, 2);
|
|||
|
if (serpent[i].x == pomme[i].x && serpent[i].y == pomme[i].y)
|
|||
|
{
|
|||
|
longSerpent += 2;
|
|||
|
Validation_Coordonne( NBR_PASTILLE_INITIAL, pomme, longSerpent, serpent, &pomme[i]);
|
|||
|
score = score + 5;
|
|||
|
if (score % 40 == 0 && vitesse_serpent > 10U){
|
|||
|
vitesse_serpent -= 5U;
|
|||
|
}
|
|||
|
Afficher_Pastille(NBR_PASTILLE_INITIAL, pomme);
|
|||
|
Afficher_Score(score, texte);
|
|||
|
}
|
|||
|
}
|
|||
|
Contoure_Terrain();
|
|||
|
Mort_Serpent( longSerpent, serpent, score, minutes, secondes, texte, &rejouer, &gameover);
|
|||
|
}while (gameover);
|
|||
|
free(pomme);
|
|||
|
free(serpent);
|
|||
|
}while(rejouer);
|
|||
|
|
|||
|
FermerGraphique();
|
|||
|
return EXIT_SUCCESS;
|
|||
|
}
|