diff --git a/affichage.c b/affichage.c new file mode 100644 index 0000000..059580c --- /dev/null +++ b/affichage.c @@ -0,0 +1,277 @@ +#include +#include +#include +#include +#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 +#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; + } + + 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()) + { + 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= 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); + } + } + + + free(pomme); + free(serpent); + Touche(); + FermerGraphique(); + return EXIT_SUCCESS; +} diff --git a/gameoversnk.png b/gameoversnk.png new file mode 100644 index 0000000..1a28506 Binary files /dev/null and b/gameoversnk.png differ diff --git a/startsnk.png b/startsnk.png new file mode 100644 index 0000000..f96373a Binary files /dev/null and b/startsnk.png differ diff --git a/stopsnk.png b/stopsnk.png new file mode 100644 index 0000000..13caebe Binary files /dev/null and b/stopsnk.png differ