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
894a13d9
Commit
894a13d9
authored
4 years ago
by
vautrin33u
Browse files
Options
Downloads
Patches
Plain Diff
Aucun déplacement effectué
parent
53f64f78
No related branches found
No related tags found
No related merge requests found
Changes
6
Hide whitespace changes
Inline
Side-by-side
Showing
6 changed files
Ressources/map.txt
+600
-60
600 additions, 60 deletions
Ressources/map.txt
constantes.h
+2
-2
2 additions, 2 deletions
constantes.h
logique.c
+104
-86
104 additions, 86 deletions
logique.c
logique.h
+50
-3
50 additions, 3 deletions
logique.h
main.c
+1
-0
1 addition, 0 deletions
main.c
tests.c
+15
-0
15 additions, 0 deletions
tests.c
with
772 additions
and
151 deletions
Ressources/map.txt
+
600
−
60
View file @
894a13d9
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.
constantes.h
+
2
−
2
View file @
894a13d9
...
@@ -12,12 +12,12 @@
...
@@ -12,12 +12,12 @@
/**
/**
* \brief Largeur de l'écran
* \brief Largeur de l'écran
*/
*/
#define SCREEN_WIDTH 80
#define SCREEN_WIDTH 80
0
/**
/**
* \brief Hauteur de l'écran
* \brief Hauteur de l'écran
*/
*/
#define SCREEN_HEIGHT 60
#define SCREEN_HEIGHT 60
0
/**
/**
* \brief Titre
* \brief Titre
...
...
This diff is collapsed.
Click to expand it.
logique.c
+
104
−
86
View file @
894a13d9
...
@@ -17,10 +17,11 @@ void init_data(world_t * world){ //faux
...
@@ -17,10 +17,11 @@ void init_data(world_t * world){ //faux
world
->
attente
=
0
;
world
->
attente
=
0
;
//Initialise le sprite du joueur en haut à gauche de l'écran, en état 0
//Initialise le sprite du joueur en haut à gauche de l'écran, en état 0
init_sprite
(
&
world
->
joueur
,
'J'
,
SCREEN_WIDTH
*
0
.
1
,
SCREEN_HEIGHT
*
0
.
1
,
SIZE_JOUEUR
,
SIZE_JOUEUR
,
SIZE_JOUEUR
/
2
,
0
);
init_sprite
(
&
world
->
joueur
,
'J'
,
200
,
200
,
SIZE_JOUEUR
,
SIZE_JOUEUR
,
SIZE_JOUEUR
/
2
,
0
);
//Charge la carte
//Charge la carte
world
->
map
=
init_map
();
world
->
map
=
init_map
();
/*
/*
...
@@ -116,8 +117,8 @@ void limites_externes (sprite_t *sprite, world_t *world){
...
@@ -116,8 +117,8 @@ void limites_externes (sprite_t *sprite, world_t *world){
void
reset_sprite_on_map
(
sprite_t
*
sprite
,
world_t
*
world
){
void
reset_sprite_on_map
(
sprite_t
*
sprite
,
world_t
*
world
){
//On efface la position du joueur sur map
//On efface la position du joueur sur map
for
(
int
i
=
0
;
i
<
SCREEN_HEIGHT
;
i
++
){
for
(
int
i
=
sprite
->
y
;
i
<
sprite
->
y
+
sprite
->
h
;
i
++
){
for
(
int
j
=
0
;
j
<
SCREEN_WIDTH
;
j
++
){
for
(
int
j
=
sprite
->
x
;
j
<
sprite
->
x
+
sprite
->
w
;
j
++
){
if
(
world
->
map
[
i
][
j
]
==
sprite
->
nom
){
if
(
world
->
map
[
i
][
j
]
==
sprite
->
nom
){
world
->
map
[
i
][
j
]
=
' '
;
world
->
map
[
i
][
j
]
=
' '
;
}
}
...
@@ -134,98 +135,114 @@ void place_sprite_on_map (sprite_t *sprite, world_t *world){
...
@@ -134,98 +135,114 @@ void place_sprite_on_map (sprite_t *sprite, world_t *world){
}
}
}
}
void
deplace_sprite
(
sprite_t
*
sprite
,
world_t
*
world
){
void
deplace_bas
(
sprite_t
*
sprite
,
world_t
*
world
){
//permet de déplacer le sprite et de corriger les données de map de manière cohérente
int
compteur
=
0
;
set_bas
(
&
world
->
joueur
);
world
->
joueur
.
y
+=
world
->
joueur
.
v
;
reset_sprite_on_map
(
sprite
,
world
);
reset_sprite_on_map
(
sprite
,
world
);
int
compteur
;
if
(
world
->
map
[
sprite
->
y
+
SIZE_JOUEUR
][
sprite
->
x
]
!=
' '
||
world
->
map
[
sprite
->
y
+
SIZE_JOUEUR
][
sprite
->
x
+
SIZE_JOUEUR
]
!=
' '
){
switch
(
return_state
(
sprite
)){
//Compter le nombre d'espace avant d'arriver au bloc, et placer le joueur contre le bloc interdit
case
0
:
for
(
int
y
=
sprite
->
y
;
y
<
SIZE_JOUEUR
;
y
++
){
//déplace vers le bas
if
(
world
->
map
[
y
][
sprite
->
x
]
==
' '
){
if
(
world
->
map
[
sprite
->
y
+
SIZE_JOUEUR
][
sprite
->
x
]
!=
' '
||
world
->
map
[
sprite
->
y
+
SIZE_JOUEUR
][
sprite
->
x
+
SIZE_JOUEUR
]
!=
' '
){
compteur
++
;
//Compter le nombre d'espace avant d'arriver au bloc, et placer le joueur contre le bloc interdit
for
(
int
y
=
sprite
->
y
;
y
<
SIZE_JOUEUR
;
y
++
){
if
(
world
->
map
[
y
][
sprite
->
x
]
==
' '
){
compteur
++
;
}
}
sprite
->
x
-=
compteur
;
}
break
;
case
1
:
//déplace vers le haut
if
(
world
->
map
[
sprite
->
y
][
sprite
->
x
]
!=
' '
||
world
->
map
[
sprite
->
y
][
sprite
->
x
+
SIZE_JOUEUR
]
!=
' '
){
//Compter le nombre d'espace avant d'arriver au bloc, et placer le joueur contre le bloc interdit
for
(
int
y
=
sprite
->
y
;
y
<
SIZE_JOUEUR
;
y
++
){
if
(
world
->
map
[
y
][
sprite
->
x
]
!=
' '
){
compteur
++
;
}
}
sprite
->
x
+=
compteur
;
}
}
break
;
}
case
2
:
sprite
->
x
-=
compteur
;
//déplace vers la droite
}
if
(
world
->
map
[
sprite
->
y
][
sprite
->
x
+
SIZE_JOUEUR
]
!=
' '
||
world
->
map
[
sprite
->
y
+
SIZE_JOUEUR
][
sprite
->
x
+
SIZE_JOUEUR
]
!=
' '
){
}
//Compter le nombre d'espace avant d'arriver au bloc, et placer le joueur contre le bloc interdit
for
(
int
x
=
sprite
->
x
;
x
<
SIZE_JOUEUR
;
x
++
){
void
deplace_haut
(
sprite_t
*
sprite
,
world_t
*
world
){
if
(
world
->
map
[
sprite
->
y
][
x
]
==
' '
){
int
compteur
=
0
;
compteur
++
;
set_haut
(
&
world
->
joueur
);
}
world
->
joueur
.
y
-=
world
->
joueur
.
v
;
reset_sprite_on_map
(
sprite
,
world
);
//déplace vers le haut
if
(
world
->
map
[
sprite
->
y
][
sprite
->
x
]
!=
' '
||
world
->
map
[
sprite
->
y
][
sprite
->
x
+
SIZE_JOUEUR
]
!=
' '
){
//Compter le nombre d'espace avant d'arriver au bloc, et placer le joueur contre le bloc interdit
for
(
int
y
=
sprite
->
y
;
y
<
SIZE_JOUEUR
;
y
++
){
if
(
world
->
map
[
y
][
sprite
->
x
]
!=
' '
){
compteur
++
;
}
}
sprite
->
x
-=
compteur
;
}
sprite
->
x
+=
compteur
;
}
}
void
deplace_droite
(
sprite_t
*
sprite
,
world_t
*
world
){
int
compteur
=
0
;
set_droite
(
&
world
->
joueur
);
world
->
joueur
.
x
+=
world
->
joueur
.
v
;
reset_sprite_on_map
(
sprite
,
world
);
//déplace vers la droite
if
(
world
->
map
[
sprite
->
y
][
sprite
->
x
+
SIZE_JOUEUR
]
!=
' '
||
world
->
map
[
sprite
->
y
+
SIZE_JOUEUR
][
sprite
->
x
+
SIZE_JOUEUR
]
!=
' '
){
//Compter le nombre d'espace avant d'arriver au bloc, et placer le joueur contre le bloc interdit
for
(
int
x
=
sprite
->
x
;
x
<
SIZE_JOUEUR
;
x
++
){
if
(
world
->
map
[
sprite
->
y
][
x
]
==
' '
){
compteur
++
;
}
}
break
;
}
case
3
:
sprite
->
x
-=
compteur
;
//déplace vers la gauche
}
if
(
world
->
map
[
sprite
->
y
][
sprite
->
x
]
!=
' '
||
world
->
map
[
sprite
->
y
+
SIZE_JOUEUR
][
sprite
->
x
]
!=
' '
){
//Compter le nombre d'espace avant d'arriver au bloc, et placer le joueur contre le bloc interdit
}
for
(
int
x
=
sprite
->
x
;
x
<
SIZE_JOUEUR
;
x
++
){
if
(
world
->
map
[
sprite
->
y
][
x
]
!=
' '
){
void
deplace_gauche
(
sprite_t
*
sprite
,
world_t
*
world
){
compteur
++
;
int
compteur
=
0
;
}
set_gauche
(
&
world
->
joueur
);
world
->
joueur
.
x
-=
world
->
joueur
.
v
;
reset_sprite_on_map
(
sprite
,
world
);
//déplace vers la gauche
if
(
world
->
map
[
sprite
->
y
][
sprite
->
x
]
!=
' '
||
world
->
map
[
sprite
->
y
+
SIZE_JOUEUR
][
sprite
->
x
]
!=
' '
){
//Compter le nombre d'espace avant d'arriver au bloc, et placer le joueur contre le bloc interdit
for
(
int
x
=
sprite
->
x
;
x
<
SIZE_JOUEUR
;
x
++
){
if
(
world
->
map
[
sprite
->
y
][
x
]
!=
' '
){
compteur
++
;
}
}
sprite
->
x
+=
compteur
;
}
}
break
;
sprite
->
x
+=
compteur
;
}
}
limites_externes
(
sprite
,
world
);
place_sprite_on_map
(
sprite
,
world
);
}
}
void
gestion_events
(
SDL_Event
*
event
,
world_t
*
world
){
void
gestion_events
(
SDL_Event
*
event
,
world_t
*
world
){
Uint8
*
keystates
;
while
(
SDL_PollEvent
(
event
)){
SDL_PollEvent
(
event
);
switch
(
event
->
type
){
switch
(
event
->
type
){
case
SDL_QUIT
:
case
SDL_QUIT
:
world
->
gameover
=
1
;
break
;
world
->
gameover
=
1
;
break
;
case
SDL_KEYDOWN
:
case
SDL_KEYDOWN
:
switch
(
event
->
key
.
keysym
.
sym
){
switch
(
event
->
key
.
keysym
.
sym
){
case
SDLK_ESCAPE
:
case
SDLK_ESCAPE
:
world
->
gameover
=
1
;
break
;
world
->
gameover
=
1
;
break
;
//Déplacement du joueur
//Déplacement du joueur
case
SDLK_z
:
case
SDLK_UP
:
set_haut
(
&
world
->
joueur
);
deplace_haut
(
&
world
->
joueur
,
world
);
world
->
joueur
.
y
-=
world
->
joueur
.
v
;
printf
(
"BOUUUUUUUUH
\n
"
);
break
;
break
;
case
SDLK_s
:
set_bas
(
&
world
->
joueur
);
world
->
joueur
.
y
+=
world
->
joueur
.
v
;
break
;
case
SDLK_d
:
set_droite
(
&
world
->
joueur
);
world
->
joueur
.
x
+=
world
->
joueur
.
v
;
break
;
case
SDLK_q
:
set_gauche
(
&
world
->
joueur
);
world
->
joueur
.
x
-=
world
->
joueur
.
v
;
break
;
//case SDLK_SPACE:
}
case
SDLK_DOWN
:
deplace_bas
(
&
world
->
joueur
,
world
);
break
;
case
SDLK_RIGHT
:
deplace_droite
(
&
world
->
joueur
,
world
);
break
;
case
SDLK_LEFT
:
deplace_gauche
(
&
world
->
joueur
,
world
);
break
;
//case SDLK_SPACE:
}
}
}
}
}
}
char
**
init_map
(){
char
**
init_map
(){
...
@@ -276,12 +293,13 @@ char** init_map (){
...
@@ -276,12 +293,13 @@ char** init_map (){
return
tab
;
return
tab
;
}
}
void
update_data
(
world_t
*
world
){
void
update_data
(
world_t
*
world
){
const
char
*
nomSave
=
"Ressouces/save.txt"
;
const
char
*
nomSave
=
"Ressources/save.txt"
;
limites_externes
(
&
world
->
joueur
,
world
);
place_sprite_on_map
(
&
world
->
joueur
,
world
);
genere_fichier
(
nomSave
,
world
->
map
,
SCREEN_HEIGHT
,
SCREEN_WIDTH
);
genere_fichier
(
nomSave
,
world
->
map
,
SCREEN_HEIGHT
,
SCREEN_WIDTH
);
}
}
This diff is collapsed.
Click to expand it.
logique.h
+
50
−
3
View file @
894a13d9
...
@@ -61,7 +61,7 @@ typedef struct world_s world_t;
...
@@ -61,7 +61,7 @@ typedef struct world_s world_t;
* \param y gestion de la localisation sur l'axe des ordonnés
* \param y gestion de la localisation sur l'axe des ordonnés
* \param w largeur du sprite
* \param w largeur du sprite
* \param h hauteur du sprite
* \param h hauteur du sprite
* \param v vitesse
verticale
du sprite
* \param v vitesse du sprite
* \param state état du sprite
* \param state état du sprite
*/
*/
void
init_sprite
(
sprite_t
*
sprite
,
char
nom
,
int
x
,
int
y
,
int
w
,
int
h
,
int
v
,
int
state
);
void
init_sprite
(
sprite_t
*
sprite
,
char
nom
,
int
x
,
int
y
,
int
w
,
int
h
,
int
v
,
int
state
);
...
@@ -158,12 +158,59 @@ int return_state (sprite_t *sprite);
...
@@ -158,12 +158,59 @@ int return_state (sprite_t *sprite);
void
limites_externes
(
sprite_t
*
sprite
,
world_t
*
world
);
void
limites_externes
(
sprite_t
*
sprite
,
world_t
*
world
);
/**
/**
* @brief Déplacement d'un sprite
et actualisation de la map
* @brief Déplacement d'un sprite
vers la gauche + limites
*
*
* @param sprite sprite qui se déplace
* @param sprite sprite qui se déplace
* @param world données du monde
* @param world données du monde
*/
*/
void
deplace_
sprit
e
(
sprite_t
*
sprite
,
world_t
*
world
);
void
deplace_
gauch
e
(
sprite_t
*
sprite
,
world_t
*
world
);
/**
* @brief Déplacement d'un sprite vers la droite + limites
*
* @param sprite sprite qui se déplace
* @param world données du monde
*/
void
deplace_droite
(
sprite_t
*
sprite
,
world_t
*
world
);
/**
* @brief Déplacement d'un sprite vers le haut + limites
*
* @param sprite sprite qui se déplace
* @param world données du monde
*/
void
deplace_haut
(
sprite_t
*
sprite
,
world_t
*
world
);
/**
* @brief Déplacement d'un sprite vers le bas + limites
*
* @param sprite sprite qui se déplace
* @param world données du monde
*/
void
deplace_bas
(
sprite_t
*
sprite
,
world_t
*
world
);
/**
* @brief Retire le sprite de la map - avant maj d'un déplacement
*
* @param sprite sprite
* @param world données du monde
*/
void
reset_sprite_on_map
(
sprite_t
*
sprite
,
world_t
*
world
);
/**
* @brief Place le sprite sur la map - avant maj d'un déplacement
*
* @param sprite
* @param world
*/
void
place_sprite_on_map
(
sprite_t
*
sprite
,
world_t
*
world
);
/**
* @brief Mets à jour les données du monde en fonction des évolutions et des limites du jeu
*
* @param world Données du monde
*/
void
update_data
(
world_t
*
world
);
#endif
#endif
\ No newline at end of file
This diff is collapsed.
Click to expand it.
main.c
+
1
−
0
View file @
894a13d9
...
@@ -50,6 +50,7 @@ while (estFini(&world)==0){
...
@@ -50,6 +50,7 @@ while (estFini(&world)==0){
//Gestion des évenements (entrées joueurs)
//Gestion des évenements (entrées joueurs)
gestion_events
(
&
evenements
,
&
world
);
gestion_events
(
&
evenements
,
&
world
);
update_data
(
&
world
);
//update_graphics(ecran, &world, &textures);
//update_graphics(ecran, &world, &textures);
...
...
This diff is collapsed.
Click to expand it.
tests.c
+
15
−
0
View file @
894a13d9
...
@@ -80,9 +80,24 @@ void test_lecture_map(){
...
@@ -80,9 +80,24 @@ void test_lecture_map(){
}
}
void
test_limite
(){
void
test_limite
(){
SDL_Init
(
SDL_INIT_VIDEO
);
world_t
world
;
world_t
world
;
SDL_Event
event
;
init_data
(
&
world
);
init_data
(
&
world
);
int
i
=
0
;
while
(
i
<
100
){
reset_sprite_on_map
(
&
world
.
joueur
,
&
world
);
gestion_events
(
&
event
,
&
world
);
update_data
(
&
world
);
i
++
;
printf
(
" x = %d | y = %d | etat = %d
\n
"
,
world
.
joueur
.
x
,
world
.
joueur
.
y
,
world
.
joueur
.
etat
);
place_sprite_on_map
(
&
world
.
joueur
,
&
world
);
SDL_Delay
(
100
);
//afficher_tab_2D(world.map, SCREEN_HEIGHT, SCREEN_WIDTH);
}
afficher_tab_2D
(
world
.
map
,
SCREEN_HEIGHT
,
SCREEN_WIDTH
);
afficher_tab_2D
(
world
.
map
,
SCREEN_HEIGHT
,
SCREEN_WIDTH
);
SDL_Quit
();
}
}
...
...
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