С# движение двух игроков одновременно?
Пишу игру пинг-понг на 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(); } }
Дополнительно:
Ответы:
Многопоточность??
Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.
Пока нет других ответов. Будьте первым, кто поможет автору.
Ответить на вопрос
Для реализации движения двух игроков одновременно в игре на 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; } }
Этот код демонстрирует базовую идею движения двух игроков одновременно в игре на C#. Каждый игрок имеет свои собственные параметры и обрабатывает ввод с клавиатуры независимо от другого игрока. Разумеется, в реальной игре вам могут потребоваться дополнительные проверки и обработка ввода, в зависимости от конкретных требований вашего проекта.