Projet

Général

Profil

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.