С# движение двух игроков одновременно?

Ссылка скопирована
C#
1 ответ

Пишу игру пинг-понг на c# в консоли, дошел до движения игроков(ракеток) и столкнулся с тем, что не могу сделать так чтобы два игрока могли двигаться одновременно, только один мог. Вот код где вызывается движение. Подозреваю в своей проблеме ReadKey, но даже так не знаю что делать, надеюсь на любую помощь!

while (true)             {                 Task player1Task = Task.Run(() => player1.Move());                 Task player2Task = Task.Run(() => player2.Move());                 // запускаем таймер                                  watcher.Restart();                 while (watcher.ElapsedMilliseconds < FrameMS)                 {                              }             }

while (true) { Task player1Task = Task.Run(() => player1.Move()); Task player2Task = Task.Run(() => player2.Move()); // запускаем таймер watcher.Restart(); while (watcher.ElapsedMilliseconds < FrameMS) { } }

а вот код движения игрока(ракетки)

public void Move()     {         if (playernumber == 1)         {             ConsoleKey key = Console.ReadKey(true).Key;             if (key == ConsoleKey.W)             {                 Clear();                 for (int i = 0; i < racket.Length; i++)                 {                     racket[i].y -= 1;                     racket[i].Draw();                 }             }             else if (key == ConsoleKey.S)             {                 Clear();                 for (int i = 0; i < racket.Length; i++)                 {                     racket[i].y += 1;                     racket[i].Draw();                 }             }         }         else         {             ConsoleKey key = Console.ReadKey(true).Key;             if (key == ConsoleKey.UpArrow)             {                 Clear();                 for (int i = 0; i < racket.Length; i++)                 {                     racket[i].y -= 1;                     racket[i].Draw();                 }             }             else if (key == ConsoleKey.DownArrow)             {                 Clear();                 for (int i = 0; i < racket.Length; i++)                 {                     racket[i].y += 1;                     racket[i].Draw();                 }             }         }     }

public void Move() { if (playernumber == 1) { ConsoleKey key = Console.ReadKey(true).Key; if (key == ConsoleKey.W) { Clear(); for (int i = 0; i < racket.Length; i++) { racket[i].y -= 1; racket[i].Draw(); } } else if (key == ConsoleKey.S) { Clear(); for (int i = 0; i < racket.Length; i++) { racket[i].y += 1; racket[i].Draw(); } } } else { ConsoleKey key = Console.ReadKey(true).Key; if (key == ConsoleKey.UpArrow) { Clear(); for (int i = 0; i < racket.Length; i++) { racket[i].y -= 1; racket[i].Draw(); } } else if (key == ConsoleKey.DownArrow) { Clear(); for (int i = 0; i < racket.Length; i++) { racket[i].y += 1; racket[i].Draw(); } } } }

а вот код создания игрока(ракетки)

public int playernumber;     public Pixel[] racket = new Pixel[8];     public Player(int X, int Y, char Pixel, ConsoleColor Color)     {         if (Color == tennis.Program.playeronecolor)         {             playernumber = 1;         }         else         {             playernumber = 2;         }         for (int i = 0; i < racket.Length; i++)         {             // заполняем массив из частей нашей ракетки             racket[i] = new Pixel(X, Y + i, Pixel, Color);             // отрисовываем ее             racket[i].Draw();         }     }

public int playernumber; public Pixel[] racket = new Pixel[8]; public Player(int X, int Y, char Pixel, ConsoleColor Color) { if (Color == tennis.Program.playeronecolor) { playernumber = 1; } else { playernumber = 2; } for (int i = 0; i < racket.Length; i++) { // заполняем массив из частей нашей ракетки racket[i] = new Pixel(X, Y + i, Pixel, Color); // отрисовываем ее racket[i].Draw(); } }

Дополнительно:

Ответы:

Многопоточность??

Нужно решить такую задачу?

Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.

Заказать помощь
Лучший ответ
1
Елена Вебер Ответ

Для реализации движения двух игроков одновременно в игре на C# можно воспользоваться следующим подходом:

1. Создайте два объекта-игрока, каждый из которых будет иметь свои собственные параметры, такие как позиция, скорость, направление движения и т.д.

2. В методе Update вашего игрового цикла обработайте ввод с клавиатуры или контроллера для каждого игрока. Это может быть с помощью методов Input.GetKey или Input.GetAxis для определения нажатых клавиш или осей движения.

3. На основе ввода каждого игрока обновляйте их позиции и другие параметры. Например, если игрок 1 нажимает клавиши W, A, S, D, то изменяйте его позицию в соответствии с направлением движения. То же самое делайте и для игрока 2.

Пример кода на C#:

void Update()
{
    // Обработка ввода для игрока 1
    if (Input.GetKey(KeyCode.W))
    {
        player1.Move(Vector3.up);
    }
    if (Input.GetKey(KeyCode.A))
    {
        player1.Move(Vector3.left);
    }
    if (Input.GetKey(KeyCode.S))
    {
        player1.Move(Vector3.down);
    }
    if (Input.GetKey(KeyCode.D))
    {
        player1.Move(Vector3.right);
    }
 
    // Обработка ввода для игрока 2
    if (Input.GetKey(KeyCode.UpArrow))
    {
        player2.Move(Vector3.up);
    }
    if (Input.GetKey(KeyCode.LeftArrow))
    {
        player2.Move(Vector3.left);
    }
    if (Input.GetKey(KeyCode.DownArrow))
    {
        player2.Move(Vector3.down);
    }
    if (Input.GetKey(KeyCode.RightArrow))
    {
        player2.Move(Vector3.right);
    }
}
 
public class Player
{
    public Vector3 position;
    public float speed;
 
    public void Move(Vector3 direction)
    {
        position += direction * speed * Time.deltaTime;
    }
}

void Update() { // Обработка ввода для игрока 1 if (Input.GetKey(KeyCode.W)) { player1.Move(Vector3.up); } if (Input.GetKey(KeyCode.A)) { player1.Move(Vector3.left); } if (Input.GetKey(KeyCode.S)) { player1.Move(Vector3.down); } if (Input.GetKey(KeyCode.D)) { player1.Move(Vector3.right); } // Обработка ввода для игрока 2 if (Input.GetKey(KeyCode.UpArrow)) { player2.Move(Vector3.up); } if (Input.GetKey(KeyCode.LeftArrow)) { player2.Move(Vector3.left); } if (Input.GetKey(KeyCode.DownArrow)) { player2.Move(Vector3.down); } if (Input.GetKey(KeyCode.RightArrow)) { player2.Move(Vector3.right); } } public class Player { public Vector3 position; public float speed; public void Move(Vector3 direction) { position += direction * speed * Time.deltaTime; } }

Этот код демонстрирует базовую идею движения двух игроков одновременно в игре на C#. Каждый игрок имеет свои собственные параметры и обрабатывает ввод с клавиатуры независимо от другого игрока. Разумеется, в реальной игре вам могут потребоваться дополнительные проверки и обработка ввода, в зависимости от конкретных требований вашего проекта.

Другие ответы (0)

Пока нет других ответов. Будьте первым, кто поможет автору.

Ответить на вопрос

комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Вам также может быть интересно