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