C# Управление квадратиком

241
28 февраля 2018, 06:22
    using System;
using Graph;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Graph
{
    class graph
    {
        class ColorEl
        {
            public ColorEl(int x, int y, ConsoleColor b, ConsoleColor f, string txt){
                Console.BackgroundColor = b;
                Console.ForegroundColor = f;
                Console.SetCursorPosition(x, y);
                Console.WriteLine(txt);
                Console.ResetColor();
            }
        }
        public static void Main(string[] args)
        {
            ColorEl el1 = new ColorEl(12, 3, ConsoleColor.White, ConsoleColor.Black, "Drawing");
            Console.WriteLine("\n\n\nНажмите любой символ для продолжения...");
            Console.ReadKey();
            Console.Clear();
            Random rand = new Random();
            int redo = 0;
            int height = 10;
            int sides = 20;
            ConsoleKeyInfo keyinf;
            Console.ForegroundColor = ConsoleColor.Cyan;
            do
            {
                keyinf = Console.ReadKey(true);
                switch(keyinf.Key){
                    case ConsoleKey.RightArrow:
                        sides++;
                        Console.SetCursorPosition(sides, height);
                        Console.WriteLine("▀");
                        break;
                    case ConsoleKey.LeftArrow:
                        sides--;
                        Console.SetCursorPosition(sides, height);
                        Console.WriteLine("▀");
                        break;
                    case ConsoleKey.UpArrow:
                        height--;
                        Console.SetCursorPosition(sides, height);
                        Console.WriteLine("▀");
                        break;
                    case ConsoleKey.DownArrow:
                        height++;
                        Console.SetCursorPosition(sides, height);
                        Console.WriteLine("▀");
                        break;
                    case ConsoleKey.Escape:
                        redo = 12;
                        Console.Clear();
                        Console.WriteLine("Рисование закончено");
                        break;
                    case ConsoleKey.R:
                        redo = 0;
                        break;
                }
            }while(redo == 0);
            Console.ReadKey();
        }
    }

P.S. Переписан вопрос (простите, дописал, что бы было прям точно ясно, что я хочу узнать) Хочу сделать управление объектом, как реализовать? Я сам уже много что пробовал, искал, писал. Не могу найти нормально решения. Если есть уже примеры. Был бы рад посмотреть.

Answer 1

File -> New project -> Console application и вставляем код ниже в Progarm.cs

using System;
namespace TestConsole
{
    class Program
    {
        class Square
        {
            private int _rightLimit;
            private int _bottomLimit;
            public int X { get; private set; }
            public int Y { get; private set; }
            public Square()
            {
                _rightLimit = Console.WindowWidth - 1; 
                _bottomLimit = Console.WindowHeight - 1;
                X = 0;
                Y = 0;
            }
            public void MoveToLeft()
            {
                if (X > 0) {
                    X--;                    
                }
            }
            public void MoveToRight()
            {
                if(X < _rightLimit) {
                    X++;
                }
            }
            public void MoveToUp()
            {
                if(Y > 0) {
                    Y--;
                }
            }
            public void MoveToDown()
            {
                if(Y < _bottomLimit) {
                    Y++;
                }
            }
        }
        static void Main(string[] args)
        {            
            Run();
            Console.SetCursorPosition(0, 0);
            Console.WriteLine("Всё...");
            Console.ReadLine();
        }
        static void Run()
        {
            Square square = new Square();
            // рисуем на стартовой позиции
            PrintSquare(square);
            while (true) {
                ConsoleKeyInfo keyInfo = Console.ReadKey();
                if (keyInfo.Key == ConsoleKey.Escape) {
                    break;
                }
                int oldX = square.X;
                int oldY = square.Y;                
                switch(keyInfo.Key) {
                    case ConsoleKey.LeftArrow:
                        square.MoveToLeft();
                        break;
                    case ConsoleKey.RightArrow:
                        square.MoveToRight();
                        break;
                    case ConsoleKey.UpArrow:
                        square.MoveToUp();
                        break;
                    case ConsoleKey.DownArrow:
                        square.MoveToDown();
                        break;
                }
                if (oldX != square.X || oldY != square.Y) {
                    // чистим на старой позиции
                    Console.SetCursorPosition(oldX, oldY);
                    Console.Write(' ');
                    // рисуем на новой позиции
                    PrintSquare(square);
                }
            }
        }
        static void PrintSquare(Square square)
        {
            Console.SetCursorPosition(square.X, square.Y);
            Console.Write('▀');
        }
    }
}
READ ALSO
C# Замедление цикла

C# Замедление цикла

Возможно ли замедлить цикл так, что бы мы увидели например, как появляются новые цифры в консоле при пересчете массива(не спрашивайте зачем...

188
Возможно c# + js взаимодействие? [требует правки]

Возможно c# + js взаимодействие? [требует правки]

Всё в шапкеНужно с c# внедрить скрипт в браузер в виде JS

167
C# UWP Получить DisplayName установленных UWP приложений

C# UWP Получить DisplayName установленных UWP приложений

Стоит задача получить список приложений на ПКЕсть WPF приложение, преобразованное в UWP через "мост"

194
Стеганография WAV файла

Стеганография WAV файла

ЗдравствуйтеРеализую стеганографический метод LSB для WAV файла

214