Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1374 connectés 

  FORUM HardWare.fr
  Programmation
  C++

  Réduire le temps

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Réduire le temps

n°1118064
Aldarek
Posté le 13-06-2005 à 11:40:46  profilanswer
 

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:

mood
Publicité
Posté le 13-06-2005 à 11:40:46  profilanswer
 

n°1118067
FlorentG
Unité de Masse
Posté le 13-06-2005 à 11:42:26  profilanswer
 

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

n°1118086
Aldarek
Posté le 13-06-2005 à 11:47:41  profilanswer
 

hum hum... ce qui veut dire?

n°1118088
FlorentG
Unité de Masse
Posté le 13-06-2005 à 11:48:21  profilanswer
 

Euh rien, pardon :sweat:

n°1118102
Aldarek
Posté le 13-06-2005 à 11:51:07  profilanswer
 

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

n°1118107
FlorentG
Unité de Masse
Posté le 13-06-2005 à 11:52:57  profilanswer
 

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

n°1118116
Aldarek
Posté le 13-06-2005 à 11:56:26  profilanswer
 

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:

n°1118130
Aldarek
Posté le 13-06-2005 à 12:01:29  profilanswer
 

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

n°1118136
FlorentG
Unité de Masse
Posté le 13-06-2005 à 12:04:35  profilanswer
 

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

n°1118140
Aldarek
Posté le 13-06-2005 à 12:06:13  profilanswer
 

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

mood
Publicité
Posté le 13-06-2005 à 12:06:13  profilanswer
 

n°1118145
FlorentG
Unité de Masse
Posté le 13-06-2005 à 12:07:28  profilanswer
 

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 :??:

n°1118153
Aldarek
Posté le 13-06-2005 à 12:10:37  profilanswer
 

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:

n°1118155
FlorentG
Unité de Masse
Posté le 13-06-2005 à 12:11:16  profilanswer
 

Et en faisant une attente entre chaque attribut ?

n°1118157
cgo2
Dum spiro spero
Posté le 13-06-2005 à 12:11:34  profilanswer
 

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

n°1118161
Aldarek
Posté le 13-06-2005 à 12:13:01  profilanswer
 

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

n°1118164
FlorentG
Unité de Masse
Posté le 13-06-2005 à 12:13:43  profilanswer
 

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...

n°1118168
Aldarek
Posté le 13-06-2005 à 12:15:16  profilanswer
 

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

n°1118170
cgo2
Dum spiro spero
Posté le 13-06-2005 à 12:15:40  profilanswer
 

Code :
  1. return H/60;

 :whistle:

n°1118177
cgo2
Dum spiro spero
Posté le 13-06-2005 à 12:17:34  profilanswer
 

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

n°1118178
Aldarek
Posté le 13-06-2005 à 12:17:35  profilanswer
 

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));

n°1118182
Aldarek
Posté le 13-06-2005 à 12:18:04  profilanswer
 

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

n°1118184
cgo2
Dum spiro spero
Posté le 13-06-2005 à 12:18:36  profilanswer
 

plutôt

Code :
  1. GimmeTime()/2 - temps_intermediaire

n°1118188
Aldarek
Posté le 13-06-2005 à 12:20:05  profilanswer
 

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

n°1118189
Aldarek
Posté le 13-06-2005 à 12:22:05  profilanswer
 

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:

n°1118190
cgo2
Dum spiro spero
Posté le 13-06-2005 à 12:23:02  profilanswer
 

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
n°1118193
Aldarek
Posté le 13-06-2005 à 12:24:42  profilanswer
 

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

n°1118327
Aldarek
Posté le 13-06-2005 à 14:22:26  profilanswer
 

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:

n°1118380
Aldarek
Posté le 13-06-2005 à 15:10:40  profilanswer
 

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

n°1118619
cgo2
Dum spiro spero
Posté le 13-06-2005 à 17:29:27  profilanswer
 

Aldarek a écrit :


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


rien à voir avec quoi ?

n°1118626
Aldarek
Posté le 13-06-2005 à 17:36:21  profilanswer
 

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:

n°1120354
Aldarek
Posté le 15-06-2005 à 09:57:37  profilanswer
 

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

n°1120364
cgo2
Dum spiro spero
Posté le 15-06-2005 à 10:06:09  profilanswer
 

que vaut ton "temps_intermediaire" ?

n°1120380
Aldarek
Posté le 15-06-2005 à 10:17:54  profilanswer
 

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...

mood
Publicité
Posté le   profilanswer
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C++

  Réduire le temps

 

Sujets relatifs
[PHP/MySQL] tri sur deux bdd en même tempsdestruction de fichiers en même temps que session
Le Temps et Dos/Biosajouter du temps à la date système
MFC intervention en temps réelOptimiser les temps d'accès sous Access
Lancer 3 applications en même temps ...[Java] jouer plusieurs sons en mm temps
Redirection au bout d'un certain temps avec un header() ... [Résolu]Faire deux choses en même temps?
Plus de sujets relatifs à : Réduire le temps


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR