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