Skip to content
GitLab
Explore
Sign in
Primary navigation
Search or go to…
Project
E
enonce
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
Model registry
Operate
Environments
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
This is an archived project. Repository and other project resources are read-only.
Show more breadcrumbs
tanguy.cavagna
enonce
Commits
99b609af
Commit
99b609af
authored
4 years ago
by
orestis.malaspin
Browse files
Options
Downloads
Patches
Plain Diff
updated text and makefile
parent
a75a60ac
Branches
master
No related tags found
No related merge requests found
Changes
2
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
Makefile
+1
-1
1 addition, 1 deletion
Makefile
serpent.md
+11
-9
11 additions, 9 deletions
serpent.md
with
12 additions
and
10 deletions
Makefile
+
1
−
1
View file @
99b609af
...
...
@@ -28,7 +28,7 @@ deploy: all
cp
serpent.html prog_seq_c_tp/serpent/index.html
cp
serpent.pdf prog_seq_c_tp/serpent/serpent.pdf
tar
czvf gfx.tar.gz gfx
mv
czvf
gfx.tar.gz prog_seq_c_tp/serpent/
mv
gfx.tar.gz prog_seq_c_tp/serpent/
clean
:
rm
-rf
*
.html
*
.pdf prog_seq_c_tp
This diff is collapsed.
Click to expand it.
serpent.md
+
11
−
9
View file @
99b609af
...
...
@@ -59,9 +59,8 @@ Bien entendu vous devez utiliser `git` et `make` pour la gestion et la compilati
# Cahier des charges
Chaque segment du serpent est en fait un pixel: il est représenté par sa position (coordonnées
`x`
,
`y`
entières).
Le serpent doit être représenté par une structure de file d'attente contenant
la position des pixels qu'il occupe. Lorsque le serpent se déplace, il faut
Chaque segment du serpent est en fait un pixel: il est représenté par sa position (ses coordonnées
`x`
,
`y`
qui sont des entiers).
Le serpent est en fait une file d'attente contenant la position des pixels qu'il occupe. Lorsque le serpent se déplace, il faut
retirer l'élément du devant de la file, et insérer le nouvel élément à l'arrière de la file:
la tête du serpent est l'arrière de la file, et la queue du serpent est l'avant de la file.
...
...
@@ -70,13 +69,14 @@ Il faut donc stocker cette information. La nourriture ne se déplace elle jamais
et est uniquement déterminée par sa position sur l'écran.
Afin de déterminer si le serpent meurt ou mange de la nourriture, il est recommandé
d'utiliser le tableau de pixels utilisé pour l'affichage
à l'aide de la librairie SDL
.
d'utiliser le tableau de pixels utilisé pour l'affichage.
Vous pouvez définir un type énuméré avec quatre variantes (
`empty`
,
`snake`
,
`food`
, et
`wall`
par exemple)
correspondant à des couleurs
`COLOR_BLACK`
,
`COLOR_WHITE`
, ...
correspondant à des couleurs
`COLOR_BLACK`
,
`COLOR_WHITE`
, ... Ainsi en récupérant la valeur
des pixels vous pouvez savoir quel type d'élément se trouve à une position donnée.
Pour que le jeu soit "jouable" il faut éviter de mettre à jour son état trop souvent.
Pour que le jeu soit "jouable"
,
il faut éviter de mettre à jour son état trop souvent
(le serpent bougerait trop vite)
.
Il est judicieux de n'afficher qu'un certain nombre de frames par seconde (ou en d'autres terme
fixer le temps qu'il faut
pour afficher
chaque frame, $t_f$).
fixer le temps qu'il faut
entre l'affichage de
chaque frame, $t_f$).
Pour ce faire, il faut mesurer le temps nécessaire à l'affichage d'une frame (une méthode
pour mesurer le temps passé dans une section du code vous a été proposée il y a quelques semaines),
puis faire attendre votre programme le temps nécessaire pour qu'on attende $t_f$
...
...
@@ -92,16 +92,18 @@ donc bien réfléchir avant de commencer à implémenter quelque chose.
2.
Faites un schéma, une liste, etc avec les différentes fonctions et structures de données que vous allez utiliser.
3.
Écrivez les
*headers*
contenant les structures de données et les signatures des fonctions.
4.
Écrivez un
`Makefile`
qui compile votre ébauche de projet (même s'il y a rien dans les fichier à part un main vide).
5.
Allez vous pouvez vous y mettre!
# Remarques
Vous trouverez sur
`Cyberlearn`
des fichiers
`gfx.h`
et
`gfx.c`
qui ne sont pas exactement ceux des travaux pratiques précédents.
Vous trouverez sur
`Cyberlearn`
des fichiers
`gfx.h`
et
`gfx.c`
qui ne sont pas exactement ceux des travaux pratiques précédents
(il faut donc les re-télécharger).
Un certain nombre des fonctions suivantes pourraient vous être utiles (elles ne sont pas toutes dans
`gfx.h/c`
):
*
`gfx_getpixel()`
, retourne la "couleur" du pixel à une position
`x`
,
`y`
donnée en argument.
*
`gfx_putpixel()`
, donne une "couleur" donnée en argument au pixel se trouvant à une position
`x`
,
`y`
donnée.
*
`gfx_keypressed()`
retourne le code de la touche
clavier
pressé par la joueuse[^4].
*
`gfx_keypressed()`
retourne le code de la touche pressé
e
par la joueuse[^4].
*
`usleep()`
(se trouvant dans
`unistd.h`
) met le programme en pause pendant un certain nombre de microsecondes passé en argument.
...
...
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