Skip to content

Commit

Permalink
Commentaires ui
Browse files Browse the repository at this point in the history
  • Loading branch information
Pyrodaz committed May 26, 2024
1 parent 13f6851 commit 23db1c6
Show file tree
Hide file tree
Showing 6 changed files with 106 additions and 18 deletions.
4 changes: 2 additions & 2 deletions CosmicYonder.h
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@
#ifndef COSMICYONDER_H_
#define COSMICYONDER_H_
#define ESC 27
#define INV_TAILLE 10
#define INV_TAILLE 10
#define JOUEUR_H_
#define BOUTEILLE_O2_CHR "O"
#define BANDAGE_CHR "B"
Expand All @@ -32,7 +32,7 @@
#define UNICODE_STRING_LONG 10
#define TAILLE_MAX_V 10
#define TAILLE_MAX_H 20
#define MAX_SALLES 80
#define MAX_SALLES 10
#define IMAGES_PAR_SECONDE 60
#define MINUTEUR 300

Expand Down
4 changes: 2 additions & 2 deletions joueur.c
Original file line number Diff line number Diff line change
Expand Up @@ -19,8 +19,8 @@ void maj_niveau(Joueur* joueur){
}
joueur->niv = 1 + joueur->xp/100;
joueur->pv = 100 + joueur->niv*20;
joueur->att = 10 + joueur->niv*5;
joueur->def = 5 + joueur->niv;
joueur->att = 10 + joueur->niv*1;
joueur->def = 5 + joueur->niv*1;
}

void perte_vie_joueur(Joueur* joueur, Ennemi* ennemi){
Expand Down
1 change: 1 addition & 0 deletions main.c
Original file line number Diff line number Diff line change
Expand Up @@ -228,6 +228,7 @@ int main()
if(minuteur <= 0){
etatJeu = 0;
}
maj_niveau(partie->joueur);
}

saveGame(partie);
Expand Down
13 changes: 11 additions & 2 deletions ui/hud.c
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,10 @@


HUD * hudJeu(int x, int y, int hauteur, int largeur, Joueur * joueur, int minuteur) {
/* Fonction gérant la création des informations comme les barres de vie et
les valeurs tels que le minuteur ou les stats du joueur de la hud en jeu*/

//Initialisation des variables nécessaires à la création de la hud
HUD * hud = NULL;

StatusBar * pv = NULL;
Expand All @@ -35,7 +39,7 @@ HUD * hudJeu(int x, int y, int hauteur, int largeur, Joueur * joueur, int minute

char ** nameStr = NULL;


//Allocation de des variables de texte et des infos de la partie dynamiquement
atkStr = malloc(sizeof(char*));
if(atkStr == NULL){
logMessage(ERROR, "Erreur d'allocation de mémoire pour l'attaque du joueur");
Expand Down Expand Up @@ -130,11 +134,14 @@ HUD * hudJeu(int x, int y, int hauteur, int largeur, Joueur * joueur, int minute
exit(1);
}

/*Création des chaines de caractères pour le nom, l'attaque, la défense et le minuteur
Celles-ci s'afficheront dans la hud*/
sprintf(*nameStr, "Nom : %s", joueur->nom);
sprintf(*atkStr, "Attaque : %d", joueur->att);
sprintf(*defStr, "Défense : %d", joueur->def);
sprintf(*minuteurStr, "Minuteur : %d", minuteur);

//Allocation mémoire des textes et barres de la hud
pv = malloc(sizeof(StatusBar));
if(pv == NULL){
logMessage(ERROR, "Erreur d'allocation de mémoire pour la barre de vie");
Expand Down Expand Up @@ -187,6 +194,7 @@ HUD * hudJeu(int x, int y, int hauteur, int largeur, Joueur * joueur, int minute
exit(1);
}

//Création des barres et des textes de la hud selon une abscisse et une ordonnée
pv = creerStatusBar(x + 11, y + hauteur/2, 10, 2, joueur->pv/10);
xp = creerStatusBar(x + 11, y + hauteur/2 + 1, 10, 3, joueur->xp/10);
niv = creerStatusBar(x + 11, y + hauteur/2 + 2, 10, 4, joueur->niv);
Expand All @@ -199,8 +207,9 @@ HUD * hudJeu(int x, int y, int hauteur, int largeur, Joueur * joueur, int minute
defText = creerTexte(x + largeur/3 - 10, y + hauteur/2 + 1, defStr, 1, 7);
minuteurTexte = creerTexte(x + largeur/3 - 10,y+hauteur/2 + 2,minuteurStr,1,7);

//Création de la hud
hud = creerHUD(x, y, hauteur, largeur, 1, 7, 3);

//Placement des barres et des textes dans la hud
hud->textWidgets[0] = pvText;
hud->textWidgets[1] = xpText;
hud->textWidgets[2] = nivText;
Expand Down
52 changes: 43 additions & 9 deletions ui/menu.c
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,8 @@
#include "../logger.h"

Menu *cosmicMenu(int thauteur, int tlargeur) {
/* Fonction servant à afficher le menu de cosmic yonder selon la largeur et hauteur
du terminal.*/
int titreLignes, titreX, titreY; // nombre de lignes et padding vertical du titre
Menu *menu;
Texte *titre;
Expand All @@ -16,6 +18,7 @@ Menu *cosmicMenu(int thauteur, int tlargeur) {
Bouton *quitter;
char **titreTexte = NULL;


if (tlargeur >= ASCII_TAILLEMIN) {
titreTexte = (char **) malloc(sizeof(char) * 8 * 131);
titreLignes = 8;
Expand All @@ -32,6 +35,7 @@ Menu *cosmicMenu(int thauteur, int tlargeur) {
exit(1);
}

//Si la largeur du terminal n'est pas assez grande : le texte COSMIC YONDER ne s'affiche pas en ASCII
if (tlargeur >= ASCII_TAILLEMIN) {
// Nécessite l'extension GNU du standard C (gnu11 ou gnu99)
titreTexte[0] = "________ ________ ________ _____ ______ ___ ________ ___ ___ ________ ________ ________ _______ ________";
Expand All @@ -47,14 +51,14 @@ Menu *cosmicMenu(int thauteur, int tlargeur) {
titreTexte[1] = "Agrandis ton terminal!";
}


//Création éléments menu
titre = creerTexte(titreX, titreY, titreTexte, titreLignes, 6);
commencer = creerBouton(tlargeur / 2 - 2, thauteur / 2 + 2, 5, 2, "Nouvelle partie");
charger = creerBouton(tlargeur / 2 - 2, thauteur / 2 + 4, 5, 2, "Charger sauvegarde");
parametres = creerBouton(tlargeur / 2 - 2, thauteur / 2 + 6, 5, 2, "Options");
quitter = creerBouton(tlargeur / 2 - 2, thauteur / 2 + 8, 5, 2, "Quitter");


//Création menu et assignation des éléments au menu
menu = creerMenu(thauteur, tlargeur, titre, 4, 1, 6);
menu->boutons[0] = commencer;
menu->boutons[1] = charger;
Expand All @@ -66,6 +70,7 @@ Menu *cosmicMenu(int thauteur, int tlargeur) {
}

Texte * respawnTexte(int x, int y, int largeur) {
/* Fonction servant à créer le texte de réapparition quand le joueur meurt*/
Texte * respawnTxt = NULL;
respawnTxt = malloc(sizeof(Texte));
if(respawnTxt == NULL) {
Expand Down Expand Up @@ -115,6 +120,7 @@ Texte * respawnTexte(int x, int y, int largeur) {
}

void renderRespawn(WINDOW * win, Texte * respawn) {
/* Rendu du texte de réapparition sur le terminal quand le joueur meurt*/
wattron(win, COLOR_PAIR(5));

mvwhline(win, respawn->y - 1, respawn->x - 1, ACS_HLINE, 82);
Expand All @@ -136,23 +142,27 @@ void renderRespawn(WINDOW * win, Texte * respawn) {


MiniMenu *options(int x, int y, int hauteur, int largeur) {
/* Fonction gérant le sous-menu des options dans le menu de début de partie*/
//Initialisation
MiniMenu *parametres;

Bouton *quitter;
Bouton *sauvegarder;

Texte *titre;
char **titreTexte = NULL;
//Allocation mémoire
titreTexte = (char **) malloc(sizeof(char) * 8);
titreTexte[0] = "Options";

titre = creerTexte(largeur/2 + x/2 - 4, hauteur/2, titreTexte, 1, 6);

//Bouton du menu
sauvegarder = creerBouton(x - 5, y + 2, 5, 2, "Sauvegarder");
quitter = creerBouton(x - 3, y + 4, 5, 2, "Retour");

parametres = creerMessage(largeur / 2, hauteur / 2, hauteur, largeur, 6, titre, 2, NULL);

//Assignation des boutons au menu
parametres->boutons[0] = sauvegarder;
parametres->boutons[1] = quitter;

Expand All @@ -161,6 +171,9 @@ MiniMenu *options(int x, int y, int hauteur, int largeur) {


MiniMenu *pauseMenu(int x, int y, int hauteur, int largeur) {
/* Fonction créant le menu de pause */

//Initialisation
MiniMenu *pause;

Bouton *retour;
Expand All @@ -169,17 +182,18 @@ MiniMenu *pauseMenu(int x, int y, int hauteur, int largeur) {

Texte *titre;
char **titreTexte = NULL;
//Allocation
titreTexte = (char **) malloc(sizeof(char) * 8);
titreTexte[0] = "Pause";

titre = creerTexte(largeur/2 + x/2 - 4, hauteur/2, titreTexte, 1, 6);

//Boutons du menu
reprendre = creerBouton(x - 5, y + 2, 5, 2, "Reprendre");
retour = creerBouton(x - 3, y + 4, 5, 2, "Retour au menu");
quitter = creerBouton(x - 3, y + 6, 5, 2, "Quitter");

pause = creerMessage(largeur / 2, hauteur / 2, hauteur, largeur, 6, titre, 3, NULL);

//Assignation des boutons au menu
pause->boutons[0] = reprendre;
pause->boutons[1] = retour;
pause->boutons[2] = quitter;
Expand All @@ -188,24 +202,29 @@ MiniMenu *pauseMenu(int x, int y, int hauteur, int largeur) {
}

MiniMenu * sauvegardeMenu(int x, int y, int hauteur, int largeur) {
/* Menu de sauvegarde*/

}

EntreeTexte * graineMenu(int x, int y, int hauteur, int largeur) {
/* Fonction servant à créer le menu de la graine en fonction des dimensions du terminal*/
//Initialisation
Texte * titre;
EntreeTexte *graine;
char **titreTexte = NULL;
//Allocation mémoire texte + contenu des textes
titreTexte = (char **) malloc(sizeof(char) * (43 + 34));
titreTexte[0] = "Entrez une graine (nombre entier)";
titreTexte[1] = "Laisser vide pour la générer aléatoirement";

titre = creerTexte(largeur/2 + x - 20, y + hauteur/2 - 4, titreTexte, 2, 6);

//Création de l'interface texte pour entrer la graine
graine = creerEntreeTexte(x - 10 + largeur/2, y + hauteur/2 + 2, 18, 4, titre);
return graine;
}

EntreeTexte * sauvegardeEntree(int x, int y, int hauteur, int largeur) {
/* Sert à créer une sauvegarde*/
Texte * titre;
EntreeTexte *sauvegarde;
char **titreTexte = NULL;
Expand All @@ -222,6 +241,7 @@ EntreeTexte * sauvegardeEntree(int x, int y, int hauteur, int largeur) {


void renduFenetreMenu(WINDOW *win, Menu menu, int thauteur, int tlargeur) {
/* Rendu de la fenetre du menu en fonction de la taille du terminal*/
wattron(win, COLOR_PAIR(5));

mvwhline(win, 0, 0, ACS_HLINE, tlargeur);
Expand All @@ -239,14 +259,16 @@ void renduFenetreMenu(WINDOW *win, Menu menu, int thauteur, int tlargeur) {
}

void renduFenetreOptions(WINDOW *win, MiniMenu options) {
/* Fonction gérant le rendu et l'affichage de la fenetre d'option en fonction de la taille du menu option*/
//Création de la zone de menu
for(int i = options.y; i < options.y + options.hauteur - 1; i++) {
for(int j = options.x; j < options.x + options.largeur - 1; j++) {
mvwaddch(win, i, j, ' ');
}
}

wattron(win, COLOR_PAIR(7));

//Remplissage de la zone du menu avec les textes et les boutons
mvwhline(win, options.y, options.x, ACS_HLINE, options.largeur);
mvwhline(win, options.y + options.hauteur - 1, options.x, ACS_HLINE, options.largeur);
mvwvline(win, options.y, options.x, ACS_VLINE, options.hauteur);
Expand All @@ -264,6 +286,7 @@ void renduFenetreOptions(WINDOW *win, MiniMenu options) {
}

void renduFenetreEntree(WINDOW *win, EntreeTexte * entree, int x, int y, int hauteur, int largeur) {
/* Sert au rendu de la fenetre d'entrée pour la graine*/
for(int i = y; i < y + largeur; i++) {
for(int j = x; j < x + hauteur - 1; j++) {
mvwaddch(win, i, j, ' ');
Expand All @@ -287,6 +310,8 @@ void renduFenetreEntree(WINDOW *win, EntreeTexte * entree, int x, int y, int hau
}

void entreeMenu(Menu *menu, int touche) {
/* Sert à gérer le sélecteur du menu en fonction des touches choisies
(bouton vers le bas pour aller au bouton du bas et idem pour le haut)*/
switch (touche) {
case KEY_UP:
if (menu->selecteur != 0) {
Expand All @@ -305,6 +330,7 @@ void entreeMenu(Menu *menu, int touche) {
}

void entreeTexte(EntreeTexte *entree, int touche) {
/* Fonction servant à savoir si une entrée est valide quand on l'execute*/
switch (touche) {
case ERR:
break;
Expand All @@ -317,6 +343,7 @@ void entreeTexte(EntreeTexte *entree, int touche) {
break;

case 10:
//L'entrée est valide
entree->valide = 1;
break;
case '-':
Expand All @@ -330,6 +357,7 @@ void entreeTexte(EntreeTexte *entree, int touche) {
case '7':
case '8':
case '9':
//Sinon il ne se passe rien
if (entree->taille > entree->curseur+1) {
entree->buffer[entree->curseur] = (char) touche;
entree->affichage[entree->curseur] = (char) touche;
Expand All @@ -343,27 +371,33 @@ void entreeTexte(EntreeTexte *entree, int touche) {
}

void entreeMessage(MiniMenu *message, int touche) {
/* Gère le sélecteur dans les mini-menus en fonction des touches et des boutons du menu*/
switch (touche) {
case ERR:
break;
case KEY_UP:
if (message->curseur != 0) {
//Si le menu a un bouton en haut par rapport au curseur on monte
if (message->curseur != 0) {
message->curseur--;
}
break;
case KEY_DOWN:
//Si le menu a un bouton en bas par rapport au curseur on descend
if (message->curseur != message->nbBoutons - 1) {
message->curseur++;
}
break;
case 10:
//Sinon on ne bouge pas du bouton valide surlequel on est
message->selEtat = 1;
break;
}
}

void pauseBoucle(WINDOW *mainwin, int *touche, MiniMenu *pause, int *jeuEtat) {
while (!pause->selEtat) {
/* Fonction qui fait une boucle infini tant qu'on a pas choisi une option
pour arrêter le jeu quand on fait pause*/
while (!pause->selEtat) { //Tant qu'on ne sélectionne rien le jeu est arrêté
wrefresh(mainwin);
*touche = wgetch(mainwin);
renduFenetreOptions(mainwin, *pause);
Expand Down
Loading

0 comments on commit 23db1c6

Please sign in to comment.