Projet

Général

Profil

Wiki » Historique » Version 32

Jacques LAFFONT, 06/03/2012 21: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 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 31 Jacques LAFFONT
* 'V' : Vitesse du moteur (0-50)
78
* 'D' : Angle de braquage des roues avant en 1/10° de degré (10 -> 1∞)
79
* 'T' : Azimut 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' : Numéro 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
* 'M' : Mode de course :
91 24 Jacques LAFFONT
**    8 bits de poids fort: 1 Attente, 2 course, 3 essais libres)
92
**    8 bits de poids faible : numero de piste
93 31 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 31 Jacques LAFFONT
* 'K' : Téléportation 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 32 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.