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

avec Java Discussion :

Délai de réponse d'un joueur.


Sujet :

avec Java

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Novembre 2012
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2012
    Messages : 4
    Points : 5
    Points
    5
    Par défaut Délai de réponse d'un joueur.
    Bonjour,
    je dois créer un jeu de type calcul mental pour l'intégrer à une application, cependant je coince sur un aspect : Lorsque je demande au joueur de rentrer une réponse, j'aimerai activer un temps (une dizaine de seconde) et si à la fin de ce temps le joueur n'a pas répondu, passer à la question suivante sans lui accorder de point.

    J'ai essayé de regarder le contrôle de thread avec les timers et tout ça, mais ça n'a donné rien de bien concluant.

    Auriez-vous une piste à m'indiquer ?

    Merci

  2. #2
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 551
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 551
    Points : 21 608
    Points
    21 608
    Par défaut
    Ça dépend d'abord de l'interface utilisée.
    System.out et System.in ?
    Swing ?
    SWT ?
    Autre chose ?
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Novembre 2012
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2012
    Messages : 4
    Points : 5
    Points
    5
    Par défaut
    System.in & out, mais au final ce jeu sera utilisé sous une interface swing.

  4. #4
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 551
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 551
    Points : 21 608
    Points
    21 608
    Par défaut
    Ce n'est pas vraiment possible avec System.in & out, la gestion de la console par java est trop limitée.

    Avec Swing, ça se fera avec un Timer Swing.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  5. #5
    Modérateur
    Avatar de kolodz
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2008
    Messages
    2 211
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 211
    Points : 8 316
    Points
    8 316
    Billets dans le blog
    52
    Par défaut
    Il est possible de faire un différentiel sur le début de l'attente et la fin :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    long debut = System.currentTimeMillis();
    		String line = null;
    		try {
    			line = in.readLine();
    		} catch (IOException e) {
    			// TODO Auto-generated catch block
    			e.printStackTrace();
    		}
    		long fin = System.currentTimeMillis();
    		System.out.println("Ligne tapé : "+line);
    		System.out.println(fin-debut);
    Si une réponse vous a été utile pensez à
    Si vous avez eu la réponse à votre question, marquez votre discussion
    Pensez aux FAQs et aux tutoriels et cours.

  6. #6
    Futur Membre du Club
    Profil pro
    Inscrit en
    Novembre 2012
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2012
    Messages : 4
    Points : 5
    Points
    5
    Par défaut
    Merci pour vos deux réponses !

    Cependant Eclipse semble mécontent avec la ligne suivante

    line = in.readLine();

  7. #7
    Modérateur
    Avatar de kolodz
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2008
    Messages
    2 211
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 211
    Points : 8 316
    Points
    8 316
    Billets dans le blog
    52
    Par défaut
    Logiquement tu dois taper quelque chose au niveau de la console eclipse.
    De base ce que tu écris est en vert. Quand tu fait un retour à la ligne readLine() retournera ce que tu as taper.

    si cela ne t'aide pas, il faudra nous donner plus de détails.

    Cordialement,
    Patrick Kolodziejczyk.
    Si une réponse vous a été utile pensez à
    Si vous avez eu la réponse à votre question, marquez votre discussion
    Pensez aux FAQs et aux tutoriels et cours.

  8. #8
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 551
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 551
    Points : 21 608
    Points
    21 608
    Par défaut
    il faudrait déjà commencer par déclarer in -_-°.
    Par exemple BufferedReader in = new BufferedReader(new InputStreamReader(System.in)); .

    De toute façon ça consiste juste à lire une ligne de l'entrée standard. Ça peut se faire de plein de façons et ce n'est pas une partie importante de l'exemple de kolodz : la ligne on la lit comme on veut, c'est tout pareil.

    Le code de kolodz permet simplement de voir combien de temps s'est écoulé entre le moment où on a posé la question et le moment où la réponse est lue. Il ne permet pas de s'arrêter avant d'avoir lu la réponse. Ce qui est, comme je l'ai dit, pas vraiment possible.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  9. #9
    Modérateur
    Avatar de wax78
    Homme Profil pro
    Chef programmeur
    Inscrit en
    Août 2006
    Messages
    4 075
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chef programmeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2006
    Messages : 4 075
    Points : 7 981
    Points
    7 981
    Par défaut
    Je me jette a l'eau.

    Ce code est surement une erreur, mais il semble fonctionner (a priori) pour faire une lecture dans la console avant 5 secondes et afficher si le joueur à répondu, ou bien si le joueur n'as pas répondu :

    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
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    public class Snippet
    {
    	static String	reponse	= null;
     
    	public static void main(String args[]) throws IOException, InterruptedException
    	{
     
    		System.err.println("Entrer la réponse a la question : ");
    		Thread thr = new Thread()
    		{
     
    			public void run()
    			{
    				BufferedReader stdin = new BufferedReader(new InputStreamReader(System.in));
    	            String msg = null;
     
    	            while(!isInterrupted())
    	            {
    	                try
    	                {
    	                    if(stdin.ready())
    	                    {
    	                    	msg = stdin.readLine();
    	                    	reponse = msg;
    	                    	break;
    	                    }
    	                }
    	                catch(IOException e)
    	                {
    	                    e.printStackTrace();
    	                }
    	            }           
     
    			}
    		};
    		thr.start();
     
    		long debut = System.currentTimeMillis();
    		while (System.currentTimeMillis() - debut < 5000)
    		{
    			if (thr.isAlive() == false)
    				break;
    			Thread.sleep(50);
    		}
     
    		if (thr.isAlive() == false)
    			System.err.println("Joue a Repondu : " + reponse);
    		else
    		{
    			System.err.println("Joue a pas Repondu");
    			thr.interrupt();
    		}
    	}
    }
    (Les "ça ne marche pas", même écrits sans faute(s), vous porteront discrédit ad vitam æternam et malheur pendant 7 ans)

    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  10. #10
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 551
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 551
    Points : 21 608
    Points
    21 608
    Par défaut
    - Une lecture sur l'entrée standard n'est pas forcément interruptible.
    - InputStream.ready() peut ne jamais renvoyer true même si une lecture non-bloquante est possible.
    - Attente semi-active à coup de sleep() successifs : beurk ! Mettre une attente adaptée demande une modification en profondeur.
    - Pas de synchronisation entre la réception de la réponse et le délai écoulé, mais bon, ça ça se rajoute facilement.
    - Réutilisation de l'entrée standard après la première question, totalement hasardeuse.

    - De manière générale c'est complètement bancal et incompréhensible, et c'est une raison suffisante pour soupçonner que ça ne doit pas être prévu pour.
    Si on veut faire ce genre de choses, Java de base ne gère pas assez bien la console. Il faut utiliser des bibliothèques comme jcurses, qui ajoutent les fonctions demandées, mais qui dépendent de l'OS utilisé.
    On en déduit que c'est donc réservé aux situations où on est obligé de gérer la console dans le monde professionnel, et que ce n'est absolument pas adapté aux débutants qui cherchent à faire une interface utilisateur en mode texte. Du fait des limitations de Java, on ne peut pas faire ce genre de choses facilement, il vaut donc mieux attendre l'utilisation de l'interface graphique, qui fonctionne de toute façon complètement différemment.

    Pas compliqué, pourtant -_-°
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  11. #11
    Modérateur
    Avatar de wax78
    Homme Profil pro
    Chef programmeur
    Inscrit en
    Août 2006
    Messages
    4 075
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chef programmeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2006
    Messages : 4 075
    Points : 7 981
    Points
    7 981
    Par défaut
    D'où le "a priori"

    En tout cas merci Thelvin pour les précisions on en apprends tout les jours
    (Les "ça ne marche pas", même écrits sans faute(s), vous porteront discrédit ad vitam æternam et malheur pendant 7 ans)

    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

Discussions similaires

  1. [AJAX] Délai de réponse
    Par darkterreur dans le forum jQuery
    Réponses: 12
    Dernier message: 02/10/2012, 00h00
  2. [1.x] délai de réponse ahurissant
    Par erictomcat dans le forum Symfony
    Réponses: 24
    Dernier message: 11/01/2011, 13h17
  3. délai de réponse après postulation
    Par Enohra dans le forum Contrat
    Réponses: 3
    Dernier message: 10/05/2009, 20h01
  4. [Turbo Pascal] Introduire un délai de réponse
    Par lex001 dans le forum Turbo Pascal
    Réponses: 8
    Dernier message: 17/03/2009, 02h35

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