Organisation du code avec beaucoup de beug + jeu pas finis

This commit is contained in:
Jude Christ AISSI 2023-12-01 13:32:18 +01:00
parent eb6df98985
commit 107040e478
24 changed files with 217 additions and 357 deletions

View File

@ -1,15 +1,25 @@
but : jeux
OFILES = terrain.o \
time.o
CC = gcc CC = gcc
CFLAGS = -ansi -pedantic -lgraph -g CFLAGS = -ansi -pedantic -lgraph -g
SRCDIR = ./src
HDIR = ./fichier.h
ODIR = ./out
OFILES = $(subst src/,out/,$(subst .c,.o,$(shell find $(SRCDIR)/ -type f)))
EXE = snake
terrain.o = terrain.c but : $(EXE)
time.o = time.c
jeux : $(OFILES) $(ODIR)/%.o : $(SRCDIR)/%.c
$(CC) $(CFLAGS) -o jeux $(OFILES) @mkdir -p $(@D)
$(CC) -c $< -o $@
clean : -rm -f $(OFILES) jeux $(EXE) : $(OFILES)
$(CC) $(CFLAGS) -o $(EXE) $(OFILES)
run : $(EXE)
./$(EXE)
clean : -rm -f $(OFILES) snake
.PHONY : but clean .PHONY : but clean

View File

@ -0,0 +1,6 @@
#ifndef CONTROLE_H
#define CONTROLE_H
void Controle();
#endif

View File

@ -0,0 +1,5 @@
#ifndef FONCTIONS_H
#define FONCTIONS_H
#endif

View File

@ -0,0 +1,5 @@
#ifndef MAIN_H
#define MAIN_H
#endif

View File

@ -0,0 +1,5 @@
#ifndef MENU_H
#define MENU_H
#endif

View File

@ -0,0 +1,5 @@
#ifndef PASTILLE_H
#define PASTILLE_H
#endif

View File

@ -0,0 +1,5 @@
#ifndef SERPENT_H
#define SERPENT_H
#endif

View File

@ -0,0 +1,7 @@
#ifndef TIME_H
#define TIME_H
#define CYCLE 10000L
void Timer(unsigned long int suivant);
#endif TIME_H

View File

@ -1,9 +0,0 @@
#ifndef fonctions.h
#define fonctions.h
/*Variables fichier terrain.c*/
void variables(){
int j;
int i;
}
#endif

Binary file not shown.

After

Width:  |  Height:  |  Size: 49 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 492 B

View File

@ -1,237 +0,0 @@
#include <stdlib.h>
#include <time.h>
#include <ncurses.h>
#define CORP_SNAKE '-'
#define TETE_SNAKE 'B'
#define DU_MANGER '*'
#define CASE_VIDE ' '
char ** grille = NULL;
int nbLignes = 0;
int nbColonnes = 0;
int modeEvolueDansLequelLeSerpentPeutPasserATraversLesMursEtCeSansAvoirMalDuToutCeQuiEstTresPratiqueCarCaPermetDeJouerPlusLongtemps = 0;
struct uneCellule {
int ligne;
int colonne;
struct uneCellule * suiv;
};
typedef struct uneCellule uneCellule;
struct unSnake {
uneCellule * teteSnake;
uneCellule * queueSnake;
};
typedef struct unSnake unSnake;
struct uneDirection {
int ligne;
int colonne;
};
typedef struct uneDirection uneDirection;
unSnake creerSnake() {
unSnake snake;
uneCellule * teteSnake = malloc(sizeof(uneCellule));
uneCellule * queueSnake = malloc(sizeof(uneCellule));
uneCellule * milieuSnake = malloc(sizeof(uneCellule));
teteSnake->ligne = 1;
teteSnake->colonne = 4;
teteSnake->suiv = NULL;
milieuSnake->ligne = 1;
milieuSnake->colonne = 3;
milieuSnake->suiv = teteSnake;
queueSnake->ligne = 1;
queueSnake->colonne = 2;
queueSnake->suiv = milieuSnake;
snake.teteSnake = teteSnake;
snake.queueSnake = queueSnake;
return snake;
}
void ajouterEnTete (unSnake * snake, int ligne, int colonne,int * aMange, int * fail) {
uneCellule * nouvelleTete = malloc (sizeof(uneCellule));
nouvelleTete->ligne = ligne;
nouvelleTete->colonne = colonne;
nouvelleTete->suiv = NULL;
snake->teteSnake->suiv = nouvelleTete;
grille[(snake->teteSnake->ligne)][(snake->teteSnake->colonne)] = CORP_SNAKE;
snake->teteSnake = snake->teteSnake->suiv;
if ( modeEvolueDansLequelLeSerpentPeutPasserATraversLesMursEtCeSansAvoirMalDuToutCeQuiEstTresPratiqueCarCaPermetDeJouerPlusLongtemps) {
if( snake->teteSnake->ligne < 0) {
snake->teteSnake->ligne = nbLignes - 1;
}
else if( snake->teteSnake->ligne > nbLignes-1) {
snake->teteSnake->ligne = 0;
}
else if (snake->teteSnake->colonne < 0) {
snake->teteSnake->colonne = nbColonnes - 1;
}
else if ( snake->teteSnake->colonne > nbColonnes-1) {
snake->teteSnake->colonne = 0;
}
else if (grille[snake->teteSnake->ligne][snake->teteSnake->colonne] == CORP_SNAKE) {
*fail = 1;
}
}
else {
if( snake->teteSnake->ligne < 0 ||
snake->teteSnake->ligne > nbLignes-1 ||
snake->teteSnake->colonne < 0 ||
snake->teteSnake->colonne > nbColonnes-1)
*fail = 1;
}
if(!*fail) {
*aMange = (grille[snake->teteSnake->ligne][snake->teteSnake->colonne] == DU_MANGER) ? 1 : 0;
grille[snake->teteSnake->ligne][snake->teteSnake->colonne] = TETE_SNAKE;
}
}
void supprimerQueue(unSnake * snake) {
uneCellule * auxi;
auxi = snake->queueSnake;
grille[snake->queueSnake->ligne][snake->queueSnake->colonne] = CASE_VIDE;
snake->queueSnake = snake->queueSnake->suiv;
free(auxi);
}
void initGrille() {
int i , j = 0;
for (i = 0; i<nbLignes;i++) {
for (j=0;j<nbColonnes;j++) {
grille[i][j] = CASE_VIDE;
}
}
}
void afficherGrille(unSnake snake) {
int i , j = 0;
for (i = 0; i<nbLignes;i++) {
for (j=0;j<nbColonnes;j++) {
printw("%c",grille[i][j]);
}
}
}
void gererEvenement(unSnake * snake, int touche, int * fail, uneDirection * direction,int * aMange) {
if(direction->ligne == 0) {
if (touche == KEY_UP){
direction->ligne = -1;
direction->colonne = 0;
}
if (touche == KEY_DOWN) {
direction->ligne = 1;
direction->colonne = 0;
}
}
if (direction->colonne == 0) {
if (touche == KEY_LEFT) {
direction->colonne = -1;
direction->ligne = 0;
}
if (touche == KEY_RIGHT) {
direction->colonne = 1;
direction->ligne = 0;
}
}
ajouterEnTete(snake,snake->teteSnake->ligne + direction->ligne,snake->teteSnake->colonne + direction->colonne, aMange,fail);
if(!*aMange)
supprimerQueue(snake);
}
void genererDuManger(char ** grille) {
int ligne = 0;
int colonne = 0;
int done = 0;
srand(time(NULL));
while (!done){
ligne = rand() % (nbLignes-1);
colonne = rand() % (nbColonnes-1);
if(grille[ligne][colonne] == CASE_VIDE) {
grille[ligne][colonne] = DU_MANGER;
done = 1;
}
}
}
void printFail() {
move(nbLignes/2 - 5/2,nbColonnes/2 - 37/2);
printw(" _/_/_/_/ _/_/ _/_/_/ _/ \n");
move(1 + nbLignes/2 - 5/2,nbColonnes/2 - 37/2);
printw(" _/ _/ _/ _/ _/ \n");
move(2 + nbLignes/2 - 5/2,nbColonnes/2 - 37/2);
printw(" _/_/_/ _/_/_/_/ _/ _/ \n");
move(3 + nbLignes/2 - 5/2,nbColonnes/2 - 37/2);
printw(" _/ _/ _/ _/ _/ \n");
move(4 + nbLignes/2 - 5/2,nbColonnes/2 - 37/2);
printw("_/ _/ _/ _/_/_/ _/_/_/_/ \n");
}
int main (int argc, char * argv []) {
int i = 0;
int touche = 0;
int fail = 0;
unSnake snake = creerSnake();
uneDirection direction = {0,1};
int aMange = 1;
int nbCasesMangees = 0;
int delay = 0;
if (argc > 1) {
modeEvolueDansLequelLeSerpentPeutPasserATraversLesMursEtCeSansAvoirMalDuToutCeQuiEstTresPratiqueCarCaPermetDeJouerPlusLongtemps = 1;
}
initscr();
keypad(stdscr, TRUE);
noecho();
cbreak();
getmaxyx(stdscr,nbLignes,nbColonnes);
grille = malloc(nbLignes * sizeof(char *));
for (i=0;i<nbLignes;i++) {
grille[i] = malloc(nbColonnes*sizeof(char));
}
initGrille();
while (!fail) {
if (aMange){
genererDuManger(grille);
nbCasesMangees ++;
delay = 101 - nbCasesMangees;
delay = (delay < 60) ? 60 : delay;
timeout(delay);
}
afficherGrille(snake);
touche = getch();
gererEvenement(&snake,touche,&fail,&direction,&aMange);
erase();
}
timeout(5000);
erase();
printFail();
getch();
endwin();
return 0;
}

5
SAE_semestre1/menu.c Normal file
View File

@ -0,0 +1,5 @@
#include <stdlib.h>
#include <stdio.h>
#include <graph.h>
afficher

View File

@ -1,26 +0,0 @@
#Avant
5 cases placés aléatoirement dans le quadrillage
1 sepgment = 1 case
si une pastille disparait une autre apparait
si serpent touche pastille --> pastille disparais -->
nb_pastille -=1
place aléatoirement une pastille
nb_pastille += 1
dimension 1 case
#Après
il faut que la tête du serpent soit le mangeur on vas donc lappeler mangeur
crée 5 pastilles de même taille (une case)
tant que le jeu = True {
place 5 pastilles de façon random sur le quadrillage
si mangeur touche pastille{
nb_pastille -= 1 (delete)
place aleatoirement une pastille sur une case dans le quadrillage
nb_pastille += 1
}
Tout cela devient une condition, si cette condition = True alors taille serpent augmente

View File

@ -1,38 +0,0 @@
#include <stdlib.h>
#include <stdio.h>
#include <graph.h>
Le serpent = 10
- Segment en tête = "O"
- Segmennt en queue = "o"
Le serpent avance sans cesse
- Si le le segment en tête est sur la même case que la pastille alors "Segment en queue +2"
- Si le serpent touche une extremité alors "EXIT_FAILLURE"
Pour déplacer le serpent on utilise les flèches des touches directionnelles.
- "XK_Left" = flèches de gauche
- "XK_Right" = flèches de droite
- "XK_UP" = flèche du haut
- "XK_Down" = flèche du bas
on aura 4 variables : - int pomme
- int Segment_en_tête
- int Segment_en_queue
- int serpent
4 tableau : tableau[serpent], tableau[pastille], tableau[Segment_en_tête], tableau[Segment_en_queue]
Des conditions : if(tableau[Segment_en_tête] == tableau[pastille]){
Segment_en_queue +2
pastille--
} else {
On continu le jeu
}
if(tableau[Segment_en_tête] == limite (0)){
return EXIT_FAILLURE
}
if(tableau[Segment_en_tête] == tableau[serpent]){
return EXIT_FAILLURE
}
Boucles

View File

@ -0,0 +1,29 @@
#include <stdlib.h>
#include <stdio.h>
#include <graph.h>
int t ;
int direction;
int go_on =0;
void Controle(){
while(ToucheEnAttente()){
t = Touche();
switch(t){
case XK_Left :
direction=3;
break;
case XK_Right:
direction=4;
break;
case XK_Up:
direction=1;
break;
case XK_Down:
direction=2;
break;
case XK_Escape:
go_on=0;
break;
break;
}
}
}

59
SAE_semestre1/src/main.c Normal file
View File

@ -0,0 +1,59 @@
#include <stdlib.h>
#include <stdio.h>
#include <graph.h>
#include <time.h>
#include <unistd.h>
#include "../fichier.h/time.h"
#include "../fichier.h/controle.h"
#define CYCLE 10000L
int go_on=0;
int go_on=1;
/*Fonction Pour créer la première scene du jeu*/
void DessinerScene(){
snprintf(timer,6,"%02d:%02d", minute, seconde);
ChoisirCouleurDessin(CouleurParComposante(141,199,63));
RemplirRectangle(20,20,1160,700);
ChoisirCouleurDessin(CouleurParComposante(255,255,255));
EcrireTexte(10,760,timer,2);
serpent=ChargerSprite("serpent.png");
fond = ChargerSprite("fond.png");
for (i = 0; i < segment; i++){
AfficherSprite(serpent, x-(i*20), y);
pos_x[i]=x-(i*20);
pos_y[i]=y;
old_y[i]=pos_y[i];
old_x[i]=pos_x[i];
}
srand(time(NULL));
pomme=ChargerSprite("pomme.png");
for (p = 0; p < 5; p++) {
pommex[p] = ((rand() % (58)+1)*20);
pommey[p] = ((rand() % (35)+1)*20);
AfficherSprite(pomme, pommex[p], pommey[p]);
}
}
int main(){
/* paramétrage de la fenêtre + chargement première scène */
InitialiserGraphique();
CreerFenetre(350,100,1200,800);
EffacerEcran(CouleurParComposante(0,0,0));
suivant = Microsecondes()+CYCLE;
old_seconde=(suivant/1000000)%10;
DessinerScene();
/*Boucle Principale du Programme*/
while(go_on){
Timer();
Controle();
Serpent();
Pomme();
}
/* fermeture de la fenêtre si ECHAP pressé*/
FermerGraphique();
return EXIT_SUCCESS;
}

View File

View File

@ -0,0 +1,27 @@
#include <stdlib.h>
#include <stdio.h>
#include <graph.h>
int direction = 4;
int t;
void Controle(void){
printf("JSHUIHUS");
while(ToucheEnAttente()){
t = Touche();
switch(t){
case XK_Left:
printf("Gauche\n");
break;
case XK_Right :
printf("Droite\n");
break;
case XK_Up:
printf("Haut");
break;
case XK_Down:
printf("bas");
break;
}
}
}

View File

@ -1,18 +1,20 @@
#include <stdlib.h> #include <stdlib.h>
#include <stdio.h> #include <stdio.h>
#include <graph.h> #include <graph.h>
#include "time.c" /*#include "time.h"*/
#define HAUTEUR 20 #define HAUTEUR 20
#define LARGEUR 30 #define LARGEUR 30
#define TAILLE_CASE 20 #define TAILLE_CASE 20
#define ESPACE_NOIR 100 #define ESPACE_NOIR 100
int direction = 4;
int t;
void AfficherQuadrillage(){ void AfficherQuadrillage(){
int j; int j;
int i; int i;
InitialiserGraphique(); InitialiserGraphique();
CreerFenetre(10, 10, 30 * TAILLE_CASE, 20 * TAILLE_CASE + ESPACE_NOIR); CreerFenetre(10, 10, 30 * TAILLE_CASE, 20 * TAILLE_CASE + ESPACE_NOIR);
for (i = 0; i < LARGEUR; i++) { for (i = 0; i < LARGEUR; i++) {
@ -34,11 +36,3 @@ void AfficherQuadrillage(){
RemplirRectangle((LARGEUR - 1) * TAILLE_CASE, 0, TAILLE_CASE, HAUTEUR * TAILLE_CASE); RemplirRectangle((LARGEUR - 1) * TAILLE_CASE, 0, TAILLE_CASE, HAUTEUR * TAILLE_CASE);
} }
int main(void){
AfficherQuadrillage();
Temps();
Touche();
FermerGraphique();
return EXIT_SUCCESS;
}

37
SAE_semestre1/src/time.c Normal file
View File

@ -0,0 +1,37 @@
#include <stdio.h>
#include <unistd.h>
#include <graph.h>
#define CYCLE 10000L
int seconde=0;
int minute=0;
int seconde_actuel=0;
int old_seconde=0;
char timer[6];
unsigned long int suivant;
void Update_Timer(){
snprintf(timer,6,"%02d:%02d", minute, seconde);
ChoisirCouleurDessin(CouleurParComposante(0,0,0));
RemplirRectangle(0,700,1200,800);
ChoisirCouleurDessin(CouleurParComposante(255,255,255));
EcrireTexte(10,760,timer,2);
}
void Timer(){
if(Microsecondes()> suivant){
suivant = Microsecondes()+CYCLE;
seconde_actuel = (suivant/1000000)%10;
if(seconde_actuel !=old_seconde){
old_seconde = seconde_actuel;
if(seconde == 59){
minute=minute+1;
seconde=0;
Update_Timer();
}else{
seconde = seconde+1;
Update_Timer();
}
}
}
}

View File

@ -1,20 +0,0 @@
#include <stdio.h>
#include <unistd.h>
#include <graph.h>
void Temps(void) {
int minutes = 0;
int secondes = 0;
int tempsTotal = minutes * 60;
char x[6];
while(1) {
snprintf(x,6, "%02d:%02d", tempsTotal / 60, tempsTotal % 60);
ChoisirCouleurDessin(CouleurParComposante(0,0,0));
RemplirRectangle(10,400, 100,50);
ChoisirCouleurDessin(CouleurParComposante(255, 255, 255)); /* Blanc */
EcrireTexte(10,450, x , 2); /* Taille 2 pour un texte plus grand */
sleep(1);
tempsTotal++;
}
}

View File

@ -1,9 +0,0 @@
#ifndef fonctions.h
#define fonctions.h
/*Variables fichier terrain.c*/
void variables(){
int j;
int i;
}
#endif