Как заставить другой объект следовать по оси X, когда я перемещаю объект с помощью клавиш со стрелками вверх и вниз? - PullRequest
0 голосов
/ 07 апреля 2019

Я пытаюсь создать консольную игру на C #, в которой я перемещаю объект "M" по оси x с помощью клавиш со стрелками вверх и вниз.

Я не могу понять, как заставить другой объект сказать «S», чтобы следовать за мной вверх и вниз, где бы ни находился объект «M».«M» будет находиться слева от окна консоли, то есть X = 0. Тогда как «S» должно быть расположено на противоположной границе, то есть X = 100.

Я использовал публичные int свойства X иY в абстрактном классе.Кроме того, я использую абстрактный метод, чтобы заставить объекты двигаться.

Существует два производных класса Martian и SpaceShip.Я получил движение клавиши со стрелкой объекта "M".Мне просто нужно кодировать в классе космического корабля, чтобы объект "S" следовал за "M".

//In Martian Class
public override void Draw()
{
    int x = 0;
    int y = 0;
    X = x;
    Y = y;
    ConsoleKeyInfo keyInfo;
    while(true)
     {
       keyInfo = Console.ReadKey(true);
       Console.Clear();
       switch (keyInfo.Key)
        {
          case ConsoleKey.UpArrow:
          Y--;
          Console.SetCursorPosition(X,Y);
          Console.WriteLine("M");
          break;

          case ConsoleKey.DownArrow:
          Y++;
          Console.SetCursorPosition(X,Y);
          Console.WriteLine("M");
          break;
        }
      }
}

//In SpaceShip Class
public override void Draw()
{          
   //How do I make the "S" follow "M"? 
}

Я ожидаю, что "S" будет следовать за "M" по вертикали, но будет расположен напротивграницы окна.

Любая помощь приветствуется.Заранее спасибо.

1 Ответ

1 голос
/ 07 апреля 2019

Я думаю, что ваши методы рисования делают много.Они должны отвечать только за рисование объекта на экране.Перемещение объектов и работа с клавиатурой должны выполняться где-то еще.

Вот мое решение:

using System;

namespace ConsoleApplication6
{
    class Program
    {
        static void Main(string[] args)
        {
            Martian m = new Martian();
            SpaceShip s = new SpaceShip();

            const int MaxY = 100;

            m.Draw();
            s.X = m.X + 100;
            s.Y = m.Y;
            s.Draw();

            ConsoleKeyInfo keyInfo;
            while (true)
            {
                keyInfo = Console.ReadKey(true);
                Console.Clear();
                switch (keyInfo.Key)
                {
                    case ConsoleKey.UpArrow:
                        if (m.Y > 0)
                        {
                            m.Y--;
                        }
                        break;
                    case ConsoleKey.DownArrow:
                        if (m.Y < MaxY)
                        {
                            m.Y++;
                        }
                        break;
                }
                m.Draw();
                s.X = m.X + 100;
                s.Y = m.Y;
                s.Draw();
            }
        }
    }

    public abstract class GameObject
    {
        public int X { get; set; }
        public int Y { get; set; }

        public abstract void Draw();
    }

    public class Martian : GameObject
    {
        public override void Draw()
        {
            Console.SetCursorPosition(X, Y);
            Console.WriteLine("M");
        }
    }

    public class SpaceShip : GameObject
    {
        public override void Draw()
        {
            Console.SetCursorPosition(X, Y);
            Console.WriteLine("S");
        }
    }
}
...