Для реализации одновременного движения двух игроков в игре на C# в консоли, вы можете использовать параллельное выполнение задач или многопоточность. В вашем случае, можно создать два потока, каждый из которых будет управлять перемещением ракетки для одного игрока.
Вот пример кода, который демонстрирует, как можно реализовать это с использованием многопоточности:
```csharp
using System;
using System.Threading;
class PingPongGame
{
static int player1Position = 0;
static int player2Position = 0;
static void Main(string[] args)
{
Console.CursorVisible = false;
Thread player1Thread = new Thread(MovePlayer1);
Thread player2Thread = new Thread(MovePlayer2);
player1Thread.Start();
player2Thread.Start();
}
static void MovePlayer1()
{
while (true)
{
if (Console.KeyAvailable)
{
ConsoleKeyInfo key = Console.ReadKey();
if (key.Key == ConsoleKey.W && player1Position > 0)
{
player1Position--;
}
else if (key.Key == ConsoleKey.S && player1Position < Console.WindowHeight - 3)
{
player1Position++;
}
}
Console.SetCursorPosition(0, player1Position);
Console.Write("■");
Thread.Sleep(50);
Console.SetCursorPosition(0, player1Position);
Console.Write(" ");
}
}
static void MovePlayer2()
{
while (true)
{
if (Console.KeyAvailable)
{
ConsoleKeyInfo key = Console.ReadKey();
if (key.Key == ConsoleKey.UpArrow && player2Position > 0)
{
player2Position--;
}
else if (key.Key == ConsoleKey.DownArrow && player2Position < Console.WindowHeight - 3)
{
player2Position++;
}
}
Console.SetCursorPosition(Console.WindowWidth - 1, player2Position);
Console.Write("■");
Thread.Sleep(50);
Console.SetCursorPosition(Console.WindowWidth - 1, player2Position);
Console.Write(" ");
}
}
}
```
Этот код создает два потока, один для каждого игрока, которые управляют движением их ракеток. Каждый поток проверяет нажатие клавиш и соответственно передвигает позицию ракетки игрока.
Надеюсь, это поможет вам решить проблему с одновременным движением двух игроков в вашей игре на C#.