Skip to content

Commit

Permalink
Merge pull request #8 from VxlerieUwU/monstre
Browse files Browse the repository at this point in the history
Merge monstre - main
  • Loading branch information
valerierx authored May 24, 2024
2 parents 8e92223 + 1bc48d8 commit 8a25db8
Show file tree
Hide file tree
Showing 8 changed files with 1,231 additions and 1,124 deletions.
386 changes: 195 additions & 191 deletions CosmicYonder.h
Original file line number Diff line number Diff line change
@@ -1,192 +1,196 @@
//Bibliothèques
#include <linux/input-event-codes.h>
#include <locale.h>
#include <ncurses.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
#include <unistd.h>
#include "ui/ui.h"
//Constantes
#ifndef COSMICYONDER_H_
#define COSMICYONDER_H_
#define ESC 27
#define INV_TAILLE 10
#define JOUEUR_H_
#define BOUTEILLE_O2_CHR "O"
#define BANDAGE_CHR "B"
#define CLE_CHR "C"
#define GENERATEUR_CHR "G"
#define REACTEUR_CHR "R"
#define PC_CHR "P"

#define MUR_VERTI_CHR "\u2550"
#define MUR_HORIZ_CHR "\u2551"
#define MUR_SUPG_CHR "\u2557"
#define MUR_SUPD_CHR "\u2554"
#define MUR_INFG_CHR "\u255D"
#define MUR_INFD_CHR "\u255A"
#define PORTE_CHR "\u25A2"
#define MARQUAGE_CHR "\u2800"
#define UNICODE_STRING_LONG 10
#define TAILLE_MAX_V 10
#define TAILLE_MAX_H 20
#define MAX_SALLES 5
#define FRAMES_PER_SECOND 20

//Enumération des différents objets

/* Les valeurs des Id des objets sont initialisés avec un décalage de 8 pour ne pas faire doublon
avec les valeurs des éléments possibles de la salle ce qui causerait des
problèmes lors de l'affichage de la salle*/
typedef enum{
OBJET_VIDE = -1, //
BOUTEILLE_O2 = 8, //Objet commun
BANDAGE = 9, //Objet commun
CLE = 10, //Objet commun
GENERATEUR = 11, //Objet à récupérer pour gagner
REACTEUR_1 = 12, // Objet à récupérer pour gagner
REACTEUR_2 = 13, // Objet à récupérer pour gagner
PC = 14, // Objet à récupérer pour gagner
BOBBY = 15,
CRAMPTES = 16,
}Id;

//Enumération des élements possibles de la salle
enum {
MUR_SUPG,
MUR_INFD,
MUR_SUPD,
MUR_INFG,
MUR_HORIZ,
MUR_VERTI,
VIDE,
PORTE,
};

//Enumération des directions
enum{
DROITE,
BAS,
GAUCHE,
HAUT
};

//Structures

typedef struct {
char nom[255];
int x;
int y;
Id id;
}Objet;

typedef struct{
Objet obTab[INV_TAILLE]; //l'inventaire est un tableau d'objets (a definir)
}Inventaire;

typedef struct{
char * nom;
int pv;
int xp;
int niv;
int att;
int def;
Inventaire inventaire;
int x;
int y;
}Joueur;


typedef struct {
int x;
int y;
int ouvert;
}Porte;

typedef struct {
int longueur;
int hauteur;
int x; //abscisse de l'origine de la salle
int y; //ordonnée de l'origine de la salle
int ** disp; //disposition de la salle en unicode (murs, objets, portes...)
int decouvert; //1 si oui 0 si non
Porte * portes; //Portes de la salle
int nportes; //Nombre de portes de la salle
Objet objets[4];
}Salle;

typedef struct{
int x;
int y;
}Tuile;

typedef struct{
int pv;
//position globale de l'ennemi
int xGlobal;
int yGlobal;
//position relative de l'ennemi par rapport a l'origine de la salle ou il se trouve
int xRelatif;
int yRelatif;
int att;
int def;
}Ennemi;

typedef struct {
Joueur * joueur;
int graine;
int portesNonOuvertes;
int objets_speciaux_apparus;
int salles_existantes;
Salle ** carte;
Ennemi ** ennemis;
}Partie;

//Fonctions

//Cette fonction permet de creer une salle a partir de dimensions fixees a l'aide de creerSalleProced
Salle * creerSalle(int taille_horizontale, int taille_verticale, int x, int y, int nportes,
int entree, int posEntree, WINDOW* win, int* sallerest, int* objets_speciaux_apparus, int portesNonOuvertes);
//permet de creer des dimensions aleatoires pour generer une salle
Salle * creerSalleProced(int x, int y, int nportes, int dir, WINDOW* win,
int* sallerest, int* objets_speciaux_apparus, int portesNonOuvertes);
//permet d'afficher toutes les salles
void dessineSalles(WINDOW * win, Salle ** salle, int salles_existantes);
//affiche une salle passee en parametre
void dessineSalle(WINDOW * win, Salle * salle);
//libere l'emplacement memoire de la salle
void libereSalle(Salle * salle);
//fonction constructeur de la porte
Porte initPorte(int dir,int v,int h);
// Ouverture de porte
void ouvrirPorte(Salle ** carte, int indexSalleAct,int indexNouvSalle, int indexPorte, int dir);
//initialise la structure joueur
void initJoueur(Joueur* joueur);
//cette fonction gere les interactions du joueur avec le jeu, comme les mouvements ou les combats
void interactions(int touche, Joueur* joueur, Salle ** carte, int salles_existantes, WINDOW* mainwin);
//initialise un ennemi à l'aide d'attributs passés en paramètre
Ennemi initEnnemi(int x, int y, int pv, int att, int def);
//gere les mouvements de l'ennemi
void ennemimv(Ennemi* ennemi,Salle* salle,Joueur* joueur, WINDOW* mainwin);
//affiche un ennemi
void afficheEnnemi(Ennemi* ennemi, WINDOW* mainwin);

int creation_graine(EntreeTexte * graineEntree); //Crée la graine de génération du jeu.

int maj_niveau(Joueur* joueur); //Gère mise à jour du niveau du joueur en fonction de son expérience
int perte_vie(Joueur* joueur, Ennemi* ennemi); //Gère la perte de vie du joueur

//Crée et fait apparaitre l'objet dans une salle en fonction des salles restantes
Objet apparition_objet(Salle* salle, int* objets_speciaux_apparus, int sallesrest, int portesNonOuvertes);
int compteurPortesNonOuvertes(Salle ** carte, int salles_existantes); //Compte les portes non ouvertes

HUD * hudJeu(int x, int y, int hauteur, int largeur, Joueur * joueur);

// SAUVEGARDE
void saveGame(Partie partie);
Partie * loadGame();


//Bibliothèques
#include <linux/input-event-codes.h>
#include <locale.h>
#include <ncurses.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
#include <unistd.h>
#include "ui/ui.h"
//Constantes
#ifndef COSMICYONDER_H_
#define COSMICYONDER_H_
#define ESC 27
#define INV_TAILLE 10
#define JOUEUR_H_
#define BOUTEILLE_O2_CHR "O"
#define BANDAGE_CHR "B"
#define CLE_CHR "C"
#define GENERATEUR_CHR "G"
#define REACTEUR_CHR "R"
#define PC_CHR "P"

#define MUR_VERTI_CHR "\u2550"
#define MUR_HORIZ_CHR "\u2551"
#define MUR_SUPG_CHR "\u2557"
#define MUR_SUPD_CHR "\u2554"
#define MUR_INFG_CHR "\u255D"
#define MUR_INFD_CHR "\u255A"
#define PORTE_CHR "\u25A2"
#define MARQUAGE_CHR "\u2800"
#define UNICODE_STRING_LONG 10
#define TAILLE_MAX_V 10
#define TAILLE_MAX_H 20
#define MAX_SALLES 10
#define FRAMES_PER_SECOND 60

//Enumération des différents objets

/* Les valeurs des Id des objets sont initialisés avec un décalage de 8 pour ne pas faire doublon
avec les valeurs des éléments possibles de la salle ce qui causerait des
problèmes lors de l'affichage de la salle*/
typedef enum{
BOUTEILLE_O2 = 8, //Objet commun
BANDAGE = 9, //Objet commun
CLE = 10, //Objet commun
GENERATEUR = 11, //Objet à récupérer pour gagner
REACTEUR_1 = 12, // Objet à récupérer pour gagner
REACTEUR_2 = 13, // Objet à récupérer pour gagner
PC = 14, // Objet à récupérer pour gagner
BOBBY = 15,
CRAMPTES = 16,
}Id;

//Enumération des élements possibles de la salle
enum {
MUR_SUPG,
MUR_INFD,
MUR_SUPD,
MUR_INFG,
MUR_HORIZ,
MUR_VERTI,
VIDE,
PORTE,
};

//Enumération des directions
enum{
DROITE,
BAS,
GAUCHE,
HAUT
};

//Structures

typedef struct {
char nom[255];
int x;
int y;
Id id;
}Objet;

typedef struct{
Objet obTab[INV_TAILLE]; //l'inventaire est un tableau d'objets (a definir)
}Inventaire;

typedef struct{
int pv;
int xp;
int niv;
int att;
int def;
Inventaire inventaire;
int x;
int y;
}Joueur;


typedef struct {
int x;
int y;
int ouvert;
}Porte;

typedef struct{
int x;
int y;
}Tuile;

typedef struct{
int pv;
//position globale de l'ennemi
int xGlobal;
int yGlobal;
//position relative de l'ennemi par rapport a l'origine de la salle ou il se trouve
int xRelatif;
int yRelatif;
int att;
int def;
}Ennemi;

typedef struct {
int longueur;
int hauteur;
int x; //abscisse de l'origine de la salle
int y; //ordonnée de l'origine de la salle
int ** disp; //disposition de la salle en unicode (murs, objets, portes...)
int decouvert; //1 si oui 0 si non
Porte * portes; //Portes de la salle
int nportes; //Nombres de portes de la salle
Objet objets[3];
Ennemi* ennemi;
}Salle;


typedef struct {
Joueur * joueur;
int graine;
int portesNonOuvertes;
int objets_speciaux_apparus;
int salles_existantes;
Salle ** carte;
Ennemi ** ennemis;
}Partie;

//Fonctions

//Cette fonction permet de creer une salle a partir de dimensions fixees a l'aide de creerSalleProced
Salle * creerSalle(int taille_horizontale, int taille_verticale, int x, int y, int nportes,
int entree, int posEntree, WINDOW* win, int* sallerest, int* objets_speciaux_apparus);
//permet de creer des dimensions aleatoires pour generer une salle
Salle * creerSalleProced(int x, int y, int nportes, int dir, WINDOW* win,
int* sallerest, int* objets_speciaux_apparus);
//permet d'afficher toutes les salles
void dessineSalles(WINDOW * win, Salle ** salle, int salles_existantes);
//affiche une salle passee en parametre
void dessineSalle(WINDOW * win, Salle * salle);
//libere l'emplacement memoire de la salle
void libereSalle(Salle * salle);
//fonction constructeur de la porte
Porte initPorte(int dir,int v,int h);
// Ouverture de porte
void ouvrirPorte(Salle ** carte, int indexSalleAct,int indexNouvSalle, int indexPorte, int dir);
//initialise la structure joueur
void initJoueur(Joueur* joueur);
//cette fonction gere les interactions du joueur avec le jeu, comme les mouvements ou les combats
void interactions(int touche, Joueur* joueur, Salle ** carte, int salles_existantes, WINDOW* mainwin);
//initialise un ennemi à l'aide d'attributs passés en paramètre
Ennemi initEnnemi(int x, int y, int pv, int att, int def);
//calcule la position globale de l'ennemi
void ennemipos(Ennemi* ennemi,Salle* salle);
//gere les mouvements de l'ennemi
void ennemimv(Ennemi* ennemi,Salle* salle,Joueur* joueur, WINDOW* mainwin);
//affiche un ennemi
void afficheEnnemi(Ennemi* ennemi, WINDOW* mainwin);
//spawn ennemi
Ennemi* apparition_ennemi(Salle* salle);

int creation_graine(EntreeTexte * graineEntree); //Crée la graine de génération du jeu.

int maj_niveau(Joueur* joueur); //Gère mise à jour du niveau du joueur en fonction de son expérience
int perte_vie(Joueur* joueur, Ennemi* ennemi); //Gère la perte de vie du joueur

Objet creation_objet(Salle* salle, int* objets_speciaux_apparus); //Crée un objet
Objet apparition_objet(Salle* salle, int* objets_speciaux_apparus); //Fait apparaitre l'objet dans une salle

int compteurPortesNonOuvertes(Salle ** carte, int salles_existantes); //Compte les portes non ouvertes

HUD * hudJeu(int x, int y, int hauteur, int largeur, Joueur * joueur);

// SAUVEGARDE
void saveGame(Partie partie);
Partie * loadGame();

#endif
Loading

0 comments on commit 8a25db8

Please sign in to comment.