Некорректно работает отображение точки в консоли
В общем, недавно (вчера) написал 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