Boite de vitesse

Description

il s'agit d'une simulation qui vous permet d'utiliser une boite de vitesse
j'ai pas vu de codes qui permettez de le faire sur le site
se mettre au commande d'une voiture, pouvoir passer les vitesse en mode manuel
avoir un vrai son de voiture dans un jeu de voiture finalement et qui correspond a la vitesse ou vous vous deplacez
ben c'est ce que cette classe de moins de 500 lignes (enfin je crois permet de faire)
et son utilisation est simple sauf si
vitesse.Gerer(); est quelque chose qui est penible a ecrire pour vous :-)

vous etes donc le conducteur du vehicule et vous avez le tableau de bord devant vous (tres rudimentaire vous verrez)
a gauche les tours par minute
a droite la vitesse
(il n'y a pas d'echelle pour ces deux valeurs)

pour accelerer fleche du haut
pour freiner fleche du bas

//--> en mode automatique
pour passer le rapport suivant fleche de droite
pour passer le rapport inferieur fleche de guauche


je veux signaler quelque chose qui pourra vous paraitre bizarre lorsque vous testerez ce programme
il s'agit de retrograder lorsque vous accelerer
c'est possible de le faire sur une voiture standard enfin en tout cas c'est possible dans Gran Tourismo
donc a ce propos:
vous definissez dans l'appel au constructeur une valeur seuil (en tr/min) que ne doit pas depasser le moteur pour
un rapport donné.
si vous etes en troisieme et que vous etes au dessus de la valeur seuil correspondant au second rapport
vous ne pourez pas retrograder
ce qui est logique dans le cas d'une voiture reele. on risquerait de casser le moteur
ca n'est pas possible dans mon programme car j'utilise une exponentielle qui tends vers cette valeur seuil
elle ne peut donc pas etre au dessus
bonne lecture

Source / Exemple :


/*
aout 2004

  • /
//pour l'exponentielle #include <math.h> #ifndef VITESSE_H #define VITESSE_H enum mode_conduite {AUTOMATIQUE,MANUELLE}; enum V_CHANGE {PLUS, MOINS , NONE}; class Vitesse { public: mode_conduite conduite; //nombre de tour par minute qu'effectue notre moteur float tr_min; //se charge d'accorder l'acceleration , le freinage... void Gerer(); //constructeur: s'occupe d'initialiser les valeur lors de la cretion d'un objet vitesse Vitesse( float _val_1, float _val_2, float _val_3, float _val_4, float _acc_1,float _acc_2,float _acc_3,float _acc_4, float _trans_1 ,float _trans_2 ,float _trans_3 ,float _trans_4 ); //changement_vitesse = PLUS <-> le changement de vitesse est en cours et le moteur doit passer a la vitesse superieure //changement_vitesse = MOINS <-> le changement de vitesse est en cours et le moteur doit passer a la vitesse inferieure //changement_vitesse = NONE <-> le changement de vitesse n'est pas en cours V_CHANGE changement_vitesse; //le vehicule est en train d'accelerer ou ne l'est pas bool is_acc; //le vehicule est en train de freiner ou ne l'est pas bool is_frein; //vitesse du vehicule float vel; //nombre de tour au demarrage du vehicule float val_demarrage; void UpGrader(); void RetroGrader(); //vitesse en cours :) int v_en_cours; private: //augmente le nombre de tour par minute et change de vitesse void Accelerer(); //diminue le nombre de tour par minute et retrograde //l'argument est la valeur de deceleration plus elle est elevée plus la deceleration sera rapide void Freiner(float _dec); /* chaque passage de vitesse necessite un nombre de tour different pour le moteur on passe pas une seconde a 1000 tours minutes sur une formule 1 par exemple dans val[1] vous stockez la valeur (en nombre de tour / min) a laquelle doit seffetuer le changement de vitesse de la 1ere a la 2eme dans val[0] y a rien
  • /
float val[5]; /* chaque vehicule a (ce que l'on appele dans le jargon) de la patate. cette patate varie d'un vehicule a un autre et elle varei aussi sur chaque vitesse ainsi en 5 eme la capacité d'acceleration d'une catrelle sera plus faible que celle d'une clio (il a un 5 eme sur les catrelles ?) et entre la 5eme et la 4eme d'une clio la vitesse d'acceleration est aussi differente vous stockez donc pour chaque rapport cette valeur dans le tableau suivant
  • /
float acc[5]; /* la c'est le rapport de transmission pour chaque vitesse. pour la theorie le rapport correspond: vitesse de rotation des roues / vitesse de rotation de l'arbre de sortie du moteur pour avoir la vitesse faut faire R*w avec R le rayon de la roue et w la vitesse de rotation de l'arbre bon moi je me preocupe pas de R puisque c'est une variable du modele du vehicule si vous voulez en tenir compte vous n'avez qu'a faire rapport_transmission * R
  • /
float trans[5]; //capacité de deceleration du vehicule (valeur arbitraire que vous fixez) float dec; /* ous le nom de i se cache ... la temps en fait i c'est le point clé des equation que j'utilise pour gerer la vitesse etant donné que j'utilise des fonctions mathematique a une variable je suis obligé d'avoir une valeur incrementale commme quand vous etes en cours et qu'on ecrit au tableau : f(x) et ben x = i ici :) les fonction que j'utilise sont simples et j'aurais quand meme pu me donner la peine d'utiliser les suites convergentes correspondantes ce qui est du ressort d'un 1er ou terminal mais j'y ai pas pensé tout de suite et j'ai un peu la fleme mais cessons de tergiverser et continuons nos explications
  • /
float i; }; #endif

Conclusion :


le frein moteur est implementé

now just listen to the vroom vroom music !!

Codes Sources

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.