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 :

Executer 2 threads en meme temps


Sujet :

C#

  1. #1
    Nouveau Candidat au Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Avril 2017
    Messages
    1
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 26
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2017
    Messages : 1
    Points : 1
    Points
    1
    Par défaut Executer 2 threads en meme temps
    Bonjour tout le monde!

    Je suis en train de coder un jeux tron pour mon ecole, et donc pour cela j'ai besoin de detecter les entrees claviers. Le jeu etant un jeu en locale, tous les joueurs joues sur le meme clavier, donc j'ai besoin que tous mes players detectent le console.readkeys. Je sais pas si j'ai été claire mais voici mon code test:
    Mon program.cs
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    public class Program
        {
            public enum Action { up, left, right, down, none };
     
            static void Main(string[] args)
            {
                player player2 = new player("2");
                player player1 = new player("1");
            }
        }
    }
    la classe player:
    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
    class player
        {
            KeyboardInput input;
            Program.Action direction;
            string pseudo;
     
            public player(string pseudo)
            {
                this.pseudo = pseudo;
                input = new KeyboardInput();
     
                Thread inputThread = new Thread(inputT);
                inputThread.Start();
            }
     
            public void inputT()
            {
                Program.Action tempDirection;
                while (true)
                {
                    tempDirection = input.GetNextAction();
                    Console.WriteLine(pseudo + " " + tempDirection);
                    if (tempDirection != Program.Action.none)
                        direction = tempDirection;
                }
            }
        }
    Et la classe keyboardInput:
    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
     public class KeyboardInput: Program
        {
            private ConsoleKey up, down, left, right;
     
            public KeyboardInput()
            {
                up = ConsoleKey.Z;
                down = ConsoleKey.S;
                left = ConsoleKey.Q;
                right = ConsoleKey.D;
            }
     
            public KeyboardInput(ConsoleKey up, ConsoleKey down, ConsoleKey left, ConsoleKey right)
            {
                this.up = up;
                this.down = down;
                this.left = left;
                this.right = right;
            }
     
            public Action GetNextAction()
            {
                ConsoleKey input = Console.ReadKey(true).Key;
                if (input == up)
                    return Action.up;
                if (input == down)
                    return Action.down;
                if (input == left)
                    return Action.left;
                if (input == right)
                    return Action.right;
                return Action.none;
            }
        }
    Voici mon probleme: quand je lance mon programme, si j'appuie sur une touche, seulement 1 player la recoit, puis si je reappuie c'est au tour d'un autre, etc...

    Resultat:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    2 left
    1 down
    2 right
    1 up
    2 left
    1 down
    2 right
    1 up
    2 left
    1 down
    2 right
    Alors que je voudrais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    2 left
    1 left
    2 down
    1 down
    2 right 
    1 right
    Etc...
    Avez vous une idée?
    Merci!

  2. #2
    Expert confirmé

    Homme Profil pro
    Responsable déploiement (SCCM, InTune, GPO)
    Inscrit en
    Juillet 2014
    Messages
    3 184
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Responsable déploiement (SCCM, InTune, GPO)
    Secteur : Transports

    Informations forums :
    Inscription : Juillet 2014
    Messages : 3 184
    Points : 5 755
    Points
    5 755
    Par défaut
    Mais en réalité, tu appuie qu'une fois sur la touche ?

  3. #3
    Membre expérimenté
    Avatar de charouel
    Homme Profil pro
    Freelance
    Inscrit en
    Mars 2009
    Messages
    618
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Val de Marne (Île de France)

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

    Informations forums :
    Inscription : Mars 2009
    Messages : 618
    Points : 1 454
    Points
    1 454
    Billets dans le blog
    9
    Par défaut
    essaye d'adapter ton code pour l'utilisation des thread ici

  4. #4
    Expert éminent sénior

    Avatar de François DORIN
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Juillet 2016
    Messages
    2 757
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2016
    Messages : 2 757
    Points : 10 541
    Points
    10 541
    Billets dans le blog
    21
    Par défaut
    Bonjour,

    tu as un problème de conception. L'acquisition du clavier ne doit être fait que depuis un et un seul thread, et charge ensuite à ce thread de diffuser les entrées claviers reçues aux différents destinataires.

    Plusieurs mécanismes sont possibles. Par exemple, tu peux faire en sorte que ta classe KeyboardInput génère un événement lors de l'appui sur une touche. Ensuite, chaque joueur s'abonne à l'événement et peut ainsi agir en conséquence;
    François DORIN
    Consultant informatique : conception, modélisation, développement (C#/.Net et SQL Server)
    Site internet | Profils Viadéo & LinkedIn
    ---------
    Page de cours : fdorin.developpez.com
    ---------
    N'oubliez pas de consulter la FAQ C# ainsi que les cours et tutoriels

Discussions similaires

  1. Executer plusieurs interfaces en meme temps
    Par PetitChat73 dans le forum ODI (ex-Sunopsis)
    Réponses: 12
    Dernier message: 05/08/2013, 11h15
  2. Executer plusieurs programmes en meme temps
    Par thtghgh dans le forum MATLAB
    Réponses: 1
    Dernier message: 21/02/2011, 15h03
  3. Réponses: 2
    Dernier message: 03/04/2008, 10h52
  4. if et else s'execute en meme temps sous firefox
    Par etud_ini dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 03/10/2007, 08h58
  5. Executer plusieurs fonctions en meme temps ?
    Par bilou95 dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 29/05/2007, 11h35

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