Wiki » Historique » Version 43
Jacques LAFFONT, 11/06/2015 15:58
1 | 8 | Anonyme | h1. 1. But du jeu |
---|---|---|---|
2 | 1 | Jacques LAFFONT | |
3 | 21 | Jacques LAFFONT | Faire faire un tour de circuit à la voiture en un minimum de temps. !>out.png! |
4 | 20 | Jacques LAFFONT | |
5 | 41 | Jacques LAFFONT | La voiture roule sur un circuit virtuel, simulée sur PC (et affichée sur le deuxième écran ou dans une fenêtre à part). |
6 | 9 | Anonyme | Elle est contrôlée par un programme écrit en langage C. |
7 | 1 | Jacques LAFFONT | |
8 | 9 | Anonyme | Un programme de contrôle "minimum" vous est fourni. Le travail consiste donc à modifier et/ou enrichir ce programme afin d'améliorer ses performances. |
9 | 1 | Jacques LAFFONT | |
10 | h1. 2. Principe du programme de contrôle de la voiture |
||
11 | 17 | Jacques LAFFONT | |
12 | 42 | Jacques LAFFONT | Ce programme exécute en boucle infinie avec une régulation élémentaire consistant à mesurer la position de la voiture et à ajuster sa direction et pourquoi pas sa vitesse en conséquence. |
13 | 1 | Jacques LAFFONT | |
14 | 11 | Jacques LAFFONT | La position est obtenue en mesurant (_périphérique 'U'_), via un télémètre laser (matérialisé par un trait rouge dans le simulateur), la distance de la voiture à un des murs bordant la route (par défaut le mur droit, mais cela peut-être changé (_périphérique 'T'_). |
15 | 1 | Jacques LAFFONT | |
16 | 36 | Jacques LAFFONT | La direction est ajustée en modifiant l'angle des roues avant (_périphérique 'D'_). La vitesse peut être ajustée en modifiant celle de la voiture (_périphérique 'V'_). |
17 | 8 | Anonyme | |
18 | 9 | Anonyme | Un certain nombre de repères sont positionnés sur le circuit. Le passage de la voiture sur ces repères génère des évènements que le programme peut intercepter afin d'ajuster le comportement de la voiture en conséquence (par exemple : ralentir à l'approche d'un virage, accélérer afin de passer un tremplin, etc..). |
19 | 8 | Anonyme | |
20 | 11 | Jacques LAFFONT | Trois circuits, de difficulté croissante sont proposés. Pour passer d'un circuit à l'autre appuyer sur la touche P. |
21 | 8 | Anonyme | |
22 | h1. 3. Mode d'emploi |
||
23 | 22 | Jacques LAFFONT | |
24 | Le simulateur est déjà lancé (sur le deuxième écran - si ce n'est pas le cas, appeler un enseignant). !>cb.png! |
||
25 | 8 | Anonyme | |
26 | 11 | Jacques LAFFONT | Le programme de contrôle est écrit, compilé et lancé sous l'environnement CodeBlocks, sur l'écran principal. |
27 | 8 | Anonyme | |
28 | 1 | Jacques LAFFONT | Dans un premier temps compilez et lancez le programme fourni par défaut : |
29 | 36 | Jacques LAFFONT | * cliquez sur le petit engrenage !build.jpg! ("Build"), à droite de la 4eme rangée de la fenêtre CodeBlocks. Vérifiez (dans la fenêtre du bas) qu'il n'y a pas d'erreur de compilation |
30 | 13 | Jacques LAFFONT | * cliquez sur le petit triangle vert à coté !run.jpg! ("Run"). Ceci doit ouvrir une console dans laquelle s'affichent les informations lues et écrites par le programme de contrôle. En parallèle, la voiture doit apparaître sur le circuit et commencer à rouler. |
31 | 8 | Anonyme | |
32 | 11 | Jacques LAFFONT | La voiture s'arrête automatiquement après un tour. Pour l'arrêter avant, tapez "q" dans la console du programme de contrôle. |
33 | 8 | Anonyme | |
34 | 1 | Jacques LAFFONT | Pour démarrer un nouveau tour : |
35 | 8 | Anonyme | * tapez "q" dans la console pour la fermer |
36 | 13 | Jacques LAFFONT | * modifiez éventuellement le programme de contrôle, re-compilez le !build.jpg!. |
37 | * relancez le programme de contrôle !run.jpg! (bouton "Run"). |
||
38 | 8 | Anonyme | |
39 | h1. 4. Fonctions utilisables dans le programme de contrôle |
||
40 | 1 | Jacques LAFFONT | |
41 | 11 | Jacques LAFFONT | La voiture est contrôlée (respectivement observée) en écrivant (respectivement lisant) des données sur un certain nombre de "périphériques". |
42 | 9 | Anonyme | Chaque périphérique est identifié par une lettre. |
43 | 11 | Jacques LAFFONT | La liste des périphériques, avec les données associées, est donnée en annexe 1. |
44 | 9 | Anonyme | La lecture d'un périphérique est assurée par la fonction @remote_read()@, l''écriture par la fonction @remote_write()@. |
45 | 8 | Anonyme | |
46 | Par exemple, pour la lire la vitesse de la voiture, on écrira : |
||
47 | 37 | Jacques LAFFONT | <pre><code class="c"> |
48 | vit = remote_read('V'); |
||
49 | 38 | Jacques LAFFONT | </code></pre> |
50 | 1 | Jacques LAFFONT | |
51 | Pour forcer une valeur d'angle de roues : |
||
52 | 38 | Jacques LAFFONT | |
53 | 1 | Jacques LAFFONT | <pre><code class="c"> |
54 | 37 | Jacques LAFFONT | remote_write('D', angle); |
55 | 38 | Jacques LAFFONT | </code></pre> |
56 | 8 | Anonyme | |
57 | La fonction @remote_nom()@ permet de donner un nom à la voiture. |
||
58 | 1 | Jacques LAFFONT | |
59 | La fonction @Sleep(n)@ permet de faire une pause de n millisecondes. |
||
60 | |||
61 | 43 | Jacques LAFFONT | Pour appeler une fonction "f" à chaque fois qu'un événement (généré par les capteurs de la voiture) se produit, il suffit d'écrire |
62 | 1 | Jacques LAFFONT | |
63 | 37 | Jacques LAFFONT | <pre><code class="c"> |
64 | 39 | Jacques LAFFONT | void f(int ev){ |
65 | ... |
||
66 | } |
||
67 | |||
68 | int main(...){ |
||
69 | ... |
||
70 | 37 | Jacques LAFFONT | event_callback = f; |
71 | 39 | Jacques LAFFONT | ... |
72 | } |
||
73 | 38 | Jacques LAFFONT | </code></pre> |
74 | 8 | Anonyme | |
75 | 9 | Anonyme | La fonction recevra alors un entier indiquant le numéro de l'événement reçu. La liste des codes d'événement, avec leur signification est donnée en annexe 2. |
76 | 8 | Anonyme | |
77 | 9 | Anonyme | La fonction @printf()@ permet d'afficher un message dans la console. |
78 | 8 | Anonyme | |
79 | 9 | Anonyme | La fonction @touche_Q()@ renvoie 1 si la touche "q" ou "Q" a été pressée. |
80 | 8 | Anonyme | |
81 | 9 | Anonyme | Les appels aux fonctions @remote_init()@ et @remote_close()@ n'ont normalement pas à être changés dans le programme de base. |
82 | 8 | Anonyme | |
83 | h1. 5. Gestion des scores |
||
84 | |||
85 | 36 | Jacques LAFFONT | Les meilleures performances (temps au tour, pour chaque circuit) sont automatiquement transmises à un serveur, avec le nom associé à la voiture (n'oubliez donc pas de renseignez celui-ci avec la fonction @remote_nom()@). |
86 | 8 | Anonyme | |
87 | |||
88 | 40 | Jacques LAFFONT | h1. * Annexe 1 - code et signification des périphériques * |
89 | 8 | Anonyme | |
90 | 34 | Jacques LAFFONT | !>voiture2.jpg! |
91 | 33 | Jacques LAFFONT | |
92 | 35 | Jacques LAFFONT | * 'V' : Vitesse du moteur (0-100) |
93 | 31 | Jacques LAFFONT | * 'D' : Angle de braquage des roues avant en 1/10° de degré (10 -> 1∞) |
94 | * 'T' : Azimut de la tourelle du télémètre en 1/10° |
||
95 | * 'R' : Lecture de l'Azimuth de la tourelle en 1/10° |
||
96 | * 'U' : Distance mesure par le télémètre en 1/100 de mètre (en cm) |
||
97 | * 'X' : Position absolue X en cm |
||
98 | * 'Y' : Position absolue Y en cm |
||
99 | * 'Z' : Position absolue Z en cm |
||
100 | * 'N' : Numéro de la voiture (en fonction de l'ordre de connection) |
||
101 | * 'E' : Lecture des evènements (cf Annexe 2) |
||
102 | * 'H' : Donne le temps de course actuel |
||
103 | * 'S' : Temps du tour précédent |
||
104 | * 'I' : Defini le nom du vehicule lettre par lettre |
||
105 | * 'M' : Mode de course : |
||
106 | 24 | Jacques LAFFONT | ** 8 bits de poids fort: 1 Attente, 2 course, 3 essais libres) |
107 | ** 8 bits de poids faible : numero de piste |
||
108 | 31 | Jacques LAFFONT | * 'C' : Informations sur le dernier capteur touché : |
109 | 24 | Jacques LAFFONT | ** 8 bits de poids faible : numéro du capteur |
110 | ** 8 bits de poids fort : couleur ('R','J' ou 'V') |
||
111 | 31 | Jacques LAFFONT | * 'K' : Téléportation de la voiture sur le troncon de piste N |
112 | 24 | Jacques LAFFONT | ** (correspondant au capteur vert numero N). |
113 | 36 | Jacques LAFFONT | ** Attention : à n'utiliser que pour des tests car les scores sont invalidés ! |
114 | 8 | Anonyme | |
115 | 40 | Jacques LAFFONT | h1. * Annexe 2 - code et signification des évènements * |
116 | 8 | Anonyme | |
117 | Chaque événement est codé sur un bit d'un registre en contenant 16. |
||
118 | |||
119 | 36 | Jacques LAFFONT | * Bit 0 : Point de passage Vert, remis à zéro lors de la lecture du périphérique 'C' |
120 | 40 | Jacques LAFFONT | * 1 : Point de passage Jaune, remis à zéro lors de la lecture du périphérique 'C' |
121 | * 2 : Point de passage Rouge, remis à zéro lors de la lecture du périphérique 'C' |
||
122 | * 3-6 : non utilisés |
||
123 | * 7 : Point de passage course (vert), remis à zéro lors de la lecture du périphérique 'C' |
||
124 | * 8 : La piste à changé , remis à zéro lors de la lecture du périphérique 'M' |
||
125 | * 9 : Le mode de course a changé , remis à zéro lors de la lecture du périphérique 'M' |
||
126 | * 10 : Début de la course , remis à zéro au changement du mode de course. |
||
127 | * 11 : Le dernier point de passage est atteint la course est finie , remis à zéro au changement du mode de course. |
||
128 | * 12 : La voiture est sortie de la piste. |
||
129 | * 13 : Utilisation de la fonction de téléportation. Classement Invalidé. Remis à zero au changement de piste ou du mode de course. |
||
130 | * 14 : Faux départ -> destruction de la voiture , remise à zéro au changement du mode de course. |
||
131 | * 15 : Collision avec le sol, Remise à zéro au changement de piste. |