Commit f4393060 authored by vautrin33u's avatar vautrin33u
Browse files

Ajout de nouveaux modules

parent 410a5cfa
......@@ -5,8 +5,8 @@ LDFLAGS = `sdl2-config --cflags --libs` -lSDL2_ttf
INCLUDES = -I./SDL2_ttf
EXEC1 = main
EXEC2 = tests
SRC = logique.c gestion_fichiers.c graphisme.c main.c
SRC2 = logique.c gestion_fichiers.c graphisme.c tests.c
SRC = logique.c gestion_fichiers.c sprite.c graphisme.c main.c
SRC2 = logique.c gestion_fichiers.c sprite.c graphisme.c tests.c
OBJ = $(SRC:.c=.o)
OBJ2 = $(SRC2:.c=.o)
......
This source diff could not be displayed because it is too large. You can view the blob instead.
......@@ -115,3 +115,56 @@ void genere_fichier (const char* nomFichier, char** source, int ligne, int colon
printf("\n Erreur: fichier n'a pas pu être ouvert ou généré \n");
}
}
char** init_map (){
const char* nomFichier = "Ressources/map.txt";
int hauteur = SCREEN_HEIGHT;
int largeur = SCREEN_WIDTH;
char** tab = allouer_tab_2D(hauteur, largeur);
for (int i=0; i<hauteur; i++){
for (int j=0; j<largeur; j++){
tab[i][j] = ' '; //Rempli les zones accessibles avec un espaces
//Limites extérieures du terrain remplis avec 'X'
if (j< SIZE_MUR || j>= largeur-SIZE_MUR || i< SIZE_MUR || i>= hauteur-SIZE_MUR){
tab[i][j] = 'X';
}
// Zone de déplacement interdit au joueurs; zones de travail:
if((j>= SIZE_MUR && j<BLOC_COMPT_SIZE+SIZE_MUR && i>=SIZE_MUR && i<SIZE_MUR+ (3*BLOC_COMPT_SIZE)) || (j>=SIZE_MUR+BLOC_COMPT_SIZE && j<SIZE_MUR + (4*BLOC_COMPT_SIZE) && i>=SIZE_MUR && i<SIZE_MUR + BLOC_COMPT_SIZE) || (j>= SIZE_MUR + (4*BLOC_COMPT_SIZE) && j< SIZE_MUR + (5*BLOC_COMPT_SIZE) && i>= SIZE_MUR && i<SIZE_MUR + BLOC_COMPT_SIZE*3)){
tab[i][j] = NOM_COMPT;
}
// Marqueurs pour délimité tous les éléments de travail:
if((i==SIZE_MUR && j==SIZE_MUR) || (i==SIZE_MUR && j==SIZE_MUR+BLOC_COMPT_SIZE) || (i==SIZE_MUR && j==SIZE_MUR+BLOC_COMPT_SIZE*2) || (i==SIZE_MUR && j==SIZE_MUR+BLOC_COMPT_SIZE*3) || (j== SIZE_MUR && i==SIZE_MUR+BLOC_COMPT_SIZE) || (j== SIZE_MUR &&i==SIZE_MUR+BLOC_COMPT_SIZE*2) || (j== SIZE_MUR + BLOC_COMPT_SIZE*4 && i==SIZE_MUR) || (j== SIZE_MUR + BLOC_COMPT_SIZE*4 && i == SIZE_MUR + BLOC_COMPT_SIZE) || (j== SIZE_MUR + BLOC_COMPT_SIZE*4 && i == SIZE_MUR + BLOC_COMPT_SIZE*2)){
tab[i][j] = MARQUEUR_COMPT;
}
//Emplacement du frigo
if (j>=SIZE_MUR && j<SIZE_MUR+FRIGO_LARGEUR && i>=hauteur-(SIZE_MUR + FRIGO_HAUTEUR) && i<hauteur - SIZE_MUR){
tab[i][j] = NOM_FRIGO;
}
//Emplacement des fourneaux
if (j>=largeur-(SIZE_MUR+FOUR_HAUTEUR) && j<largeur-SIZE_MUR && i>=SIZE_MUR && i<SIZE_MUR+FOUR_LARGEUR){
tab[i][j] = NOM_FOUR;
}
//Emplacement du lavabo
if (j>=SIZE_MUR+(4*BLOC_COMPT_SIZE) && j<SIZE_MUR+(4*BLOC_COMPT_SIZE)+LAVABO_LARGEUR && i>=hauteur-(SIZE_MUR+BLOC_COMPT_SIZE) && i<hauteur-(SIZE_MUR+BLOC_COMPT_SIZE)+LAVABO_HAUTEUR){
tab[i][j] = NOM_LAVABO;
}
//Zone d'envoi
if (j>=largeur-ZONE_ENVOI_LARGEUR && j<largeur && i>=SIZE_MUR+(3*BLOC_COMPT_SIZE) && i<SIZE_MUR+(3*BLOC_COMPT_SIZE)+ZONE_ENVOI_HAUTEUR){
tab[i][j] = NOM_ENVOI;
}
//Poubelle
if (j>=largeur-(SIZE_MUR+BLOC_COMPT_SIZE) && j<largeur-(SIZE_MUR+BLOC_COMPT_SIZE)+POUBELLE_LARGEUR && i>=hauteur-(SIZE_MUR + POUBELLE_HAUTEUR) && i<hauteur-SIZE_MUR){
tab[i][j] = NOM_POUBELLE;
}
}
}
genere_fichier(nomFichier, tab, hauteur, largeur);
return tab;
}
\ No newline at end of file
......@@ -12,6 +12,7 @@
#include <SDL2/SDL.h>
#include <stdio.h>
#include <stdlib.h>
#include "constantes.h"
/**
* \brief Alloue un tableau de deux dimension de type caractères
......
......@@ -80,7 +80,7 @@ void apply_graphics (SDL_Renderer *renderer, textures_t *textures, world_t *worl
}
apply_mobilier (renderer, textures, world);
apply_ingredients (renderer, textures, world->en_cuisine);
apply_texte (renderer, &world->etat_stocks, textures);
apply_texte (renderer, world, textures);
}
void apply_mobilier (SDL_Renderer* renderer, textures_t* textures, world_t* world){
......@@ -157,15 +157,15 @@ void apply_ingredients (SDL_Renderer* renderer, textures_t* textures, sprite_t*
}
}
void apply_texte (SDL_Renderer* renderer, stock_t* stock, textures_t* textures){
void apply_texte (SDL_Renderer* renderer, world_t* world, textures_t* textures){
//Affichage du score
if (textures->police != NULL){
//Zone d'affichage du score -- taille du score s'adapte à son contenu
SDL_Rect zone_message = create_SDL_rect(20, 550, 75, 50);
SDL_Rect zone_score;
if (get_score(stock)<100){
if (get_score(world)<100){
zone_score = create_SDL_rect(90, 555, 40, 40);
}else if (get_score(stock)<10000){
}else if (get_score(world)<10000){
zone_score = create_SDL_rect(90, 555, 60, 40);
}else{
zone_score = create_SDL_rect(90, 555, 100, 40);
......@@ -177,8 +177,8 @@ void apply_texte (SDL_Renderer* renderer, stock_t* stock, textures_t* textures){
//affichage en deux partie de score et de la valeur du score
message = charger_texte("Score : ", renderer, textures->police, color);
char score_j[10];
sprintf(score_j, " %d", stock->score); //Nécessaire pour afficher le score -- limite le nombre de points max!
printf("\n SCORE : %d", get_score(stock));
sprintf(score_j, " %d", world->score); //Nécessaire pour afficher le score -- limite le nombre de points max!
printf("\n SCORE : %d", get_score(world));
points = charger_texte(score_j, renderer, textures->police, color);
render_texte(renderer, zone_message, message);
render_texte(renderer, zone_score, points);
......
......@@ -10,7 +10,6 @@
#define GRAPHISME_H
#include "logique.h"
#include "constantes.h"
struct textures_s{
......@@ -98,7 +97,7 @@ void apply_mobilier (SDL_Renderer* renderer, textures_t* textures, world_t* worl
* @param stock état des stocks et score
* @param textures
*/
void apply_texte (SDL_Renderer* renderer, stock_t* stock, textures_t* textures);
void apply_texte (SDL_Renderer* renderer, world_t* world, textures_t* textures);
/**
* @brief Applique les ingrédients en jeu sur le renderer
......
......@@ -13,6 +13,7 @@ void init_data(world_t * world){
world->gameover = 0;
world->compteur_plats = 0;
world->attente = 0;
world->score = 0;
//Initialise le sprite du joueur en haut à gauche de l'écran, en état 0
init_sprite(&world->joueur, NOM_JOUEUR, 200, 200, SIZE_JOUEUR, SIZE_JOUEUR, 10, BAS);
......@@ -39,15 +40,44 @@ void init_data(world_t * world){
init_ingredient_cuisine(world, &world->etat_stocks);
}
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);
set_invisible(ingre);
void init_ingredient_cuisine(world_t * world, stock_t *stocks){
//initialisation des ingrédients mise à disposition en cuisine, selon la commande du client
int compt_tomate = 0;
int compt_salade = 0;
int compt_steak = 0;
int compt_cornichon = 0;
int compt_fromage = 0;
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[compt_tomate];
compt_tomate++;
break;
case NOM_SALADE:
world->en_cuisine[i] = stocks->stock_salade[compt_salade];
compt_salade++;
break;
case NOM_STEAK:
world->en_cuisine[i] = stocks->stock_steak[compt_steak];
compt_steak++;
break;
case NOM_CORNICHON:
world->en_cuisine[i] = stocks->stock_cornichon[compt_cornichon];
compt_cornichon++;
break;
default:
world->en_cuisine[i] = stocks->stock_fromage[compt_fromage];
compt_fromage++;
break;
}
}
}
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(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, POSE);
......@@ -91,160 +121,6 @@ void init_commande(stock_t *stocks){
}
}
void init_ingredient_cuisine(world_t * world, stock_t *stocks){
//initialisation des ingrédients mise à disposition en cuisine, selon la commande du client
int compt_tomate = 0;
int compt_salade = 0;
int compt_steak = 0;
int compt_cornichon = 0;
int compt_fromage = 0;
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[compt_tomate];
compt_tomate++;
break;
case NOM_SALADE:
world->en_cuisine[i] = stocks->stock_salade[compt_salade];
compt_salade++;
break;
case NOM_STEAK:
world->en_cuisine[i] = stocks->stock_steak[compt_steak];
compt_steak++;
break;
case NOM_CORNICHON:
world->en_cuisine[i] = stocks->stock_cornichon[compt_cornichon];
compt_cornichon++;
break;
default:
world->en_cuisine[i] = stocks->stock_fromage[compt_fromage];
compt_fromage++;
break;
}
}
}
int get_score(stock_t* stocks){
//retourne le score
return stocks->score;
}
void init_sprite(sprite_t *sprite, char nom, int x, int y, int w, int h, int v, int state){
//La fonction initialise tous les composants d'un sprite
sprite->rect.x = x;
sprite->rect.y = y;
sprite->rect.w = w;
sprite->rect.h = h;
sprite->v = v;
sprite->etat = state;
sprite->is_visible = 1;
sprite->nom = nom;
sprite->cuisson = INCONCERNE;
}
void print_sprite (sprite_t *sprite){
// Fonction permettant d'afficher les données contenues dans un sprite
printf("nom : %c -- x= %d | y=%d | w= %d | h= %d | v= %d | visible : %d \n", sprite->nom, sprite->rect.x, sprite->rect.y, sprite->rect.w, sprite->rect.h, sprite->v, sprite->is_visible);
}
void build_sprite_unique (sprite_t *sprite, char nom, int largeur, int hauteur, char** map){
//Ne gère la présence que d'un sprite du même type sur la map
int x = 0;
int y = 0;
int comptX = 0;
int comptY = 0;
for (int i=0; i<SCREEN_HEIGHT; i++){
for (int j=0; j<SCREEN_WIDTH; j++){
if (map[i][j] == nom){
//On compte le nombre de char correspondant à une ligne dans le tableau
y = i;
x = j;
break;
}
}
}
while (map[y][x]== nom){ // On regarde jusqu'où s'étend la taille du sprite (width)
comptX++;
//printf("\n %d", comptX);
x++;
}
x -= comptX; //retour au point de départ
while (map[y][x] == nom){ // On regarde jusqu'où s'étend la taille du sprite (height)
comptY++;
y--;
}
y += comptY; // retour au point de départ
//Gestion des positions possibles.
if (comptX == largeur && comptY == hauteur){
init_sprite(sprite, nom, x, y+1-hauteur, largeur, hauteur, 0, BAS);
}
if (comptX == hauteur && comptY == largeur){
init_sprite(sprite, nom, x, y+1-largeur, hauteur, largeur, 0, BAS);
}
//print_sprite(sprite);
}
void build_sprites_tab (sprite_t *sprite, char nomSprite, int largeur, int hauteur, int* compt, char** map){
// On recherche les instances existantes et on y met les bonnes valeurs
int nb_sprite = 0;
char copy = nomSprite;
for (int i=0; i<SCREEN_HEIGHT; i++){
for (int j=0; j<SCREEN_WIDTH; j++){
//Parcours du tableau pour repérer le premier caractère
if (map[i][j] == nomSprite){
nb_sprite++;
}
//Créer un sprite
if (nb_sprite == *compt && map[i][j] == nomSprite){
init_sprite(sprite, nomSprite, j, i, largeur, hauteur, 0, BAS);
map[i][j] = tolower(copy); //On efface les marqueurs de sprites, plus nécessaires
break; // On quitte
}
}
}
}
SDL_Rect get_rect (sprite_t *sprite){
return sprite->rect;
}
int get_cuisson (sprite_t *ingre){
return ingre->cuisson;
}
void set_cuisson(sprite_t *ingre, int cuisson){
ingre->cuisson = cuisson;
}
void init_cuisson (sprite_t* sprite){
if (sprite->nom == NOM_TOMATE ||sprite->nom == NOM_SALADE || sprite->nom == NOM_CORNICHON) {
set_cuisson(sprite, SALE);
}
if (sprite->nom == NOM_PAIN || sprite->nom == NOM_FROMAGE || sprite->nom == NOM_STEAK) {
set_cuisson(sprite, CRU);
}
}
void modif_position (sprite_t *sprite, int x_move, int y_move){
//Ajoute les valeurs à la position actuelle d'un sprite
sprite->rect.x += x_move;
sprite->rect.y += y_move;
sprite->interaction.x += x_move;
sprite->interaction.y += y_move;
}
SDL_bool has_collided (sprite_t* spr1, sprite_t* spr2){
return SDL_HasIntersection(&spr1->rect, &spr2->rect);
}
void handle_collision (sprite_t* spr_move, sprite_t* spr_fixed){
//Gestion de rencontre entre deux sprites
SDL_Rect temp = {0,0,0,0};
......@@ -276,10 +152,6 @@ void handle_collision (sprite_t* spr_move, sprite_t* spr_fixed){
}
}
SDL_bool has_interaction (sprite_t* spr_interact, sprite_t* spr2){
//Gestion de l'interaction entre un sprite et un autre
return SDL_HasIntersection(&spr_interact->interaction, &spr2->rect);
}
void handle_deplacement_ingredient (sprite_t* joueur, sprite_t* ingredient){
//Gestion du déplacement d'un ingrédient par rapport au joueur
......@@ -313,79 +185,12 @@ int aleatoire (int a, int b){
return rand()%(b-a)+a;
}
void set_bas (sprite_t *sprite){
// Sprite va vers le bas
sprite->etat = BAS;
sprite->interaction.y = sprite->rect.y + sprite->rect.h;
sprite->interaction.x = sprite->rect.x;
sprite->interaction.h = 5;
sprite->interaction.w = sprite->rect.w;
}
void set_haut (sprite_t *sprite){
// Sprite va vers le haut
sprite->etat = HAUT;
sprite->interaction.y = sprite->rect.y-15;
sprite->interaction.x = sprite->rect.x;
sprite->interaction.h = 5;
sprite->interaction.w = sprite->rect.w;
}
void set_droite (sprite_t *sprite){
// Sprite va vers la droite
sprite->etat = DROITE;
sprite->interaction.y = sprite->rect.y;
sprite->interaction.x = sprite->rect.x + sprite->rect.w;
sprite->interaction.h = sprite->rect.h;
sprite->interaction.w = 5;
}
void set_gauche (sprite_t *sprite){
// Sprite va vers la gauche
sprite->etat = GAUCHE;
sprite->interaction.y = sprite->rect.y;
sprite->interaction.x = sprite->rect.x - 5;
sprite->interaction.h = sprite->rect.h;
sprite->interaction.w = 5;
}
int return_state (sprite_t *sprite){
//Retourne l'état du sprite
return sprite->etat;
}
void set_visible (sprite_t *sprite){
// Permet de rendre visible un sprite
sprite->is_visible=1;
}
void set_invisible (sprite_t *sprite){
// Permet de rendre invisible un sprite
sprite->is_visible=0;
}
int est_visible (sprite_t *sprite){
// Retourne l'état de visibilité d'un sprite
return sprite->is_visible;
}
int estFini(world_t *world){
//Défini si le jeu est terminé
return world->gameover;
}
void set_portable (sprite_t* ingredient){
//Signale que l'ingredient est portée
ingredient->etat = PORTE;
}
void set_posee (sprite_t* ingredient){
//Signale que l'ingrédient est posée
ingredient->etat = POSE;
}
void limites_externes (sprite_t *sprite){
//Défini les limites selon les murs
if (sprite->rect.x + sprite->rect.w > SCREEN_WIDTH-SIZE_MUR){
......@@ -556,7 +361,7 @@ void gestion_events(SDL_Event *event, world_t *world){
//On pose le burger entièrement et on calcul le score
for (int i=0; i<INGREDIENT_DISPO; i++){
set_posee(&world->en_cuisine[i]);
calcul_score(&world->etat_stocks, &world->en_cuisine[i]);
calcul_score(world, &world->en_cuisine[i]);
//Réinitialisation du sprite
SDL_Rect temp = get_rect(&world->frigo);
......@@ -573,14 +378,7 @@ void gestion_events(SDL_Event *event, world_t *world){
}
}
void calcul_score (stock_t* stock, sprite_t* ingredient){
if (get_cuisson(ingredient) == SALE || get_cuisson(ingredient) == CRU){
stock->score -= 5;
}else if (get_cuisson(ingredient) == PROPRE || get_cuisson(ingredient) == CUIT){
stock->score += 5;
}
}
//INCONCERNE, FRIGO, SALE, PROPRE, CUIT, CRU, JETE}
SDL_bool burger_est_complet (sprite_t* ingredients){
int compt=0;
SDL_Rect temp1;
......@@ -599,59 +397,6 @@ SDL_bool burger_est_complet (sprite_t* ingredients){
return SDL_FALSE;
}
char** init_map (){
const char* nomFichier = "Ressources/map.txt";
int hauteur = SCREEN_HEIGHT;
int largeur = SCREEN_WIDTH;
char** tab = allouer_tab_2D(hauteur, largeur);
for (int i=0; i<hauteur; i++){
for (int j=0; j<largeur; j++){
tab[i][j] = ' '; //Rempli les zones accessibles avec un espaces
//Limites extérieures du terrain remplis avec 'X'
if (j< SIZE_MUR || j>= largeur-SIZE_MUR || i< SIZE_MUR || i>= hauteur-SIZE_MUR){
tab[i][j] = 'X';
}
// Zone de déplacement interdit au joueurs; zones de travail:
if((j>= SIZE_MUR && j<BLOC_COMPT_SIZE+SIZE_MUR && i>=SIZE_MUR && i<SIZE_MUR+ (3*BLOC_COMPT_SIZE)) || (j>=SIZE_MUR+BLOC_COMPT_SIZE && j<SIZE_MUR + (4*BLOC_COMPT_SIZE) && i>=SIZE_MUR && i<SIZE_MUR + BLOC_COMPT_SIZE) || (j>= SIZE_MUR + (4*BLOC_COMPT_SIZE) && j< SIZE_MUR + (5*BLOC_COMPT_SIZE) && i>= SIZE_MUR && i<SIZE_MUR + BLOC_COMPT_SIZE*3)){
tab[i][j] = NOM_COMPT;
}
// Marqueurs pour délimité tous les éléments de travail:
if((i==SIZE_MUR && j==SIZE_MUR) || (i==SIZE_MUR && j==SIZE_MUR+BLOC_COMPT_SIZE) || (i==SIZE_MUR && j==SIZE_MUR+BLOC_COMPT_SIZE*2) || (i==SIZE_MUR && j==SIZE_MUR+BLOC_COMPT_SIZE*3) || (j== SIZE_MUR && i==SIZE_MUR+BLOC_COMPT_SIZE) || (j== SIZE_MUR &&i==SIZE_MUR+BLOC_COMPT_SIZE*2) || (j== SIZE_MUR + BLOC_COMPT_SIZE*4 && i==SIZE_MUR) || (j== SIZE_MUR + BLOC_COMPT_SIZE*4 && i == SIZE_MUR + BLOC_COMPT_SIZE) || (j== SIZE_MUR + BLOC_COMPT_SIZE*4 && i == SIZE_MUR + BLOC_COMPT_SIZE*2)){
tab[i][j] = MARQUEUR_COMPT;
}
//Emplacement du frigo
if (j>=SIZE_MUR && j<SIZE_MUR+FRIGO_LARGEUR && i>=hauteur-(SIZE_MUR + FRIGO_HAUTEUR) && i<hauteur - SIZE_MUR){
tab[i][j] = NOM_FRIGO;
}
//Emplacement des fourneaux
if (j>=largeur-(SIZE_MUR+FOUR_HAUTEUR) && j<largeur-SIZE_MUR && i>=SIZE_MUR && i<SIZE_MUR+FOUR_LARGEUR){
tab[i][j] = NOM_FOUR;
}
//Emplacement du lavabo
if (j>=SIZE_MUR+(4*BLOC_COMPT_SIZE) && j<SIZE_MUR+(4*BLOC_COMPT_SIZE)+LAVABO_LARGEUR && i>=hauteur-(SIZE_MUR+BLOC_COMPT_SIZE) && i<hauteur-(SIZE_MUR+BLOC_COMPT_SIZE)+LAVABO_HAUTEUR){
tab[i][j] = NOM_LAVABO;
}
//Zone d'envoi
if (j>=largeur-ZONE_ENVOI_LARGEUR && j<largeur && i>=SIZE_MUR+(3*BLOC_COMPT_SIZE) && i<SIZE_MUR+(3*BLOC_COMPT_SIZE)+ZONE_ENVOI_HAUTEUR){
tab[i][j] = NOM_ENVOI;
}
//Poubelle
if (j>=largeur-(SIZE_MUR+BLOC_COMPT_SIZE) && j<largeur-(SIZE_MUR+BLOC_COMPT_SIZE)+POUBELLE_LARGEUR && i>=hauteur-(SIZE_MUR + POUBELLE_HAUTEUR) && i<hauteur-SIZE_MUR){
tab[i][j] = NOM_POUBELLE;
}
}
}
genere_fichier(nomFichier, tab, hauteur, largeur);
return tab;
}
void update_data (world_t *world){
const char *nomSave = "Ressources/save.txt";
......@@ -662,3 +407,16 @@ void update_data (world_t *world){
genere_fichier(nomSave, world->map, SCREEN_HEIGHT, SCREEN_WIDTH);
}
int get_score(world_t* world){
//retourne le score
return world->score;
}
void calcul_score (world_t* world, sprite_t* ingredient){
if (get_cuisson(ingredient) == SALE || get_cuisson(ingredient) == CRU){
world->score -= 5;
}else if (get_cuisson(ingredient) == PROPRE || get_cuisson(ingredient) == CUIT){
world->score += 5;
}
}
//INCONCERNE, FRIGO, SALE, PROPRE, CUIT, CRU, JETE}
\ No newline at end of file
/**
* \file logique.h
* \brief Entête du module logique.c
* \author Erwan FINEL et Guillaume Vautrin
* \author Guillaume Vautrin
* \version 1.0
* \date 2 Avril 2020
* \date 26 Decembre 2020
*/
#ifndef LOGIQUE_H
#define LOGIQUE_H
#include <SDL2/SDL.h>
#include <SDL2/SDL_ttf.h>
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include "constantes.h"
#include "math.h"
#include "gestion_fichiers.h"
#include <string.h>
#include "stocks.h"
/**
* \brief Representation d'un sprite
*/
struct sprite_s{
char nom; /*!< char du sprite utilisé sur map*/
int v; /*!< vitesse du sprite*/
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*/
SDL_Rect interaction; /*!< Zone d'interaction du sprite */
int cuisson; /*!< Etat de la cuisson*/
};
/**
* \brief Type qui correspond au sprite
*/
typedef struct sprite_s sprite_t;
/**
* \brief Representation des stocks, du menu commandé par le client, et du score.
*/
struct stock_s{
sprite_t stock_tomate[QTE_STOCK]; /*!< stock de tomates*/
sprite_t stock_pain[2]; /*!< stock de pains*/
sprite_t stock_steak[QTE_STOCK]; /*!< stock de steaks*/
sprite_t stock_salade[QTE_STOCK]; /*!< stock de salade*/
sprite_t stock_fromage[QTE_STOCK]; /*!< stock de fromage*/
sprite_t stock_cornichon[QTE_STOCK]; /*!< stock de cornichon*/
int score; /*!< Score actuel*/
char commande[5]; /*!< tableau correspondant à un plat à faire*/
};
/**
* \brief Type qui correspond au menu et aux stocks
*/
typedef struct stock_s stock_t;
struct world_s{
int gameover; /*!< Champ indiquant si l'on est à la fin du jeu */