Skip to content
GitLab
Explore
Sign in
Primary navigation
Search or go to…
Project
P
Projet l2
Manage
Activity
Members
Labels
Plan
Issues
Issue boards
Milestones
Wiki
Code
Merge requests
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Snippets
Build
Pipelines
Jobs
Pipeline schedules
Artifacts
Deploy
Releases
Package registry
Model registry
Operate
Environments
Terraform modules
Monitor
Incidents
Analyze
Value stream analytics
Contributor analytics
CI/CD analytics
Repository analytics
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
Community forum
Contribute to GitLab
Provide feedback
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
VAUTRIN Guillaume
Projet l2
Commits
fddecdad
Commit
fddecdad
authored
4 years ago
by
vautrin33u
Browse files
Options
Downloads
Patches
Plain Diff
Améliorations (pas finis) sur les interactions entre sprites
parent
f4393060
Branches
Branches containing commit
No related tags found
No related merge requests found
Changes
5
Hide whitespace changes
Inline
Side-by-side
Showing
5 changed files
Makefile
+2
-2
2 additions, 2 deletions
Makefile
Ressources/save.txt
+300
-300
300 additions, 300 deletions
Ressources/save.txt
graphisme.c
+1
-1
1 addition, 1 deletion
graphisme.c
logique.c
+172
-54
172 additions, 54 deletions
logique.c
logique.h
+81
-0
81 additions, 0 deletions
logique.h
with
556 additions
and
357 deletions
Makefile
+
2
−
2
View file @
fddecdad
...
...
@@ -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 sprite.c graphisme.c main.c
SRC2
=
logique.c gestion_fichiers.c sprite.c graphisme.c tests.c
SRC
=
logique.c gestion_fichiers.c sprite.c
stocks.c
graphisme.c main.c
SRC2
=
logique.c gestion_fichiers.c sprite.c
stocks.c
graphisme.c tests.c
OBJ
=
$(
SRC:.c
=
.o
)
OBJ2
=
$(
SRC2:.c
=
.o
)
...
...
This diff is collapsed.
Click to expand it.
Ressources/save.txt
+
300
−
300
View file @
fddecdad
Source diff could not be displayed: it is too large. Options to address this:
view the blob
.
This diff is collapsed.
Click to expand it.
graphisme.c
+
1
−
1
View file @
fddecdad
...
...
@@ -178,7 +178,7 @@ void apply_texte (SDL_Renderer* renderer, world_t* world, textures_t* textures){
message
=
charger_texte
(
"Score : "
,
renderer
,
textures
->
police
,
color
);
char
score_j
[
10
];
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
));
//
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
);
...
...
This diff is collapsed.
Click to expand it.
logique.c
+
172
−
54
View file @
fddecdad
...
...
@@ -287,97 +287,215 @@ void gestion_events(SDL_Event *event, world_t *world){
case
SDLK_SPACE
:
//Récupération des ingrédients du frigo
for
(
int
i
=
0
;
i
<
INGREDIENT_DISPO
;
i
++
){
sprite_t
*
ingredient
=
&
world
->
en_cuisine
[
i
];
sprite_t
*
joueur
=
&
world
->
joueur
;
//Interaction avec le frigo (récupérer les éléments un par un)
if
(
has_interaction
(
joueur
,
&
world
->
frigo
)
&&
has_collided
(
&
world
->
frigo
,
ingredient
)
&&
return_state
(
ingredient
)
==
POSE
){
set_portable
(
ingredient
);
set_visible
(
ingredient
);
init_cuisson
(
ingredient
);
handle_deplacement_ingredient
(
joueur
,
ingredient
);
break
;
}
//Interaction avec le four
if
(
has_interaction
(
joueur
,
&
world
->
four
)
&&
has_collided
(
joueur
,
ingredient
)
&&
return_state
(
ingredient
)
==
POSE
&&
get_cuisson
(
ingredient
)
==
CUIT
){
/*
if (has_interaction(joueur, &world->four) && has_collided(joueur, ingredient) && return_state(ingredient) == POSE && get_cuisson(ingredient) == CUIT && is_already_carrying(world->en_cuisine)==SDL_FALSE){
//On retire un ingrédient du feu
set_portable(ingredient);
handle_deplacement_ingredient(joueur, ingredient);
break;
}
if
(
has_interaction
(
joueur
,
&
world
->
four
)
&&
has_collided
(
joueur
,
ingredient
)
&&
return_state
(
ingredient
)
==
PORTE
&&
get_cuisson
(
ingredient
)
==
CRU
){
//On pose un ingrédient pour le cuire
set_posee
(
ingredient
);
set_cuisson
(
ingredient
,
CUIT
);
break
;
}
*/
//Interaction avec le lavabo
if
(
has_interaction
(
joueur
,
&
world
->
lavabo
)
&&
has_collided
(
joueur
,
ingredient
)
&&
return_state
(
ingredient
)
==
POSE
&&
get_cuisson
(
ingredient
)
==
PROPRE
){
/*
if (has_interaction(joueur, &world->lavabo) && has_collided(joueur, ingredient) && return_state(ingredient) == POSE && get_cuisson(ingredient) == PROPRE && is_already_carrying(world->en_cuisine)==SDL_FALSE){
//On retire un ingrédient du lavabo
set_portable(ingredient);
handle_deplacement_ingredient(joueur, ingredient);
break;
}
if
(
has_interaction
(
joueur
,
&
world
->
lavabo
)
&&
has_collided
(
joueur
,
ingredient
)
&&
return_state
(
ingredient
)
==
PORTE
&&
get_cuisson
(
ingredient
)
==
SALE
){
//On pose un ingrédient pour le laver
set_posee
(
ingredient
);
set_cuisson
(
ingredient
,
PROPRE
);
break
;
*/
if
(
has_interaction
(
joueur
,
&
world
->
frigo
)){
interaction_frigo
(
world
->
en_cuisine
,
joueur
,
&
world
->
frigo
);
}
//Interaction avec la poubelle
if
(
has_interaction
(
joueur
,
&
world
->
poubelle
)
&&
has_collided
(
joueur
,
ingredient
)
&&
return_state
(
ingredient
)
==
PORTE
){
//On pose un ingrédient pour le jeter et le replacer dans le frigo
SDL_Rect
temp
=
get_rect
(
&
world
->
frigo
);
char
copy
=
ingredient
->
nom
;
init_ingre
(
ingredient
,
copy
,
temp
.
x
,
temp
.
y
,
PLAT_SIZE
,
PLAT_SIZE
,
0
,
POSE
);
break
;
if
(
has_interaction
(
joueur
,
&
world
->
four
)){
interaction_poser_four
(
world
->
en_cuisine
,
joueur
,
&
world
->
four
);
}
if
(
has_interaction
(
joueur
,
&
world
->
poubelle
)){
interaction_poubelle
(
world
->
en_cuisine
,
joueur
,
get_rect
(
&
world
->
frigo
));
}
if
(
has_interaction
(
joueur
,
&
world
->
lavabo
)){
interaction_poser_lavabo
(
world
->
en_cuisine
,
joueur
,
&
world
->
lavabo
);
}
if
(
has_interaction
(
joueur
,
&
world
->
envoi
)){
interaction_zone_envoi
(
world
,
world
->
en_cuisine
,
joueur
,
&
world
->
envoi
);
}
//Interaction avec les comptoirs
for
(
int
i
=
0
;
i
<
NB_COMPT_1
;
i
++
){
if
(
has_interaction
(
joueur
,
&
world
->
comptoire
[
i
])
&&
has_collided
(
joueur
,
ingredient
)
&&
return_state
(
ingredient
)
==
POSE
){
//On retire un ingrédient
if
(
has_interaction
(
joueur
,
&
world
->
comptoire
[
i
])
&&
has_collided
(
joueur
,
ingredient
)
&&
return_state
(
ingredient
)
==
POSE
&&
is_already_carrying
(
world
->
en_cuisine
)
==
SDL_FALSE
){
//On retire un ingrédient
set_portable
(
ingredient
);
handle_deplacement_ingredient
(
joueur
,
ingredient
);
break
;
}
if
(
has_interaction
(
joueur
,
&
world
->
comptoire
[
i
])
&&
has_collided
(
joueur
,
ingredient
)
&&
return_state
(
ingredient
)
==
PORTE
){
//On pose un ingrédient
set_posee
(
ingredient
);
poser_ingredient
(
joueur
,
&
world
->
comptoire
[
i
],
ingredient
);
break
;
}
}
//Interaction avec la zone d'envoi et génération du score
if
(
has_interaction
(
joueur
,
&
world
->
envoi
)
&&
has_collided
(
joueur
,
ingredient
)
&&
return_state
(
ingredient
)
==
PORTE
){
//On pose un ingrédient sur la zone d'envoi, calcul du score ET on réinitialise
if
(
burger_est_complet
(
world
->
en_cuisine
)){
//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
,
&
world
->
en_cuisine
[
i
]);
//Réinitialisation du sprite
SDL_Rect
temp
=
get_rect
(
&
world
->
frigo
);
char
copy
=
world
->
en_cuisine
[
i
].
nom
;
init_ingre
(
&
world
->
en_cuisine
[
i
],
copy
,
temp
.
x
,
temp
.
y
,
PLAT_SIZE
,
PLAT_SIZE
,
0
,
POSE
);
}
}
break
;
}
}
break
;
}
}
}
void
interaction_frigo
(
sprite_t
*
ingredients
,
sprite_t
*
joueur
,
sprite_t
*
frigo
){
for
(
int
i
=
0
;
i
<
INGREDIENT_DISPO
;
i
++
){
//Interaction avec le frigo (récupérer les éléments un par un)
if
(
has_collided
(
frigo
,
&
ingredients
[
i
])
&&
return_state
(
&
ingredients
[
i
])
==
POSE
&&
is_already_carrying
(
ingredients
)
==
SDL_FALSE
){
set_portable
(
&
ingredients
[
i
]);
set_visible
(
&
ingredients
[
i
]);
init_cuisson
(
&
ingredients
[
i
]);
handle_deplacement_ingredient
(
joueur
,
&
ingredients
[
i
]);
break
;
}
}
}
void
interaction_zone_envoi
(
world_t
*
world
,
sprite_t
*
ingredients
,
sprite_t
*
joueur
,
sprite_t
*
envoi
){
for
(
int
i
=
0
;
i
<
INGREDIENT_DISPO
;
i
++
){
if
(
has_interaction
(
joueur
,
envoi
)
&&
has_collided
(
joueur
,
&
ingredients
[
i
])
&&
return_state
(
&
ingredients
[
i
])
==
PORTE
){
//On pose un ingrédient sur la zone d'envoi, calcul du score ET on réinitialise
if
(
burger_est_complet
(
ingredients
)){
//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
,
&
ingredients
[
i
]);
//Réinitialisation du sprite
SDL_Rect
temp
=
get_rect
(
&
world
->
frigo
);
char
copy
=
ingredients
[
i
].
nom
;
init_ingre
(
&
ingredients
[
i
],
copy
,
temp
.
x
,
temp
.
y
,
PLAT_SIZE
,
PLAT_SIZE
,
0
,
POSE
);
}
}
break
;
}
}
}
void
interaction_poser_four
(
sprite_t
*
ingredients
,
sprite_t
*
joueur
,
sprite_t
*
four
){
for
(
int
i
=
0
;
i
<
INGREDIENT_DISPO
;
i
++
){
if
(
has_collided
(
joueur
,
&
ingredients
[
i
])
&&
return_state
(
&
ingredients
[
i
])
==
PORTE
&&
get_cuisson
(
&
ingredients
[
i
])
==
CRU
){
//On pose un ingrédient pour le cuire
poser_ingredient
(
joueur
,
four
,
&
ingredients
[
i
]);
set_cuisson
(
&
ingredients
[
i
],
CUIT
);
break
;
}
}
}
void
interaction_reprendre_four
(
sprite_t
*
ingredients
,
sprite_t
*
joueur
,
sprite_t
*
four
){
for
(
int
i
=
0
;
i
<
INGREDIENT_DISPO
;
i
++
){
if
(
has_interaction
(
joueur
,
four
)
&&
has_collided
(
joueur
,
&
ingredients
[
i
])
&&
return_state
(
&
ingredients
[
i
])
==
POSE
&&
get_cuisson
(
&
ingredients
[
i
])
==
CUIT
&&
is_already_carrying
(
ingredients
)
==
SDL_FALSE
){
set_portable
(
&
ingredients
[
i
]);
handle_deplacement_ingredient
(
joueur
,
&
ingredients
[
i
]);
break
;
}
}
}
void
interaction_poser_lavabo
(
sprite_t
*
ingredients
,
sprite_t
*
joueur
,
sprite_t
*
lavabo
){
//Interaction avec le lavabo
for
(
int
i
=
0
;
i
<
INGREDIENT_DISPO
;
i
++
){
if
(
has_collided
(
joueur
,
&
ingredients
[
i
])
&&
return_state
(
&
ingredients
[
i
])
==
PORTE
&&
get_cuisson
(
&
ingredients
[
i
])
==
SALE
){
//On pose un ingrédient pour le laver
poser_ingredient
(
joueur
,
lavabo
,
&
ingredients
[
i
]);
set_cuisson
(
&
ingredients
[
i
],
PROPRE
);
break
;
}
}
}
void
interaction_reprendre_lavabo
(
sprite_t
*
ingredients
,
sprite_t
*
joueur
,
sprite_t
*
lavabo
){
for
(
int
i
=
0
;
i
<
INGREDIENT_DISPO
;
i
++
){
if
(
has_interaction
(
joueur
,
&
ingredients
[
i
])
&&
return_state
(
&
ingredients
[
i
])
==
POSE
&&
get_cuisson
(
&
ingredients
[
i
])
==
PROPRE
&&
is_already_carrying
(
ingredients
)
==
SDL_FALSE
){
//On retire un ingrédient du lavabo
set_portable
(
&
ingredients
[
i
]);
handle_deplacement_ingredient
(
joueur
,
&
ingredients
[
i
]);
break
;
}
}
}
void
interaction_poubelle
(
sprite_t
*
ingredients
,
sprite_t
*
joueur
,
SDL_Rect
zone_reset
){
for
(
int
i
=
0
;
i
<
INGREDIENT_DISPO
;
i
++
){
if
(
has_collided
(
joueur
,
&
ingredients
[
i
])
&&
return_state
(
&
ingredients
[
i
])
==
PORTE
&&
is_already_carrying
(
ingredients
)
==
SDL_TRUE
){
//On pose un ingrédient pour le jeter et le replacer dans le frigo
char
copy
=
ingredients
[
i
].
nom
;
init_ingre
(
&
ingredients
[
i
],
copy
,
zone_reset
.
x
,
zone_reset
.
y
,
PLAT_SIZE
,
PLAT_SIZE
,
0
,
POSE
);
break
;
}
}
}
void
poser_ingredient
(
sprite_t
*
joueur
,
sprite_t
*
meuble
,
sprite_t
*
ingredient
){
//Pose l'ingrédient sur un meuble
switch
(
return_state
(
joueur
))
{
case
HAUT
:
ingredient
->
rect
.
y
=
meuble
->
rect
.
y
+
meuble
->
rect
.
h
-
ingredient
->
rect
.
h
;
//Gestion des positions horizontales de l'ingrédient pour qu'il reste sur le meuble
if
(
ingredient
->
rect
.
x
<
meuble
->
rect
.
x
)
{
ingredient
->
rect
.
x
=
meuble
->
rect
.
x
;
}
else
if
(
ingredient
->
rect
.
x
+
ingredient
->
rect
.
w
>
meuble
->
rect
.
x
+
meuble
->
rect
.
w
){
ingredient
->
rect
.
x
=
meuble
->
rect
.
x
+
meuble
->
rect
.
w
-
ingredient
->
rect
.
w
;
}
break
;
case
BAS
:
ingredient
->
rect
.
y
=
meuble
->
rect
.
y
;
//Gestion des positions horizontales de l'ingrédient pour qu'il reste sur le meuble
if
(
ingredient
->
rect
.
x
<
meuble
->
rect
.
x
)
{
ingredient
->
rect
.
x
=
meuble
->
rect
.
x
;
}
else
if
(
ingredient
->
rect
.
x
+
ingredient
->
rect
.
w
>
meuble
->
rect
.
x
+
meuble
->
rect
.
w
){
ingredient
->
rect
.
x
=
meuble
->
rect
.
x
+
meuble
->
rect
.
w
-
ingredient
->
rect
.
w
;
}
break
;
case
GAUCHE
:
ingredient
->
rect
.
x
=
meuble
->
rect
.
x
+
meuble
->
rect
.
w
-
ingredient
->
rect
.
w
;
//Gestion des positions verticales de l'ingrédient pour qu'il reste sur le meuble
if
(
ingredient
->
rect
.
y
<
meuble
->
rect
.
y
)
{
ingredient
->
rect
.
y
=
meuble
->
rect
.
y
;
}
else
if
(
ingredient
->
rect
.
y
+
ingredient
->
rect
.
h
>
meuble
->
rect
.
y
+
meuble
->
rect
.
h
){
ingredient
->
rect
.
y
=
meuble
->
rect
.
y
+
meuble
->
rect
.
h
-
ingredient
->
rect
.
h
;
}
break
;
case
DROITE
:
ingredient
->
rect
.
x
=
meuble
->
rect
.
x
;
//Gestion des positions verticales de l'ingrédient pour qu'il reste sur le meuble
if
(
ingredient
->
rect
.
y
<
meuble
->
rect
.
y
)
{
ingredient
->
rect
.
y
=
meuble
->
rect
.
y
;
}
else
if
(
ingredient
->
rect
.
y
+
ingredient
->
rect
.
h
>
meuble
->
rect
.
y
+
meuble
->
rect
.
h
){
ingredient
->
rect
.
y
=
meuble
->
rect
.
y
+
meuble
->
rect
.
h
-
ingredient
->
rect
.
h
;
}
break
;
default:
break
;
}
set_posee
(
ingredient
);
}
SDL_bool
is_already_carrying
(
sprite_t
*
ingredients
){
for
(
int
i
=
0
;
i
<
INGREDIENT_DISPO
;
i
++
){
if
(
return_state
(
&
ingredients
[
i
])
==
PORTE
){
return
SDL_TRUE
;
}
}
return
SDL_FALSE
;
}
SDL_bool
burger_est_complet
(
sprite_t
*
ingredients
){
int
compt
=
0
;
...
...
This diff is collapsed.
Click to expand it.
logique.h
+
81
−
0
View file @
fddecdad
...
...
@@ -74,6 +74,87 @@ void init_stocks(stock_t* stocks, sprite_t* zone_stockage);
*/
int
aleatoire
(
int
a
,
int
b
);
/**
* @brief Interaction avec la poubelle
*
* @param ingredients Tous les ingrédients disponibles sur le jeu
* @param joueur
* @param zone_reset SDL_Rect correspondant à la zone de départ des ingrédients
*/
void
interaction_poubelle
(
sprite_t
*
ingredients
,
sprite_t
*
joueur
,
SDL_Rect
zone_reset
);
/**
* @brief Poser un objet sur le lavabo
*
* @param ingredients Tous les ingrédients disponibles sur le jeu
* @param joueur
* @param lavabo
*/
void
interaction_poser_lavabo
(
sprite_t
*
ingredients
,
sprite_t
*
joueur
,
sprite_t
*
lavabo
);
/**
* @brief Reprendre un ingrédient du lavabo
*
* @param ingredients Tous les ingrédients dispo sur le jeu
* @param joueur
* @param lavabo
*/
void
interaction_reprendre_lavabo
(
sprite_t
*
ingredients
,
sprite_t
*
joueur
,
sprite_t
*
lavabo
);
/**
* @brief Reprendre les ingrédients du four
*
* @param ingredients
* @param joueur
* @param four
*/
void
interaction_reprendre_four
(
sprite_t
*
ingredients
,
sprite_t
*
joueur
,
sprite_t
*
four
);
/**
* @brief Poser dans le four un ingrédient
*
* @param ingredients
* @param joueur
* @param four
*/
void
interaction_poser_four
(
sprite_t
*
ingredients
,
sprite_t
*
joueur
,
sprite_t
*
four
);
/**
* @brief Envoie le plat, génère le score et reset les ingrédients
*
* @param world
* @param ingredients
* @param joueur
* @param envoi Zone d'envoi
*/
void
interaction_zone_envoi
(
world_t
*
world
,
sprite_t
*
ingredients
,
sprite_t
*
joueur
,
sprite_t
*
envoi
);
/**
* @brief Génère les ingrédients
*
* @param ingredients
* @param joueur
* @param frigo
*/
void
interaction_frigo
(
sprite_t
*
ingredients
,
sprite_t
*
joueur
,
sprite_t
*
frigo
);
/**
* @brief Pose un ingrédient sur un meuble
*
* @param joueur
* @param meuble
* @param ingredient
*/
void
poser_ingredient
(
sprite_t
*
joueur
,
sprite_t
*
meuble
,
sprite_t
*
ingredient
);
/**
* @brief Vérifie si un ingrédient et déjà porté ou non
*
* @param ingredients
* @return SDL_bool
*/
SDL_bool
is_already_carrying
(
sprite_t
*
ingredients
);
/**
* @brief Vérifie que le burger est complet (selon sa position)
*
...
...
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment