IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C Discussion :

probleme avec la vitesse du While


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2017
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2017
    Messages : 6
    Par défaut probleme avec la vitesse du While
    Bonjour,

    Je dois faire un jeu qui s' appelle Envahisseur de l'espace (le jeu d arcade). En faite j' arrive à afficher un missile du vaisseau joueur sauf que je voudrai voir le déplacement du missile parce que quand je fais un tire le missile se positionne instantanément à la position final, je pense que c'est à cause du while c'est pour ça que je voudrais réduire la vitesse du while pour que le déplacement du missile soit visible par l œil humain mais il faut que le missile bouge en même temps que les vaisseaux ennemies par exemple le mouvement des missiles ne doivent pas bloquer les mouvements des autres vaisseaux, j ai pensé à utiliser sleep,usleep,nanosleep mais le problème je pense que ça va bloquer les autres mouvements des vaisseaux et je n ai pas le droit d utiliser de thread. Mais je n'arrive pas et je voudrai votre aide svp.
    Voici le code : getTime() est une fonction qui contient une structure timeval et un gettimeofday qui a pour argument la structure et retourne un temps.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
     
    struct pollfd fds[1];
    fds[0].fd = STDIN_FILENO;
    fds[0].events = POLLIN;
     
    int v = 1200;
    double oldV =v;
     
    	while(1){
    		clear();
    		print_map(carte);
     
    		double bPoll= getTime();
    		tou = poll(fds, 1, v);
    		t[0] = tou;
     
    		if(t[0] == 0){
                             //mouvements des vaisseaux ennemies qui bougent tous seul en boucle
                   }else read(0, tou, 1);
     
                   if (t[0] == 32){
    		  while(i > 75){// ici mon problème
    		      if(upRock(carte,i,j,vaisseaux[1]) == 0){ // i et j sont les positions de départ du missile et upRock va modifier la position du missile dans la carte 
    				        i--;                                          et affiche au fur à mesure les nouvelles position du missile grâce print_map(carte)
    		     }
    		  }
                  }
     
                    double aPoll= getTime();
    		if(t[0] != 0){
    			v = v - (aPoll-bPoll);
    		}else{
    			v = oldV;
    		}
     
    }
    Merci d' avance .

  2. #2
    Responsable Systèmes


    Homme Profil pro
    Gestion de parcs informatique
    Inscrit en
    Août 2011
    Messages
    18 255
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Gestion de parcs informatique
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Août 2011
    Messages : 18 255
    Par défaut
    Tu peux utiliser la fonction sleep qui va attendre le nombre de secondes données en paramètre.
    Ma page sur developpez.com : http://chrtophe.developpez.com/ (avec mes articles)
    Mon article sur le P2V, mon article sur le cloud
    Consultez nos FAQ : Windows, Linux, Virtualisation

  3. #3
    Invité
    Invité(e)
    Par défaut
    sleep() prend un entier en seconde et ça risque d'être un peu long. Si c'est le cas il y a usleep() et nanosleep() qui fonctionnent bien. Voici quelques éléments de départ

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    #include <stdlib.h>
    #include <time.h>
    #include <sys/time.h> // supprime le warning avec C99
    #include <unistd.h>
     
    ...
     
    struct timespec timer;
    timer.tv_sec=0;
    timer.tv_nsec=1e5; // durée en ns
    usleep(100); // temps en µs
    nanosleep(&timer,NULL); // temps en ns
    ...
    Par curiosité tu utilises quelle librairie graphique ?

  4. #4
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2017
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2017
    Messages : 6
    Par défaut
    Bonjour,

    Merci de vos réponses . Le problème si j'utilise un sleep dans le while du missile, ça va bloquer les autres mouvements des vaisseaux ennemies. Alors que tous les déplacements dois se faire en même temps que ce soit le missile ou soit les vaisseaux. Auriez-vous une autre solution ?
    A quoi correspond 1e5 ( timer.tv_nsec=1e5 ?
    J utilise un termios pour l interface graphique.

  5. #5
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par maestro94 Voir le message
    Bonjour,

    Merci de vos réponses . Le problème si j'utilise un sleep dans le while du missile, ça va bloquer les autres mouvements des vaisseaux ennemies. Alors que tous les déplacements dois se faire en même temps que ce soit le missile ou soit les vaisseaux. Auriez-vous une autre solution ?
    - modifier le pas de déplacement du missile ?
    - implémenter des threads ?

    Citation Envoyé par maestro94 Voir le message
    A quoi correspond 1e5 ( timer.tv_nsec=1e5 ?
    J utilise un termios pour l interface graphique.
    1e5 signifie 1*10 puissance 5 donc 100 000
    Je ne connaissais pas termios, merci je vais chercher comment ça fonctionne
    Dernière modification par Invité ; 14/05/2017 à 14h57.

  6. #6
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2017
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2017
    Messages : 6
    Par défaut
    oui il faut que je modifie le déplacement du missile sans que je bloque le déplacement des autres vaisseaux en gros si je tire mon jeu va se figer sauf le tir du missile. Il faut que tous doit se déplacent en même temps. Je n ai pas le droit d' utiliser de thread.

Discussions similaires

  1. probleme avec la vitesse du calcul
    Par kroma23 dans le forum Débuter
    Réponses: 6
    Dernier message: 23/10/2008, 19h17
  2. probleme avec la boucle do while
    Par manciaux dans le forum C
    Réponses: 11
    Dernier message: 16/05/2007, 15h04
  3. [VBA-E] PRobleme avec une boucle DO..LOOP WHILE
    Par AliochaBada dans le forum Macros et VBA Excel
    Réponses: 11
    Dernier message: 31/07/2006, 01h04
  4. Probleme avec WHILE
    Par beb30 dans le forum C
    Réponses: 14
    Dernier message: 05/04/2006, 14h40
  5. Problème avec un while...
    Par pcdj dans le forum Linux
    Réponses: 7
    Dernier message: 17/10/2005, 22h24

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo