j'ai oublier de git add mais maintenant c'est fait
This commit is contained in:
355
main.c
355
main.c
@@ -2,276 +2,111 @@
|
||||
#include <graph.h>
|
||||
#include <time.h>
|
||||
#include <stdio.h>
|
||||
#define LARGEUR_FENETRE 1050
|
||||
#define HAUTEUR_FENETRE 750
|
||||
#define TAILLE_CASE 15
|
||||
#define ESPACE_BAS 75
|
||||
#define ESPACE_HAUT 75
|
||||
#define NBR_PASTILLE_INITIAL 5
|
||||
#define COLONNES 60
|
||||
#define LIGNES 40
|
||||
#define LARGEUR_ECRAN_JEU 900
|
||||
#define HAUTEUR_ECRAN_JEU 600
|
||||
#define TAILLE_CARRE 120
|
||||
#include "menu_terrain.h"
|
||||
#include "temps_score.h"
|
||||
#include "serpent.h"
|
||||
#include "pastille.h"
|
||||
#define CYCLE 1000000L
|
||||
#define MAX_LONGUEUR 100
|
||||
|
||||
|
||||
typedef struct
|
||||
{
|
||||
int x;
|
||||
int y;
|
||||
} Segment;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
int x;
|
||||
int y;
|
||||
} Pastille;
|
||||
|
||||
|
||||
void Attendre(unsigned int millisecondes)
|
||||
{
|
||||
unsigned long debut = Microsecondes();
|
||||
unsigned long attente = millisecondes * 1000;
|
||||
while (Microsecondes() - debut < attente)
|
||||
{
|
||||
}
|
||||
}
|
||||
/*Fonction Perdu !!!*/
|
||||
void perdu(char *texte, int score, int minutes, int secondes, int pour_l_instant_t_a_pas_encore_perdue)
|
||||
{
|
||||
|
||||
ChargerImage("perdu-removebg-preview.png", 300, 150, 30, 30, 900, 900);
|
||||
/*Afficher le score sur l'image*/
|
||||
ChoisirCouleurDessin(CouleurParNom("black"));
|
||||
sprintf(texte, "%3d", score);
|
||||
EcrireTexte(455, 364, texte, 2);
|
||||
/*affichage du timer au menu*/
|
||||
sprintf(texte, "%02d:%02d", minutes, secondes);
|
||||
EcrireTexte(660, 364, texte, 2);
|
||||
if (Touche() == XK_Escape)
|
||||
{
|
||||
pour_l_instant_t_a_pas_encore_perdue = 0;
|
||||
}
|
||||
else if (Touche() == XK_Return)
|
||||
{
|
||||
main();
|
||||
}
|
||||
}
|
||||
|
||||
void effacerSerpent(Segment serpent[], int longueurSerpent)
|
||||
{
|
||||
int i;
|
||||
ChoisirCouleurDessin(CouleurParComposante(126, 217, 87));
|
||||
for (i = 0; i < longueurSerpent; i++)
|
||||
{
|
||||
RemplirRectangle(serpent[i].x, serpent[i].y, TAILLE_CASE, TAILLE_CASE);
|
||||
}
|
||||
}
|
||||
/*Fonction permettant d'afficher le serpent*/
|
||||
void afficherSerpent(Segment serpent[], int taille)
|
||||
{
|
||||
int i;
|
||||
couleur couleurSerpent = CouleurParNom("yellow");
|
||||
ChoisirCouleurDessin(couleurSerpent);
|
||||
|
||||
for (i = 0; i < taille; i++)
|
||||
{
|
||||
serpent[i].x = LARGEUR_FENETRE / 2 + i * TAILLE_CASE;
|
||||
serpent[i].y = HAUTEUR_FENETRE / 2;
|
||||
}
|
||||
for (i = 0; i < taille; i++)
|
||||
{
|
||||
RemplirRectangle(serpent[i].x, serpent[i].y, TAILLE_CASE, TAILLE_CASE);
|
||||
}
|
||||
}
|
||||
/*Fonction recursive permettant d'afficher au moment de l'initialisation un nombre donnée en parametre de pastille Rouge (oui j'en suis fiere meme si c'est pas incroyable)*/
|
||||
void afficherPastilleAleatoire(int z, Pastille pomme[])
|
||||
{
|
||||
int i;
|
||||
for (i = 0; i < z; i++)
|
||||
{
|
||||
;
|
||||
pomme[i].x = rand() % (COLONNES - 10) * TAILLE_CASE + 5 * TAILLE_CASE;
|
||||
pomme[i].y = rand() % (LIGNES - 5) * TAILLE_CASE + (ESPACE_HAUT - 3 * TAILLE_CASE);
|
||||
ChoisirCouleurDessin(CouleurParNom("red"));
|
||||
RemplirArc(pomme[i].x, pomme[i].y, TAILLE_CASE, TAILLE_CASE, 0, 360);
|
||||
}
|
||||
}
|
||||
|
||||
/*Fonction initialisant la fenetre de jeux en vert*/
|
||||
void EcranJeu()
|
||||
{
|
||||
int i, j;
|
||||
|
||||
for (i = 2; i < LIGNES + 2; i++)
|
||||
{
|
||||
for (j = 5; j < COLONNES + 5; j++)
|
||||
{
|
||||
ChoisirCouleurDessin(CouleurParComposante(126, 217, 87));
|
||||
RemplirRectangle(j * TAILLE_CASE, i * TAILLE_CASE, TAILLE_CASE, TAILLE_CASE);
|
||||
}
|
||||
}
|
||||
}
|
||||
void deplacerSerpent(int *longueurSerpent, Segment serpent[], int direction)
|
||||
{
|
||||
int i;
|
||||
|
||||
effacerSerpent(serpent, *longueurSerpent);
|
||||
for (i = *longueurSerpent - 1; i > 0; i--)
|
||||
{
|
||||
serpent[i] = serpent[i - 1];
|
||||
}
|
||||
|
||||
switch (direction)
|
||||
{
|
||||
case 1:
|
||||
serpent[0].x += TAILLE_CASE;
|
||||
break;
|
||||
case 2:
|
||||
serpent[0].x -= TAILLE_CASE;
|
||||
break;
|
||||
case 3:
|
||||
serpent[0].y -= TAILLE_CASE;
|
||||
break;
|
||||
case 4:
|
||||
serpent[0].y += TAILLE_CASE;
|
||||
break;
|
||||
}
|
||||
for (i = 0; i < *longueurSerpent; i++)
|
||||
{
|
||||
|
||||
ChoisirCouleurDessin(CouleurParNom("yellow"));
|
||||
RemplirRectangle(serpent[i].x, serpent[i].y, TAILLE_CASE, TAILLE_CASE);
|
||||
}
|
||||
Attendre(75);
|
||||
}
|
||||
|
||||
int main()
|
||||
{
|
||||
unsigned long debut, suivant;
|
||||
int n = 0, minutes, secondes, score = 0;
|
||||
char texte[20];
|
||||
int nbr_pastille = 5, touche, pour_l_instant_t_a_pas_encore_perdue = 1, i, j, x = 0, direction = 1, verifSerpent = 0, longueurSerpent = 10;
|
||||
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;
|
||||
}
|
||||
|
||||
int main(){
|
||||
int jouer = 2, rejouer;
|
||||
InitialiserGraphique();
|
||||
CreerFenetre(350, 100, LARGEUR_FENETRE, HAUTEUR_FENETRE);
|
||||
srand(time(NULL));
|
||||
EffacerEcran(CouleurParNom("black"));
|
||||
EcranJeu();
|
||||
afficherPastilleAleatoire(NBR_PASTILLE_INITIAL, pomme);
|
||||
afficherSerpent(serpent, longueurSerpent);
|
||||
|
||||
while (pour_l_instant_t_a_pas_encore_perdue)
|
||||
{
|
||||
if (longueurSerpent >= MAX_LONGUEUR){
|
||||
serpent = (Segment*)realloc(serpent,(MAX_LONGUEUR+MAX_LONGUEUR) * sizeof(Segment));
|
||||
}
|
||||
/*Temps ecoulé debut*/
|
||||
if (Microsecondes() > suivant)
|
||||
{
|
||||
|
||||
suivant = Microsecondes() + CYCLE;
|
||||
n++;
|
||||
minutes = n / 60;
|
||||
secondes = n % 60;
|
||||
ChoisirCouleurDessin(CouleurParNom("black"));
|
||||
RemplirRectangle(75, 650, 250, 40);
|
||||
ChoisirCouleurDessin(CouleurParNom("blue"));
|
||||
printf("Temps : %d secondes\n", n);
|
||||
sprintf(texte, "Temps : %02d : %02d", minutes, secondes);
|
||||
EcrireTexte(85, 685, texte, 2);
|
||||
}
|
||||
|
||||
/*Temps ecoulé fin */
|
||||
if (ToucheEnAttente())
|
||||
{
|
||||
switch (Touche())
|
||||
Start(&jouer);
|
||||
if (jouer){
|
||||
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, longueurSerpent = 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)
|
||||
{
|
||||
case XK_Right:
|
||||
direction = 1;
|
||||
break;
|
||||
case XK_Left:
|
||||
direction = 2;
|
||||
break;
|
||||
case XK_Up:
|
||||
direction = 3;
|
||||
break;
|
||||
case XK_Down:
|
||||
direction = 4;
|
||||
break;
|
||||
case XK_space:
|
||||
|
||||
ChargerImage("pause.png", 300, 150, 30, 30, 900, 900);
|
||||
while (Touche() != XK_space)
|
||||
{
|
||||
|
||||
Attendre(10);
|
||||
}
|
||||
EcranJeu();
|
||||
for(i=0;i<nbr_pastille;i++){
|
||||
ChoisirCouleurDessin(CouleurParNom("red"));
|
||||
RemplirArc(pomme[i].x, pomme[i].y, TAILLE_CASE, TAILLE_CASE,0,360);
|
||||
}
|
||||
printf("Erreur d'allocation de m<>moire.\n");
|
||||
return EXIT_FAILURE;
|
||||
}
|
||||
}
|
||||
|
||||
deplacerSerpent(&longueurSerpent, serpent, direction);
|
||||
|
||||
for (i = 0; i < NBR_PASTILLE_INITIAL; i++)
|
||||
{
|
||||
/*Mise a zero du score*/
|
||||
ChoisirCouleurDessin(CouleurParNom("blue"));
|
||||
sprintf(texte, "Score : %3d", score);
|
||||
EcrireTexte(825, 685, texte, 2);
|
||||
|
||||
if (serpent[i].x == pomme[i].x && serpent[i].y == pomme[i].y)
|
||||
{
|
||||
|
||||
longueurSerpent += 1;
|
||||
pomme[i].x = rand() % (COLONNES - 10) * TAILLE_CASE + 5 * TAILLE_CASE;
|
||||
pomme[i].y = rand() % (LIGNES - 5) * TAILLE_CASE + (ESPACE_HAUT - 3 * TAILLE_CASE);
|
||||
|
||||
|
||||
|
||||
ChoisirCouleurDessin(CouleurParNom("red"));
|
||||
RemplirArc(pomme[i].x, pomme[i].y, TAILLE_CASE, TAILLE_CASE, 0, 360);
|
||||
/*+1 au score a chaque pomme*/
|
||||
score = score + 1;
|
||||
ChoisirCouleurDessin(CouleurParNom("black"));
|
||||
RemplirRectangle(825, 655, 150, 40);
|
||||
ChoisirCouleurDessin(CouleurParNom("blue"));
|
||||
sprintf(texte, "Score : %3d", score);
|
||||
EcrireTexte(825, 685, texte, 2);
|
||||
}
|
||||
}
|
||||
|
||||
printf("La longueur d'un serpent est de : %d\n", longueurSerpent);
|
||||
/*Delimitation du terrain de jeu */
|
||||
if (serpent[0].x < 5 * TAILLE_CASE || serpent[0].x >= LARGEUR_ECRAN_JEU + 5 * TAILLE_CASE || serpent[0].y < ESPACE_HAUT - 3 * TAILLE_CASE || serpent[0].y >= HAUTEUR_ECRAN_JEU + 2 * TAILLE_CASE)
|
||||
{
|
||||
|
||||
ChoisirCouleurDessin(CouleurParNom("black"));
|
||||
RemplirRectangle(serpent[0].x, serpent[0].y, TAILLE_CASE, TAILLE_CASE);
|
||||
Attendre(1000);
|
||||
/*Execution de la fontion perdu*/
|
||||
perdu(texte, score, minutes, secondes, pour_l_instant_t_a_pas_encore_perdue = 0);
|
||||
}
|
||||
rejouer = 2;
|
||||
EffacerEcran(CouleurParNom("black"));
|
||||
Terrain();
|
||||
Creation_Serpent(serpent, longueurSerpent);
|
||||
Afficher_Serpent(serpent, longueurSerpent, direction);
|
||||
Creation_Pastille(NBR_PASTILLE_INITIAL, pomme, longueurSerpent, serpent);
|
||||
Afficher_Pastille(NBR_PASTILLE_INITIAL, pomme);
|
||||
do{
|
||||
gameover = 2;
|
||||
if (longueurSerpent >= 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, longueurSerpent, direction);
|
||||
}
|
||||
}
|
||||
if (direction==direction_avant*(-1)){
|
||||
direction=direction_avant;
|
||||
}else{
|
||||
direction_avant=direction;
|
||||
}
|
||||
Deplacer_Serpent(&longueurSerpent, 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)
|
||||
{
|
||||
longueurSerpent += 2;
|
||||
Validation_Coordonne( NBR_PASTILLE_INITIAL, pomme, longueurSerpent, 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( longueurSerpent, serpent, score, minutes, secondes, texte, &rejouer, &gameover);
|
||||
}while (gameover);
|
||||
free(pomme);
|
||||
free(serpent);
|
||||
}while(rejouer);
|
||||
}
|
||||
|
||||
|
||||
free(pomme);
|
||||
free(serpent);
|
||||
Touche();
|
||||
FermerGraphique();
|
||||
return EXIT_SUCCESS;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user