Некорректно работает отображение точки в консоли

В общем, недавно (вчера) написал dll на C# для упрощения работы с консольной графикой. Решил подключить её к проекту чтобы протестировать:

Код самой dll:

using System.Runtime.CompilerServices;
using System.Text;

namespace Graphic
{
    public class Graphics
    {
        public void Browse(Buffer buffer)
        {
            for (int i = 0; i < buffer.height; i++)
            {
                for (int j = 0; j < buffer.width; j++)
                {
                    Console.Write(buffer.buf[i, j]);
                }
            }
        }
    }
    public class Coords(int X, int Y) 
    {
        public int x = X, y = Y;

    }
    public class Buffer
    {
        public int width = Console.WindowWidth;
        public int height = Console.WindowHeight;
        public char[,] buf = new char[Console.WindowHeight, Console.WindowWidth];

        public void Fill(char simbol)
        {
            for (int x = 0; x < height; x++)
            {
                for (int y = 0; y < width; y++)
                {
                    buf[x, y] = simbol;
                }
            }
        }
        public void FillPoint(Coords coord, char simbol)
        {
            buf[coord.y, coord.x] = simbol;
        }
        public void Line(Coords SP, Coords EP, char simbol)
        {
            var steep = Math.Abs(EP.y - SP.y) > Math.Abs(EP.x - SP.x); // Проверяем рост отрезка по оси икс и по оси игрек
            // Отражаем линию по диагонали, если угол наклона слишком большой
            if (steep)
            {
                Swap(ref SP.x, ref SP.y); // Перетасовка координат вынесена в отдельную функцию для красоты
                Swap(ref EP.x, ref EP.y);
            }
            // Если линия растёт не слева направо, то меняем начало и конец отрезка местами
            if (SP.x > EP.x)
            {
                Swap(ref SP.x, ref EP.x);
                Swap(ref SP.y, ref EP.y);
            }
            int dx = EP.x - SP.x;
            int dy = Math.Abs(EP.y - SP.y);
            int error = dx / 2; // Здесь используется оптимизация с умножением на dx, чтобы избавиться от лишних дробей
            int ystep = (SP.y < EP.y) ? 1 : -1; // Выбираем направление роста координаты y
            int y = SP.y;
            for (int x = SP.x; x <= EP.x; x++)
            {
                Coords c = new Coords(x, y);
                c.x = steep ? y : x;
                c.y = steep ? x : y;
                FillPoint(c, simbol); ; // Не забываем вернуть координаты на место
                error -= dy;
                if (error < 0)
                {
                    y += ystep;
                    error += dx;
                }
            }
        }
        private void Swap(ref int x, ref int y)
        {
            var temp = x;
            x = y;
            y = temp;
        }
    }
}

Код исполняемого файла:

using Graphic;

namespace Cons_graph
{
    internal class Program
    {
        static public Graphic.Buffer buffer = new Graphic.Buffer();
        static public Graphics gr = new Graphics();
        static void Main(string[] args)
        {
            char chr = '#';
            Console.SetBufferSize(buffer.width, buffer.height);
            buffer.Fill(' ');
            Coords g = new Coords(10, 5);
            buffer.FillPoint(g, chr);
            gr.Browse(buffer);
            Console.ReadLine();
        }
    }
}

Проблема заключается в том - что символ выводится не по координатам (10, 5) а по координатам (40, 2). Вопрос таков - как сделать так чтобы символ выводился на нужные координаты.

p.s - размер окна и буфера 120 на 30


Ответы (0 шт):