Vous êtes sur la page 1sur 7

M1-EEA/EMB

TP Projet Architecture
Des Circuits Microprogrammé

BOUKA-ONDZE Thérésia Clovinick


MAMADOU Korka Kante
Table des matières
I. Introduction ..................................................................................................................................... 2
II. Programme du jeu ........................................................................................................................... 2
II.1. Mapping de l’environnement du jeu ........................................................................................ 2
II.2. Affichage du personnage .......................................................................................................... 3
II.3. Configuration des entrées/sorties .............................................................................................. 4
III. Présentation du jeux .................................................................................................................... 5
IV. Conclusion ................................................................................................................................... 6
I. Introduction

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.

II. Programme du jeu

II.1. Mapping de l’environnement du jeu

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.

− La valeur 0 : correspond aux sables


− La valeur 1 : correspond aux pierres
− La valeur 2 : correspond aux diamants
− La valeur 3 : correspond aux obstacles
Pour afficher sur l’écran TFT les obstacles, le sable, les pierres et les diamants nous utilisons
une boucle for.

II.2. Affichage du personnage

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 ».

• Si la broche RA7 est en état bas (bouton vers la droite) :


- Si la case à droite 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 la droite (c++). 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).
• Sinon, si la broche RA5 est en état bas (bouton associé à un déplacement vers le bas) :
- Si la case en bas 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 bas (l++). 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).
• Sinon, si la broche RA6 est en état bas (bouton associé à un déplacement vers la
gauche) :
- Si la case à gauche 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 la gauche (c--). 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).

• 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.

III. Présentation du jeux


IV. Conclusion

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.

Vous aimerez peut-être aussi