274 lines
7.5 KiB
C
274 lines
7.5 KiB
C
|
#include <stdio.h>
|
||
|
#include <stdlib.h>
|
||
|
#include <graph.h>
|
||
|
#include "../include/grille.h"
|
||
|
#include "../include/serpent.h"
|
||
|
#include "../include/pomme.h"
|
||
|
#include "../include/jeu.h"
|
||
|
#include "../include/menu.h"
|
||
|
#include "../include/timer.h"
|
||
|
#include "../include/obstacle.h"
|
||
|
|
||
|
|
||
|
void afficherScore(int score) {
|
||
|
char scoreStr[20];
|
||
|
/* Efface l'ancien score */
|
||
|
ChoisirCouleurDessin(CouleurParComposante(0, 0, 0));
|
||
|
RemplirRectangle(178, 946, 130, 40);
|
||
|
/* Convertit le score en chaîne de caractères */
|
||
|
snprintf(scoreStr, sizeof(scoreStr), "%d", score);
|
||
|
/* Affiche le nouveau score */
|
||
|
ChoisirCouleurDessin(CouleurParComposante(255, 255, 255));
|
||
|
EcrireTexte(179, 976, scoreStr, 2);
|
||
|
}
|
||
|
|
||
|
|
||
|
void lancer_jeu1(void) {
|
||
|
int fin = 1;
|
||
|
Segment serpent[100];
|
||
|
int longueur = 10;
|
||
|
int direction_x = 1;
|
||
|
int direction_y = 0;
|
||
|
int score = 0;
|
||
|
char scoreStr[20];
|
||
|
Pomme pomme;
|
||
|
int min, sec;
|
||
|
|
||
|
|
||
|
initialiser_timer(&min, &sec);
|
||
|
initialiserSerpent(serpent, &longueur);
|
||
|
dessinerGrille();
|
||
|
|
||
|
pomme = creerPomme();
|
||
|
dessinerPomme(pomme);
|
||
|
|
||
|
while (fin == 1) {
|
||
|
update_timer(&min, &sec);
|
||
|
gestionDeplacements(serpent, &direction_x, &direction_y);
|
||
|
mettreAJourSerpent(serpent, &longueur, &direction_x, &direction_y);
|
||
|
|
||
|
if (serpent[0].x == pomme.x && serpent[0].y == pomme.y) {
|
||
|
longueur++;
|
||
|
score += 5;
|
||
|
pomme = creerPomme();
|
||
|
dessinerPomme(pomme);
|
||
|
}
|
||
|
|
||
|
if (tuerSerpent(serpent, longueur)) {
|
||
|
int choixGameOver;
|
||
|
afficherMenuGameOver();
|
||
|
afficher_seconde(sec);
|
||
|
afficher_minute(min);
|
||
|
afficherScore(score);
|
||
|
/* Attend le choix du joueur après le game over */
|
||
|
choixGameOver = attendreChoixGameOver();
|
||
|
}
|
||
|
|
||
|
dessinerSerpent(serpent, &longueur);
|
||
|
afficherScore(score);
|
||
|
update_timer(&min, &sec);
|
||
|
|
||
|
attendreSerpent(150000);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
|
||
|
void lancer_jeu2(void) {
|
||
|
int i;
|
||
|
Segment serpent[100];
|
||
|
int longueur = 10;
|
||
|
int direction_x = 1;
|
||
|
int direction_y = 0;
|
||
|
unsigned long int vitesse = 200000; /*vitesse de base*/
|
||
|
int score = 0;
|
||
|
char scoreStr[20];
|
||
|
Pomme pommes[5];
|
||
|
int min, sec;
|
||
|
|
||
|
|
||
|
initialiser_timer(&min, &sec);
|
||
|
initialiserSerpent(serpent, &longueur);
|
||
|
dessinerGrille();
|
||
|
|
||
|
for (i = 0; i < 5; i++) {
|
||
|
pommes[i] = creerPomme();
|
||
|
dessinerPomme(pommes[i]);
|
||
|
}
|
||
|
|
||
|
while (1) {
|
||
|
gestionDeplacements(serpent, &direction_x, &direction_y);
|
||
|
mettreAJourSerpent(serpent, &longueur, &direction_x, &direction_y);
|
||
|
|
||
|
for (i = 0; i < 5; i++) {
|
||
|
if (serpent[0].x == pommes[i].x && serpent[0].y == pommes[i].y) {
|
||
|
longueur++;
|
||
|
score += 5;
|
||
|
pommes[i] = creerPomme();
|
||
|
dessinerPomme(pommes[i]);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
if (tuerSerpent(serpent, longueur)) {
|
||
|
int choixGameOver;
|
||
|
afficherMenuGameOver();
|
||
|
afficher_seconde(sec);
|
||
|
afficher_minute(min);
|
||
|
afficherScore(score);
|
||
|
|
||
|
/* Attend le choix du joueur après le game over */
|
||
|
choixGameOver = attendreChoixGameOver();
|
||
|
}
|
||
|
|
||
|
dessinerSerpent(serpent, &longueur);
|
||
|
|
||
|
afficherScore(score);
|
||
|
update_timer(&min, &sec);
|
||
|
|
||
|
attendreSerpent(vitesse); /*Gère la vitesse*/
|
||
|
}
|
||
|
}
|
||
|
|
||
|
|
||
|
void lancer_jeu4(void) {
|
||
|
int longueur = 10;
|
||
|
int direction_x = 1;
|
||
|
int direction_y = 0;
|
||
|
int score = 0;
|
||
|
unsigned long int vitesse = 300000; /*vitesse de base*/
|
||
|
char scoreStr[20];
|
||
|
Pomme pomme;
|
||
|
Segment serpent[100];
|
||
|
int min, sec;
|
||
|
|
||
|
|
||
|
initialiser_timer(&min, &sec);
|
||
|
initialiserSerpent(serpent, &longueur);
|
||
|
dessinerGrille();
|
||
|
|
||
|
pomme = creerPomme();
|
||
|
dessinerPomme(pomme);
|
||
|
|
||
|
while (1) {
|
||
|
gestionDeplacements(serpent, &direction_x, &direction_y);
|
||
|
mettreAJourSerpent(serpent, &longueur, &direction_x, &direction_y);
|
||
|
|
||
|
if (serpent[0].x == pomme.x && serpent[0].y == pomme.y) {
|
||
|
longueur++;
|
||
|
score += 5;
|
||
|
pomme = creerPomme();
|
||
|
dessinerPomme(pomme);
|
||
|
|
||
|
/* Augmenter la vitesse à chaque pomme mangée*/
|
||
|
vitesse -= 5000; /* Réduire la durée d'attente (augmenter la vitesse)*/
|
||
|
}
|
||
|
|
||
|
if (tuerSerpent(serpent, longueur)) {
|
||
|
int choixGameOver;
|
||
|
afficherMenuGameOver();
|
||
|
afficherScore(score);
|
||
|
afficher_minute(min);
|
||
|
afficher_seconde(sec);
|
||
|
|
||
|
/* Attend le choix du joueur après le game over */
|
||
|
choixGameOver = attendreChoixGameOver();
|
||
|
}
|
||
|
|
||
|
dessinerSerpent(serpent, &longueur);
|
||
|
afficherScore(score);
|
||
|
update_timer(&min, &sec);
|
||
|
|
||
|
attendreSerpent(vitesse);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void lancer_jeu3(void) {
|
||
|
int i,j;
|
||
|
int longueur = 10;
|
||
|
int direction_x = 1;
|
||
|
int direction_y = 0;
|
||
|
int score = 0;
|
||
|
unsigned long int vitesse = 100000;
|
||
|
char scoreStr[20];
|
||
|
Pomme pomme;
|
||
|
int nombreObstacles = 10;
|
||
|
Obstacle *obstacles = malloc(nombreObstacles * sizeof(Obstacle));
|
||
|
Segment serpent[100];
|
||
|
int min, sec;
|
||
|
|
||
|
initialiser_timer(&min, &sec);
|
||
|
initialiserSerpent(serpent, &longueur);
|
||
|
dessinerGrille();
|
||
|
|
||
|
pomme = creerPomme();
|
||
|
dessinerPomme(pomme);
|
||
|
|
||
|
placerObstacle(obstacles, nombreObstacles, LARGEUR_GRILLE, HAUTEUR_GRILLE);
|
||
|
|
||
|
while (1) {
|
||
|
gestionDeplacements(serpent, &direction_x, &direction_y);
|
||
|
mettreAJourSerpent(serpent, &longueur, &direction_x, &direction_y);
|
||
|
|
||
|
if (serpent[0].x == pomme.x && serpent[0].y == pomme.y) {
|
||
|
longueur++;
|
||
|
score += 5;
|
||
|
pomme = creerPomme();
|
||
|
dessinerPomme(pomme);
|
||
|
|
||
|
|
||
|
vitesse -= 5000;
|
||
|
}
|
||
|
|
||
|
if (tuerSerpent(serpent, longueur)) {
|
||
|
int choixGameOver;
|
||
|
afficherMenuGameOver();
|
||
|
afficher_seconde(sec);
|
||
|
afficher_minute(min);
|
||
|
afficherScore(score);
|
||
|
/* Attend le choix du joueur après le game over */
|
||
|
choixGameOver = attendreChoixGameOver();
|
||
|
}
|
||
|
|
||
|
/*Vérifier la collision avec les obstacles*/
|
||
|
for (i = 0; i < nombreObstacles; i++) {
|
||
|
if (estCollisionObstacle(obstacles[i], serpent, longueur)) {
|
||
|
int choixGameOver;
|
||
|
afficherMenuGameOver();
|
||
|
afficher_seconde(sec);
|
||
|
afficher_minute(min);
|
||
|
afficherScore(score);
|
||
|
|
||
|
/* Attend le choix du joueur après le game over */
|
||
|
choixGameOver = attendreChoixGameOver();
|
||
|
if (choixGameOver == 1) {
|
||
|
/*Réinitialiser le jeu*/
|
||
|
longueur = 10;
|
||
|
score = 0;
|
||
|
vitesse = 28000000;
|
||
|
initialiserSerpent(serpent, &longueur);
|
||
|
dessinerGrille();
|
||
|
pomme = creerPomme();
|
||
|
dessinerPomme(pomme);
|
||
|
placerObstacle(obstacles, nombreObstacles, LARGEUR_GRILLE, HAUTEUR_GRILLE);
|
||
|
} else if (choixGameOver == 2) {
|
||
|
FermerGraphique();
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
/*Dessiner le serpent et les obstacles*/
|
||
|
dessinerSerpent(serpent, &longueur);
|
||
|
for (j = 0; j < nombreObstacles; j++) {
|
||
|
dessinerObstacle(obstacles[j]);
|
||
|
}
|
||
|
|
||
|
afficherScore(score);
|
||
|
update_timer(&min, &sec);
|
||
|
|
||
|
|
||
|
/*Attendre en fonction de la vitesse actuelle*/
|
||
|
attendreSerpent(vitesse);
|
||
|
|
||
|
}
|
||
|
free(obstacles);
|
||
|
}
|