Wiki » Historique » Version 30
Jacques LAFFONT, 06/03/2012 21:38
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 | 10 | Jacques LAFFONT | La voiture roule sur un circuit virtuel, simulé sur PC (et affiché 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 | 11 | Jacques LAFFONT | Ce programme exécute en boucle infinie un 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 | 11 | Jacques LAFFONT | La direction est ajustée en modifiant l'angle des roues avant (_périphérique 'D'_). La vitesse 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 | 12 | Jacques LAFFONT | * cliquez sur le petit engrenage !build.jpg! ("Build"), à droite de la 4eme rangée de la fenêtre CodeBlocks. Vérifiez (ds 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 | |||
48 | @vit = remote_read('V');@ |
||
49 | |||
50 | Pour forcer une valeur d'angle de roues : |
||
51 | |||
52 | @remote_write('D', angle);@ |
||
53 | |||
54 | La fonction @remote_nom()@ permet de donner un nom à la voiture. |
||
55 | |||
56 | 23 | Jacques LAFFONT | La fonction @Sleep(n)@ permet de faire une pause de n millisecondes. |
57 | 8 | Anonyme | |
58 | 9 | Anonyme | Pour appeler une fonction "f" à chaque fois qu'un événement (généré par le circuit) se produit, il suffit d'écrire |
59 | 8 | Anonyme | |
60 | @event_callback = f@; |
||
61 | |||
62 | 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. |
63 | 8 | Anonyme | |
64 | 9 | Anonyme | La fonction @printf()@ permet d'afficher un message dans la console. |
65 | 8 | Anonyme | |
66 | 9 | Anonyme | La fonction @touche_Q()@ renvoie 1 si la touche "q" ou "Q" a été pressée. |
67 | 8 | Anonyme | |
68 | 9 | Anonyme | Les appels aux fonctions @remote_init()@ et @remote_close()@ n'ont normalement pas à être changés dans le programme de base. |
69 | 8 | Anonyme | |
70 | h1. 5. Gestion des scores |
||
71 | |||
72 | 9 | Anonyme | 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-ciavec la fonction @remote_nom()@). |
73 | 8 | Anonyme | |
74 | |||
75 | h1. * Annexe 1 - code et signification des périphériques |
||
76 | |||
77 | 11 | Jacques LAFFONT | * 'V' Vitesse du moteur (0-50) |
78 | 23 | Jacques LAFFONT | * 'D' Angle de braquage des roues avant en 1/10° de degré (10 -> 1∞) |
79 | * 'T' Azimuth de la tourelle du télémètre en 1/10° |
||
80 | * 'R' Lecture de l'Azimuth de la tourelle en 1/10° |
||
81 | * 'U' Distance mesure par le télémètre en 1/100 de mètre (en cm) |
||
82 | * 'X' Position absolue X en cm |
||
83 | * 'Y' Position absolue Y en cm |
||
84 | * 'Z' Position absolue Z en cm |
||
85 | * 'N' Numero de la voiture (en fonction de l'ordre de connection) |
||
86 | * 'E' Lecture des evènements (cf Annexe 2) |
||
87 | * 'H' Donne le temps de course actuel |
||
88 | * 'S' Temps du tour précédent |
||
89 | * 'I' Defini le nom du vehicule lettre par lettre |
||
90 | 24 | Jacques LAFFONT | * 'M' Mode de course : |
91 | ** 8 bits de poids fort: 1 Attente, 2 course, 3 essais libres) |
||
92 | ** 8 bits de poids faible : numero de piste |
||
93 | 23 | Jacques LAFFONT | * 'C' Informations sur le dernier capteur touché : |
94 | 24 | Jacques LAFFONT | ** 8 bits de poids faible : numéro du capteur |
95 | ** 8 bits de poids fort : couleur ('R','J' ou 'V') |
||
96 | 23 | Jacques LAFFONT | * 'K' Teleportation de la voiture sur le troncon de piste N |
97 | 24 | Jacques LAFFONT | ** (correspondant au capteur vert numero N). |
98 | ** Attention à n'utiliser que pour des tests, les scores sont invalidés ! |
||
99 | 8 | Anonyme | |
100 | h1. * Annexe 2 - code et signification des événements |
||
101 | |||
102 | Chaque événement est codé sur un bit d'un registre en contenant 16. |
||
103 | |||
104 | 24 | Jacques LAFFONT | *Bit 0 : Point de passage Vert, Remsie à zero lecture 'C' |
105 | 25 | Jacques LAFFONT | * 1 : Point de passage Jaune, Remsie à zero lecture 'C' |
106 | * 2 : Point de passage Rouge, Remsie à zero lecture 'C' |
||
107 | * 3-6 : non utilisés |
||
108 | * 7 : Point de passage course (vert), Remsie à zero lecture 'C' |
||
109 | * 8 : La piste à changé , Remsie à zero lecture 'M' |
||
110 | * 9 : Le mode de course à changé ,Remsie à zero lecture 'M' |
||
111 | * 10 : Début de la course , Remise a zéro au changement du mode de course. |
||
112 | * 11 : Le dernier point de passage est atteint la course est finie , Remise à zéro au changement du mode de course. |
||
113 | * 12 : La voiture est sortie de la piste. |
||
114 | * 13 : Utilisation de la fonction de téléportation. Classement Invalidé. Remis à zero au changement de piste ou du mode de course. |
||
115 | * 14 : Faux départ -> destruction de la voiture , Remise a zéro au changement du mode de course. |
||
116 | * 15 : Collision avec le sol, Remise a zéro au changement de piste. |