Skip to content
Snippets Groups Projects
Commit 2f8a6706 authored by orestis.malaspin's avatar orestis.malaspin
Browse files

first commit

parents
No related branches found
No related tags found
No related merge requests found
*.html
*.pdf
[submodule "css/tufte-css"]
path = css/tufte-css
url = https://github.com/edwardtufte/tufte-css.git
Makefile 0 → 100644
OPTIONS = --filter=pandoc-crossref
PDFOPTIONS = --highlight-style kate
PDFOPTIONS += --pdf-engine pdflatex
PDFOPTIONS += --number-sections
PDFOPTIONS += --template=./default.latex
HTMLOPTIONS += -t html5
HTMLOPTIONS += -c css/tufte-css/tufte.css
HTMLOPTIONS += --self-contained
MD=$(wildcard *.md)
HTML=$(MD:%.md=%.html)
PDF=$(MD:%.md=%.pdf)
all: $(HTML) $(PDF)
%.pdf: %.md Makefile
pandoc -s $(OPTIONS) $(PDFOPTIONS) -o $@ $<
%.html: %.md Makefile
pandoc -s $(OPTIONS) $(HTMLOPTIONS) -o $@ $<
deploy: all
mkdir -p prog_seq_c_tp/file_dattente
cp file_dattente.html prog_seq_c_tp/file_dattente/index.html
cp file_dattente.pdf prog_seq_c_tp/file_dattente/file_dattente.pdf
clean:
rm -rf *.html *.pdf prog_seq_c_tp
Subproject commit e225f3a0e5f8f42a1d28416c1c85962411711907
---
author:
- Le jeu du serpent
title: Cours de programmation séquentielle
autoSectionLabels: false
autoEqnLabels: true
eqnPrefix:
- "éq."
- "éqs."
chapters: true
numberSections: false
chaptersDepth: 1
sectionsDepth: 3
lang: fr
documentclass: article
papersize: A4
cref: false
urlcolor: blue
toc: false
---
# Buts
- Utilisation d'une file d'attente.
- Implémentation d'un jeu.
- Utilisation de fonctions et de SDL2.
- Allocation dynamique de mémoire.
- Utilisation de `git` et de `make`.
# Énoncé
Implémenter un "jeu du serpent" avec les règles suivantes:
* Le serpent avance toujours tout droit (dans sa direction courante) tant que la joueuse ne modifie pas la direction.
* La joueuse peut modifier la direction de déplacement du serpentà l'aide des touches suivantes[^3]:
* `a`: déplacement vers la gauche.
* `s`: déplacement vers le bas.
* `d`: déplacement vers la droite.
* `w`: déplacement vers le haut.
* Le serpent démarre avec une longueur de 3.
* Le serpent démarre en étant orienté vers la droite au milieu de l'écran de jeu.
* Il y a un nombre maximal, `N`[^1], de nourriture qui apparaît à des endroits aléatoires de la carte toutes les `M sec`[^2].
* Lorsque le serpent "mange" de la nourriture sa longueur augmente de un.
* L'écran de jeu est entouré d'une paroi.
* Le serpent meurt si:
* sa tête rencontre une paroi.
* si sa tête rencontre son corps.
* si le serpent tente de faire un "demi-tour" immédiat (p.ex. il se déplace vers la droite et on essaie de le faire se déplacer vers la gauche).
* La partie se termine par une victoire si le serpent occupe tout l'écran.
* La touche `escape` arrête le jeu.
L'intéraction avec la joueuse (affichage graphique, touches du clavier) se fait avec la librairie
SDL2. Pour l'affichage, il est recommandé d'avoir des épaisseurs de un pixel pour
tout ces objets (cela simplifie grandement l'implémentation).
Bien entendu vous devez utiliser `git` et `make` pour la gestion et la compilation de votre projet.
# 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
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.
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.
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`, ...
Pour que le jeu soit "jouable" il faut éviter de mettre à jour son état trop souvent.
Il est judicieux de n'afficher qu'un certain nombre de frames par seconde.
## Avant de commencer
1. Mettez-vous par groupes de 5.
2. Faites un schéma 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.
# Remarques
Il vous est fourni des fichiers `gfx.h` et `gfx.c` qui ne sont pas exactement ceux des travaux pratiques précédents
Ils se trouvent sur `Cyberlearn`.
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].
* `usleep()` (se trouvant dans `unistd.h`) met le programme en pause pendant un certain nombre de microsecondes passé en argument.
*
[^1]: Un argument de votre programme.
[^2]: Autre argument de votre programme.
[^3]: Vous pouvez aussi utiliser les flèches.
[^4]: Tous les codes clavier se trouvent à l'adresse <https://wiki.libsdl.org/SDL_Keycode>.
\ No newline at end of file
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment