Peer Working : Ajout de nouveaux modes de jeux

This commit is contained in:
stiti
2023-12-09 21:43:13 +01:00
parent f52863c44e
commit 64c5fc17a6
13 changed files with 304 additions and 82 deletions

175
src/jeu.c
View File

@@ -1,29 +1,29 @@
#include <stdio.h>
#include <stdlib.h>
#include <graph.h>
#include <time.h> /* à supprimer prochainement */
#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, 200, 40);
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(178, 976, scoreStr, 2);
EcrireTexte(179, 976, scoreStr, 2);
}
void lancer_jeu1(void) {
struct timespec delai = {0, 55000000}; /* A SUPPRIMER QUAND ON AURA LA FONCTION ATTENDRE*/
Segment serpent[100];
int longueur = 10;
int direction_x = 1;
@@ -35,12 +35,14 @@ void lancer_jeu1(void) {
FermerGraphique();
InitialiserGraphique();
CreerFenetre(0, 0, 1200, 1000);
ChoisirTitreFenetre("Snake By Moncef & Marco");
initialiserSerpent(serpent, &longueur);
dessinerGrille();
pomme = creerPomme();
dessinerPomme(pomme);
while (1) {
gestionDeplacements(serpent, &direction_x, &direction_y);
@@ -56,26 +58,28 @@ void lancer_jeu1(void) {
if (tuerSerpent(serpent, longueur)) {
int choixGameOver;
afficherMenuGameOver();
afficherScore(score);
/* Attend le choix du joueur après le game over */
choixGameOver = attendreChoixGameOver();
}
dessinerSerpent(serpent, &longueur);
afficherScore(score);
nanosleep(&delai, NULL);
attendreSerpent(150000);
}
}
void lancer_jeu2(void) {
struct timespec delai = {0, 55000000}; /*50 000 000 nanosecondes (0.05 seconde)*/
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];
@@ -83,6 +87,7 @@ void lancer_jeu2(void) {
FermerGraphique();
InitialiserGraphique();
CreerFenetre(0, 0, 1200, 1000);
ChoisirTitreFenetre("Snake By Moncef & Marco");
initialiserSerpent(serpent, &longueur);
dessinerGrille();
@@ -117,73 +122,27 @@ void lancer_jeu2(void) {
afficherScore(score);
nanosleep(&delai, NULL);
attendreSerpent(vitesse);
}
}
void lancer_jeu3(void) {
struct timespec delai = {0, 40000000}; /*40 000 000 nanosecondes (0.04 seconde)*/
Segment serpent[100];
int longueur = 10;
int direction_x = 1;
int direction_y = 0;
int score = 0;
char scoreStr[20];
Pomme pomme;
FermerGraphique();
InitialiserGraphique();
CreerFenetre(0, 0, 1200, 1000);
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);
}
if (tuerSerpent(serpent, longueur)) {
int choixGameOver;
afficherMenuGameOver();
/* Attend le choix du joueur après le game over */
choixGameOver = attendreChoixGameOver();
}
dessinerSerpent(serpent, &longueur);
afficherScore(score);
/*Permet de gérer la vitesse du serpent*/
nanosleep(&delai, NULL);
}
}
void lancer_jeu4(void) {
struct timespec delai = {0, 28000000}; /*40 000 000 nanosecondes (0.04 seconde)*/
Segment serpent[100];
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];
FermerGraphique();
InitialiserGraphique();
CreerFenetre(0, 0, 1200, 1000);
ChoisirTitreFenetre("Snake By Moncef & Marco");
initialiserSerpent(serpent, &longueur);
dessinerGrille();
@@ -199,6 +158,9 @@ void lancer_jeu4(void) {
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)) {
@@ -209,13 +171,98 @@ void lancer_jeu4(void) {
choixGameOver = attendreChoixGameOver();
}
dessinerSerpent(serpent, &longueur);
dessinerSerpent(serpent, &longueur);
afficherScore(score);
/*Permet de gérer la vitesse du serpent*/
nanosleep(&delai, NULL);
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];
FermerGraphique();
InitialiserGraphique();
CreerFenetre(0, 0, 1200, 1000);
ChoisirTitreFenetre("Snake By Moncef & Marco");
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();
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();
/* 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);
/*Attendre en fonction de la vitesse actuelle*/
attendreSerpent(vitesse);
}
free(obstacles);
}