Как реализовать одновременное движение двух игроков в игре на C#?

Как сделать так, чтобы два игрока могли одновременно управлять движением ракеток в игре пинг-понг, используя C# в консоли? У меня возникла проблема с ReadKey, в результате чего только один игрок может двигать ракетку. Вот участок кода, где вызывается движение игроков. Как можно улучшить это, чтобы оба игрока могли двигаться одновременно? А вот код для движения каждого игрока (ракетки).
  • 13 марта 2024 г. 18:19
Ответы на вопрос 2
Для реализации одновременного движения двух игроков в игре на 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#.
Многопоточность??
Похожие вопросы