Académique Documents
Professionnel Documents
Culture Documents
TP Projet Architecture
Des Circuits Microprogrammé
L'objectif de notre travail pratique est de concevoir et mettre en œuvre un jeu en langage
C pour notre microcontrôleur, en tirant le meilleur parti de ses ressources limitées par rapport
à un ordinateur. Compte tenu de ces limitations, nous avons opté pour un jeu en deux
dimensions (2D) avec un déplacement par cases.
Notre choix s'est porté sur le jeu "Boulder Dash". Dans notre implémentation, le joueur
doit collecter tous les diamants sans traverser un obstacle ou une pierre.
Ce code définit une matrice bidimensionnelle, « char map[16][21] » représente la carte du jeu.
Chaque élément de la matrice correspond à une case de la carte et est représenté par un
caractère. La taille de la carte est de 16 lignes sur 21 colonnes.
Pour l’affichage du personnage nous avons utilisé des tableaux nommés Perso_D et Perso_G
qui assure le déplacement de la gauche vers la droite. Ces tableaux sont codés en utilisant des
valeurs de couleur RGB pour chaque pixel de l’image.
Chaque pixel est représenté par trois valeurs consécutives dans le tableau, correspondant aux
composantes Rouge, Verte et Bleue (RGB) de la couleur du pixel. Ces valeurs varient de 0 à
255, où 0 signifie aucune intensité de couleur et 255 signifie une intensité maximale.
La taille 768 indique qu'il y a 768 éléments dans chaque tableau. Étant donné que chaque
pixel de l'image est représenté par trois valeurs (Rouge, Verte, Bleue - RGB), cela signifie que
chaque tableau représente une image de 256 pixels (768 / 3 = 256).
Dans ce cas, 768 est choisi pour représenter une image de taille spécifique du personnage
dans le jeu.
II.3. Configuration des entrées/sorties
Ce bout de code permet de gérer le déplacement d’un personnage sur la grille représenté par
la matrice « map ». Les déplacements sont basés sur des entrées provenant des broches RA7,
RA5, RA6 et RA4. Le personnage est affiché sur un écran TFT à l’aide de la fonction
« tft_texture ».
• Sinon, si la broche RA4 est en état bas (bouton ou capteur associé à un déplacement
vers le haut) :
- Si la case en haut de la position actuelle (c, l) est une pierre (1) ou un obstacle (3), la
texture du personnage (Perso_D) est affichée à la position actuelle (c, l).
- Sinon, la position du personnage est déplacée d'une unité vers le haut (1--). La texture du
personnage est mise à jour à la nouvelle position, et la texture à la position précédente est
remplacée par une texture vide (vide).
- Enfin, IFS0bits.T3IF = 0; est utilisé pour effacer le drapeau d'interruption du Timer3.
En résumé, ce code met à jour la position d'un personnage sur un écran en fonction des
entrées provenant de boutons ou de capteurs, en vérifiant les obstacles dans la matrice
« map » et en affichant les textures appropriées.
Dans le cadre de ce projet, nous avons mis en pratique les connaissances acquises lors des TP
précédents, notamment en ce qui concerne les interruptions, la gestion des priorités,
l'affichage sur l'écran, et l'utilisation des ports en tant qu'entrées/sorties sur le DSPIC33. En
combinant ces compétences, nous avons réussi à mettre en œuvre un jeu simple.
Il existe des possibilités d'amélioration pour ce projet. Par exemple, l'ajout de fonctionnalités
telles que la gestion du score, l'affichage du message "Game Over", la mise en place de
changements de niveau, l'introduction d'images transitoires pour le déplacement ou la chute
des pierres afin d'apporter un effet plus fluide à l'écran. Une autre amélioration pourrait être
l'ajout de plusieurs niveaux de jeu. Un menu permettant aux joueurs de choisir directement le
niveau de départ pourrait également être intégré pour une expérience utilisateur plus flexible
et conviviale.