Réduire le temps

Réduire le temps - C++ - Programmation

Marsh Posté le 13-06-2005 à 11:40:46    

Bonjour à tous, voilà mon problème, je dois faire varier des caractéristiques en fonction du temps, et pour cela, au début du programmme, j'ai une fonction qui relève l'heure du système et à un certain moment, je dois modifier des attributs, et donc je recommence l'opération avec l'heure du système. Seulement, mes attributs varient trop vite, et je voulais savoir comment "ralentir" ce changement...
 
Voici le code :

Code :
  1. ArrayAttributs[0]+=(GimmeTime() - (temps_intermediaire));  //calcul du carac
  2. ArrayAttributs[1]-=(GimmeTime() - (temps_intermediaire));  //calcul de la soc
  3. ArrayAttributs[2]+=(GimmeTime() - (temps_intermediaire));  //calcul de la faim
  4. ArrayAttributs[3]+=(GimmeTime() - (temps_intermediaire));  //calcul de la salete
  5. ArrayAttributs[4]-=(GimmeTime() - (temps_intermediaire));  //calcul de la sante


 
GimmeTime étant la fonction ou l'on récupère l'heure...
 
Je suis sous Visual C++
 
Merci d'avance :jap:

Reply

Marsh Posté le 13-06-2005 à 11:40:46   

Reply

Marsh Posté le 13-06-2005 à 11:42:26    

GIMMME GIMMME GIMMME A MAAAAAN AFTER MIDNIGHT §§§§§§

Reply

Marsh Posté le 13-06-2005 à 11:47:41    

hum hum... ce qui veut dire?

Reply

Marsh Posté le 13-06-2005 à 11:48:21    

Euh rien, pardon :sweat:

Reply

Marsh Posté le 13-06-2005 à 11:51:07    

Si tu pouvais être un peu plus explicite stp....
 

Reply

Marsh Posté le 13-06-2005 à 11:52:57    

C'était pour de rire, la fonction GimmeTime me faisant penser à ABBA :D
 
Sinon je sais pas... Brut de fonderie, tu fait une boucle d'attente entre chaque truc... Genre tu fait un GimmeTime, puis une boucle, tant que GimmeTime() - startTime est inférieur à un certain temps, ça boucle

Reply

Marsh Posté le 13-06-2005 à 11:56:26    

ok j'avais pas fait le rapprochement avec la chanson d'ABBA, sinon je pense que je serai rentré dans ton jeu, bref, je vais essayer ce que tu m'a proposé..
 
Merci bien en otut les cas :hello:

Reply

Marsh Posté le 13-06-2005 à 12:01:29    

Attend j'ai réfléchi un peu à ce que tu m'a dis, et toi tu me demande de boucler jusqu'à une certaine valeure, sauf que moi ce que je veux c'est modifier les attributs, je peux pas me baser sur quelque chose de précis, parce que la fonction ou l'on fait tous les GimmeTime est apellée par l'utilisateur, je sais pas si je me suis bien fait comprendre lol

Reply

Marsh Posté le 13-06-2005 à 12:04:35    

Ok, j'ai dû mal piger le truc :(

Reply

Marsh Posté le 13-06-2005 à 12:06:13    

Je suis désolé, je vais expliquer le contexte, peut être que ca ira mieux pour toi  :)  
 
Je dois faire un tamagoshi et pour éviter d'utiliser le multithread, on m'a conseillé d'utiliser la méthode e=que j'ai décrite ci dessus.
 
Seulement, mes attributs varient trop vite en fonction du temps, et donc je cherche le moyen de "ralentir" leur modifications ;)
 
Merci

Reply

Marsh Posté le 13-06-2005 à 12:06:13   

Reply

Marsh Posté le 13-06-2005 à 12:07:28    

Comme dit, tu prends un temps de référence. Si un certain interval ne s'est pas écoulé, tu ne modifies pas les attributs :??:

Reply

Marsh Posté le 13-06-2005 à 12:10:37    

Oui mais pendant que tu attends que ce temps de référence arrive en qq sorte, le temps pris pour modifier les attributs continue de découler, et donc ca reviendra au même, puisque on aura attendu plus longtemps, donc les attributs auront augmenté de la même facon...
 
Je me suis bien faire comprendre?  :pt1cable:  :pt1cable:

Reply

Marsh Posté le 13-06-2005 à 12:11:16    

Et en faisant une attente entre chaque attribut ?

Reply

Marsh Posté le 13-06-2005 à 12:11:34    

Ben calcul sur les minutes au lieu des secondes, ça variera 60 fois moins vite :)

Reply

Marsh Posté le 13-06-2005 à 12:13:01    

Très bonne idée, je te remercie, pourrais tu me donner la syntaxe??
 
Voici ma fonction GimmeTime :  

Code :
  1. float Tamagoshi::GimmeTime(void)
  2. {
  3.   long H;
  4.   time(&H); // Recupère l'heure
  5.   //cout<<H % 86400 / 3600 + 2<<" : "<<H % 3600 / 60<<" : "<<H % 60<<endl;
  6.          return H;
  7. }


 
Merci d'avance

Reply

Marsh Posté le 13-06-2005 à 12:13:43    

Ch'ais pas, j'ai jamais fait de C++ :( Y'a pas de sleep ou de truc dans le genre ? Enfin un truc qui ne bloquerait pas le reste aussi...

Reply

Marsh Posté le 13-06-2005 à 12:15:16    

Bah non puisque je prend le temps à partir de l'horloge système, donc même avec un sleep ca ne marchera pas...  :(

Reply

Marsh Posté le 13-06-2005 à 12:15:40    

Code :
  1. return H/60;

 :whistle:

Reply

Marsh Posté le 13-06-2005 à 12:17:34    

d'ailleurs si ça va toujours trop vite tu peux diviser par 100, par 1000, etc.

Reply

Marsh Posté le 13-06-2005 à 12:17:35    

Aïe c'est trop lent maintenant M****
 
Peut on faire quelque chose du genre :  
 

Code :
  1. ArrayAttributs[0]+=((GimmeTime() - (temps_intermediaire))/2);


 
Au lieu de

Code :
  1. ArrayAttributs[0]+=(GimmeTime() - (temps_intermediaire));

Reply

Marsh Posté le 13-06-2005 à 12:18:04    

Ou plutot *2 puisque maintenant c'est trop lent :D

Reply

Marsh Posté le 13-06-2005 à 12:18:36    

plutôt

Code :
  1. GimmeTime()/2 - temps_intermediaire

Reply

Marsh Posté le 13-06-2005 à 12:20:05    

Oula non, j'ai déjà essayer et ca me fait n'importe quoi!!
 
Je me sens quelque peu perdu  :??:

Reply

Marsh Posté le 13-06-2005 à 12:22:05    

J'ai essayé d'agir sur les ArrayAttributs ensuite mais ca me donne n'importe quoi aussi et la je n'ai plus d'idées
 
Merci en tout les cas  :jap:

Reply

Marsh Posté le 13-06-2005 à 12:23:02    

Bon en gros si j'ai bien compris ton problème tu utilises la valeur renvoyée par GimmeTime() pour calculer d'autres valeurs.
Or GimmeTime() te renvoie un entier enorme (en secondes)
Donc tes valeurs varient n'importe comment ("trop vite" )
Solution : Utiliser des coefficients pour reduire cette valeur donc diviser ce que tu renvoie GimmeTime() par 2, 5, 10, 60, ... pour que ça te convienne.
(mais bon je suis vraiment pas sûr que ça soit une bonne idée par rapport à ce que tu veux faire)


Message édité par cgo2 le 13-06-2005 à 12:23:34
Reply

Marsh Posté le 13-06-2005 à 12:24:42    

Ok , je vais essayer de ce que tu me dis.
 
Merci beaucoup :jap:

Reply

Marsh Posté le 13-06-2005 à 14:22:26    

J'ai donc changé ma méthode GimmeTime, la voici :
 

Code :
  1. float Tamagoshi::GimmeTime(bool var)
  2. {
  3.   long H;
  4.   time(&H); // Recupère l'heure
  5.   //cout<<H % 86400 / 3600 + 2<<" : "<<H % 3600 / 60<<" : "<<H % 60<<endl;
  6.   if(var==1){
  7.   return H;
  8.   }
  9.   if(var==0){
  10.    return (H/10);
  11.   }
  12. }


 
Et lorsque j'éxécute le programme, il me met des valeurs qui n'ont rien à voir...
 
Quelqu'uin peut il m'expliquer la raison??
 
Merci :jap:

Reply

Marsh Posté le 13-06-2005 à 15:10:40    

Personne n'aurait une petite idée parce que là franchement je vois pas...
 
Merci d'avance :jap:

Reply

Marsh Posté le 13-06-2005 à 17:29:27    

Aldarek a écrit :


Et lorsque j'éxécute le programme, il me met des valeurs qui n'ont rien à voir...


rien à voir avec quoi ?

Reply

Marsh Posté le 13-06-2005 à 17:36:21    

avec ce que j'attends, au lieu de passer de 80 à 78 par exemple, il passe de 80 à 197834231, enfin des chiffres de merde qui n'on rien à voir.
 
Sinon quelqu'un m'a dit d'utiliser SetTimer(), qu'en pensez vous?
 
:jap:

Reply

Marsh Posté le 15-06-2005 à 09:57:37    

Alors que pensez vous du SetTimer()?? Merci pour vos indications :jap:

Reply

Marsh Posté le 15-06-2005 à 10:06:09    

que vaut ton "temps_intermediaire" ?

Reply

Marsh Posté le 15-06-2005 à 10:17:54    

Mon temps intermédiaire dépend du temps que l'utilisateur met pour effectuer divers actions, car le tamagoshi (pour l'instant) se présente avec un menu, et le temps intermédiaire est calculé à chaque début du menu...

Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed