Commit 05685cd6 authored by vautrin33u's avatar vautrin33u
Browse files

Suppression de la structure ingredient_t (superflu), mise en place...

Suppression de la structure ingredient_t (superflu), mise en place affichage/règle déplaçement des ingrédients
parent 53e48946
This source diff could not be displayed because it is too large. You can view the blob instead.
......@@ -10,8 +10,8 @@
#define CONSTANTES_H
//enum état pour décrire la direction du sprite
enum etat {BAS, HAUT, DROITE, GAUCHE, MOBILE, FIXE};
enum cuisson {FRIGO, FRAIS, SALE, PROPRE, CUIT, JETE};
enum etat {BAS, HAUT, DROITE, GAUCHE, MOBILE, FIXE, PORTE, POSE};
enum cuisson {INCONCERNE, FRIGO, FRAIS, SALE, PROPRE, CUIT, JETE};
/**
* \brief Largeur de l'écran
......@@ -49,6 +49,11 @@ enum cuisson {FRIGO, FRAIS, SALE, PROPRE, CUIT, JETE};
*/
#define NOM_FRIGO 'F'
/**
* @brief Nombre d'ingrédient disponible en cuisine
*/
#define INGREDIENT_DISPO 5
/**
* @brief Nom des fourneaux
*
......
......@@ -106,13 +106,39 @@ void apply_graphics (SDL_Renderer *renderer, textures_t *textures, world_t *worl
}
}
}
//Affichage des ingrédients (!!! à actualiser)
//Affichage des ingrédients
SDL_Rect temp;
if (textures->ingredient !=NULL){
for (int i=0; i<NB_INGREDIENT; i++){
if (est_visible(&world->tomates[i])){
temp = create_SDL_rect_from_texture(textures->ingredient, 0, 0, PLAT_SIZE, PLAT_SIZE);
SDL_RenderCopy(renderer, textures->ingredient, &temp, &world->tomates[i].rect);
if (est_visible(&world->en_cuisine[i])){
//Afficher la texture approprié au sprite détecté
switch(world->en_cuisine[i].nom){
case NOM_TOMATE:
temp = create_SDL_rect_from_texture(textures->ingredient, 0, 0, PLAT_SIZE, PLAT_SIZE);
break;
case NOM_PAIN:
temp = create_SDL_rect_from_texture(textures->ingredient, 25, 0, PLAT_SIZE, PLAT_SIZE);
break;
case NOM_STEAK:
temp = create_SDL_rect_from_texture(textures->ingredient, 50, 0, PLAT_SIZE, PLAT_SIZE);
break;
case NOM_SALADE:
temp = create_SDL_rect_from_texture(textures->ingredient, 75, 0, PLAT_SIZE, PLAT_SIZE);
break;
case NOM_FROMAGE:
temp = create_SDL_rect_from_texture(textures->ingredient, 100, 0, PLAT_SIZE, PLAT_SIZE);
break;
case NOM_CORNICHON:
temp = create_SDL_rect_from_texture(textures->ingredient, 125, 0, PLAT_SIZE, PLAT_SIZE);
break;
}
SDL_RenderCopy(renderer, textures->ingredient, &temp, &world->en_cuisine[i].rect);
}
}
}
......
......@@ -31,32 +31,84 @@ void init_data(world_t * world){
set_invisible(&world->comptoire[k]);
build_sprites_tab(&world->comptoire[k], 'P', BLOC_COMPT_SIZE, BLOC_COMPT_SIZE, &n_sprite, world->map);
}
SDL_Rect temp;
for (int i=0; i<10; i++){
temp = get_rect(&world->frigo); // Récupère la position du frigo pour placer les ingrédients dedans
init_sprite(&world->tomates[i], 'r', temp.x, temp.y, PLAT_SIZE, PLAT_SIZE, 0, BAS);
//set_invisible(&world->tomates[i]);
}
init_stocks(&world->etat_stocks, world);
//initialise la structure stock (menu, score et tableau de commande)
init_stocks(&world->etat_stocks, &world->frigo);
//Initialisation du tableau de recette disponible en cuisine selon le tableau de commande
init_ingredient_cuisine(world, &world->etat_stocks);
}
void init_ingre (ingredient_t* ingre, char nom, int x, int y, int w, int h, int v, int state){
init_sprite(&ingre->element, nom, x, y, w, h, v, state);
void init_ingre (sprite_t* ingre, char nom, int x, int y, int w, int h, int v, int state){
init_sprite(ingre, nom, x, y, w, h, v, state);
set_cuisson(ingre, FRIGO);
}
void init_stocks(stock_t* stocks, world_t *world){
//Initialisation des stocks et du tableau d'état des menus
void init_stocks(stock_t* stocks, sprite_t* zone_stockage){
//Initialisation des stocks, des commandes et du score
stocks->score = 0;
SDL_Rect temp = get_rect(&world->frigo);
for (int i=0; i<QTE_STOCK; i++){
init_ingre(&stocks->stock_tomate[i], NOM_TOMATE, temp.x, temp.y, PLAT_SIZE, PLAT_SIZE, 0, BAS);
SDL_Rect temp = get_rect(zone_stockage);
for (int i=0; i<2; i++){
init_ingre(&stocks->stock_pain[i], NOM_PAIN, temp.x, temp.y, PLAT_SIZE, PLAT_SIZE, 0, BAS);
init_ingre(&stocks->stock_steak[i], NOM_STEAK, temp.x, temp.y, PLAT_SIZE, PLAT_SIZE, 0, BAS);
init_ingre(&stocks->stock_salade[i], NOM_SALADE, temp.x, temp.y, PLAT_SIZE, PLAT_SIZE, 0, BAS);
init_ingre(&stocks->stock_fromage[i], NOM_SALADE, temp.x, temp.y, PLAT_SIZE, PLAT_SIZE, 0, BAS);
init_ingre(&stocks->stock_cornichon[i], NOM_CORNICHON, temp.x, temp.y, PLAT_SIZE, PLAT_SIZE, 0, BAS);
}
init_ingre(&stocks->stock_tomate, NOM_TOMATE, temp.x, temp.y, PLAT_SIZE, PLAT_SIZE, 0, BAS);
init_ingre(&stocks->stock_steak, NOM_STEAK, temp.x, temp.y, PLAT_SIZE, PLAT_SIZE, 0, BAS);
init_ingre(&stocks->stock_salade, NOM_SALADE, temp.x, temp.y, PLAT_SIZE, PLAT_SIZE, 0, BAS);
init_ingre(&stocks->stock_fromage, NOM_SALADE, temp.x, temp.y, PLAT_SIZE, PLAT_SIZE, 0, BAS);
init_ingre(&stocks->stock_cornichon, NOM_CORNICHON, temp.x, temp.y, PLAT_SIZE, PLAT_SIZE, 0, BAS);
init_commande(stocks);
}
void init_commande(stock_t *stocks){
//Initialise le tableau afin de générer une commande:
for (int i=0; i<INGREDIENT_DISPO; i++){
//Parcours du tableau
switch (aleatoire(0,5)){
case 0:
stocks->commande[i] = NOM_TOMATE;
break;
case 1:
stocks->commande[i] = NOM_SALADE;
break;
case 2:
stocks->commande[i] = NOM_STEAK;
break;
case 3:
stocks->commande[i] = NOM_CORNICHON;
break;
case 4:
stocks->commande[i] = NOM_FROMAGE;
break;
}
// Tranche de pain
if (i==0 || i==4){
stocks->commande[i] = NOM_PAIN;
}
}
}
void init_ingredient_cuisine(world_t * world, stock_t *stocks){
//initialisation des ingrédients mise à disposition en cuisine, selon la commande du client
world->en_cuisine[0] = stocks->stock_pain[0];
world->en_cuisine[INGREDIENT_DISPO-1] = stocks->stock_pain[1];
for (int i=1; i<INGREDIENT_DISPO-1; i++){
switch (stocks->commande[i]){
case NOM_TOMATE:
world->en_cuisine[i] = stocks->stock_tomate;
break;
case NOM_SALADE:
world->en_cuisine[i] = stocks->stock_salade;
break;
case NOM_STEAK:
world->en_cuisine[i] = stocks->stock_steak;
break;
case NOM_CORNICHON:
world->en_cuisine[i] = stocks->stock_cornichon;
break;
default:
world->en_cuisine[i] = stocks->stock_fromage;
break;
}
}
}
......@@ -75,6 +127,7 @@ void init_sprite(sprite_t *sprite, char nom, int x, int y, int w, int h, int v,
sprite->etat = state;
sprite->is_visible = 1;
sprite->nom = nom;
sprite->cuisson = INCONCERNE;
}
void print_sprite (sprite_t *sprite){
......@@ -147,15 +200,12 @@ SDL_Rect get_rect (sprite_t *sprite){
return sprite->rect;
}
sprite_t* get_sprite (ingredient_t *ingre){
return &ingre->element;
}
int get_cuisson (ingredient_t *ingre){
int get_cuisson (sprite_t *ingre){
return ingre->cuisson;
}
void set_cuisson(ingredient_t *ingre, int cuisson){
void set_cuisson(sprite_t *ingre, int cuisson){
ingre->cuisson = cuisson;
}
......@@ -201,6 +251,32 @@ void handle_collision (sprite_t* spr_move, sprite_t* spr_fixed){
}
}
void handle_deplacement_ingredient (sprite_t* joueur, sprite_t* ingredient){
//Gestion du déplacement d'un ingrédient par rapport au joueur
if (return_state(ingredient) == PORTE){
SDL_Rect pos_ingredient = get_rect(ingredient);
SDL_Rect pos_joueur = get_rect(joueur);
switch (return_state(joueur)){
case BAS:
pos_ingredient.x = (pos_joueur.x+(pos_joueur.w/2)) - pos_ingredient.w/2;
pos_ingredient.y = (pos_joueur.y + pos_joueur.h) - pos_ingredient.h;
break;
case HAUT:
pos_ingredient.x = (pos_joueur.x+(pos_joueur.w/2)) - pos_ingredient.w/2;
pos_ingredient.y = pos_joueur.y + pos_ingredient.h;
break;
case DROITE:
pos_ingredient.x = (pos_joueur.x + pos_joueur.w) - pos_ingredient.w;
pos_ingredient.y = (pos_joueur.y+(pos_joueur.h/2)) - pos_ingredient.h/2;
break;
case GAUCHE:
pos_ingredient.x = pos_joueur.x + pos_ingredient.w;
pos_ingredient.y = (pos_joueur.y+(pos_joueur.h/2)) - pos_ingredient.h/2;
break;
}
}
}
int aleatoire (int a, int b){
// Fonction générant une valeur aléatoire entre a (inclu) et b (exclu)
......@@ -273,7 +349,7 @@ void limites_externes (sprite_t *sprite){
}
void limites_interne (world_t* world){
//Gestion des limites internes au jeu
//Gestion des limites internes au jeu; joueur par rapport aux meubles
handle_collision(&world->joueur, &world->envoi);
handle_collision(&world->joueur, &world->four);
handle_collision(&world->joueur, &world->frigo);
......@@ -282,7 +358,12 @@ void limites_interne (world_t* world){
for (int i=0; i<NB_COMPT_1; i++){
handle_collision(&world->joueur, &world->comptoire[i]);
}
//Déplacement d'un ingrédient avec le joueur;
for (int i=0; i<INGREDIENT_DISPO; i++){
if (return_state(&world->en_cuisine[i]) == PORTE){
handle_deplacement_ingredient(&world->joueur, &world->en_cuisine[i]);
}
}
}
void reset_sprite_on_map (sprite_t *sprite, world_t *world){ // TODO: A retravailler pour les ingres et joueur
......
......@@ -29,6 +29,7 @@ struct sprite_s{
int etat; /*!< état du sprite; permet de varier son apparence */
int is_visible; /*!< Gère la visibilité d'un sprite; 1 si visible, 0 sinon */
SDL_Rect rect; /*!< structure de position du sprite*/
int cuisson; /*!< Etat de la cuisson*/
};
/**
......@@ -39,43 +40,17 @@ typedef struct sprite_s sprite_t;
/**
* @brief Représentation des ingrédients
*/
struct ingredient_s{
sprite_t element; /*!< sprite d'un element*/
int cuisson; /*!< Etat de la cuisson*/
};
/**
* \brief Type qui correspond aux ingredients
*/
typedef struct ingredient_s ingredient_t;
/**
* @brief Représentation du menu (liste chainée)
*
*/
struct menu_s{
ingredient_t recette[5]; /*!< tableau d'ingrédients dans un plat*/
menu_t *suivant; /*!< pointeur vers recette suivante*/
};
/**
* \brief Type correspondant à la demande à remplir
*/
typedef struct menu_s menu_t;
/**
* \brief Representation des stocks et du score
* \brief Representation des stocks, du menu commandé par le client, et du score.
*/
struct stock_s{
ingredient_t stock_tomate[QTE_STOCK]; /*!< tableau des sprites du stock de tomates*/
ingredient_t stock_pain[QTE_STOCK]; /*!< tableau des sprites du stock de tomates*/
ingredient_t stock_steak[QTE_STOCK]; /*!< tableau des sprites du stock de tomates*/
ingredient_t stock_salade[QTE_STOCK]; /*!< tableau des sprites du stock de tomates*/
ingredient_t stock_fromage[QTE_STOCK]; /*!< tableau des sprites du stock de tomates*/
ingredient_t stock_cornichon[QTE_STOCK]; /*!< tableau des sprites du stock de tomates*/
sprite_t stock_tomate; /*!< stock de tomates*/
sprite_t stock_pain[2]; /*!< stock de pains*/
sprite_t stock_steak; /*!< stock de steaks*/
sprite_t stock_salade; /*!< stock de salade*/
sprite_t stock_fromage; /*!< stock de fromage*/
sprite_t stock_cornichon; /*!< stock de cornichon*/
int score; /*!< Score actuel*/
char commande[5]; /*!< tableau correspondant à un plat à faire*/
};
/**
* \brief Type qui correspond au menu et aux stocks
......@@ -91,7 +66,7 @@ struct world_s{
sprite_t envoi; /*< Sprite de la zone d'envoi */
sprite_t poubelle; /*< Sprite de la poubelle */
sprite_t comptoire[NB_COMPT_1]; /*< Tableau de sprite de comptoir */
sprite_t tomates[10] ;
sprite_t en_cuisine[INGREDIENT_DISPO]; /*< Tableau d'ingrédients */
stock_t etat_stocks; /*!< Structure gérant les stocks et le score*/
int compteur_plats; /*!< Nombre d'ennemis étant sorti de l'écran */
int attente; /*!< Compte le nombre de tours avant la fin de la partie*/
......@@ -128,7 +103,7 @@ void init_sprite(sprite_t *sprite, char nom, int x, int y, int w, int h, int v,
* @param v Vitesse
* @param state Etat du sprite
*/
void init_ingre (ingredient_t* ingre, char nom, int x, int y, int w, int h, int v, int state);
void init_ingre (sprite_t* ingre, char nom, int x, int y, int w, int h, int v, int state);
/**
* @brief Initialise les stocks et l'état de complétion des burgers
......@@ -136,15 +111,35 @@ void init_ingre (ingredient_t* ingre, char nom, int x, int y, int w, int h, int
* @param stocks Etat des stocks
* @param world Données du monde
*/
void init_stocks(stock_t* stocks, world_t *world);
void init_stocks(stock_t* stocks, sprite_t* zone_stockage);
/**
* @brief Initialise le tableau de commande
* @param stocks
*/
void init_commande(stock_t *stocks);
/**
* @brief Génère les sprites rendu disponible selon le bon de commande actuel
* @param world Données du monde du jeu
* @param stocks Données des ingrédients en stock / commande / score
*/
void init_ingredient_cuisine(world_t * world, stock_t *stocks);
/**
* @brief Affiche certains éléments d'un sprite
*
* @param sprite
*/
void print_sprite (sprite_t *sprite);
/**
* @brief Génération d'une valeur aléatoire entre a (inclus) et b (exclu)
* @param a valeur minimal
* @param b valeur maximal exclu
* @return int
*/
int aleatoire (int a, int b);
/**
* @brief Fonction initialisant un unique sprite (meuble)
*
......@@ -176,13 +171,6 @@ void build_sprites_tab (sprite_t *sprite, char nomSprite, int largeur, int haute
*/
SDL_Rect get_rect (sprite_t *sprite);
/**
* @brief Retourne un sprite dans une structure ingre
*
* @param ingre
* @return sprite_t*
*/
sprite_t* get_sprite (ingredient_t *ingre);
/**
* @brief récupère la valeur de la cuisson
......@@ -190,7 +178,7 @@ sprite_t* get_sprite (ingredient_t *ingre);
* @param ingre
* @return int état de la cuisson
*/
int get_cuisson (ingredient_t *ingre);
int get_cuisson (sprite_t *ingre);
/**
* @brief Modifie la valeur de la cuisson
......@@ -198,7 +186,7 @@ int get_cuisson (ingredient_t *ingre);
* @param ingre
* @param cuisson
*/
void set_cuisson(ingredient_t *ingre, int cuisson);
void set_cuisson(sprite_t *ingre, int cuisson);
/**
* @brief Ajoute à la position du sprite les valeurs indiquées
......@@ -225,6 +213,14 @@ int has_collided (sprite_t* spr1, sprite_t* spr2);
*/
void handle_collision (sprite_t* spr_move, sprite_t* spr_fixed);
/**
* @brief Déplace un ingrédient tant que le joueur le porte
*
* @param joueur
* @param ingredient
*/
void handle_deplacement_ingredient (sprite_t* joueur, sprite_t* ingredient);
/**
* @brief donne le score actuelle de la partie
*
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment