Нарисовать фигуры в консоли без их пересечения - C#
Формулировка задачи:
Отображать новые фигуры(допустим квадрат) в области консоли ограниченного рамками размера(30х20) так, чтобы новые фигуры не пересекались с уже отображенными.
Пересечение вызывает исключение.
Вот что у меня есть. Собственно как сделать пересечения и прочее не знаю...
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace Figure { class Figure { int count; int num; public Figure() { count = 0; num = 25; } public void Init() { string[] mas = new string[25]; for (int i = 0; i < mas.Length; i++) { mas[i] = "*"; } } public void View(string[] mas) { for (int i = 0; i < mas.Length; i++) { if (count % 5 == 0) { Console.Write("\n" + mas[i] + "\t"); count++; } else { Console.Write(mas[i] + "\t"); count++; } } } } class Program { static void Main(string[] args) { } } }
Решение задачи: «Нарисовать фигуры в консоли без их пересечения»
textual
Листинг программы
class Space { int[,] buffer; // Сюда рисуем и определяем пересечения public Space() { Clear(); } public void Clear() { buffer = new int[20, 30]; } public void AddPoint(Figure f, int x, int y) { if (x < 0 || y < 0 || x >= buffer.GetLength(1) || y >= buffer.GetLength(0)) return; int h = f.GetHashCode(); // Уникальное значение для каждой фигуры if (buffer[y, x] != h && buffer[y, x] != 0) throw new Exception("Пересечение !"); buffer[y, x] = h; } public void Draw() { Console.Clear(); Console.SetCursorPosition(0, 0); for (int r = 0; r < buffer.GetLength(0); r++) { for (int c = 0; c < buffer.GetLength(1); c++) { Console.Write(buffer[r, c] != 0 ? '*' : ' '); } Console.WriteLine(); } } } abstract class Figure { public readonly int Left; // Координата X public readonly int Top; // Координата Y public Figure(int Left, int Top) { this.Top = Top; this.Left = Left; } public abstract void Draw(Space Space); } class Square : Figure { public readonly int Width; // Ширина public Square(int Left, int Top, int Width) : base(Left, Top) { this.Width = Width; } public override void Draw(Space Space) { for (int y = 0; y < Width; y++) { for (int x = 0; x < Width; x++) { Space.AddPoint(this, Left + x, Top + y); } } } } public static class Program { public static void Main() { Space space = new Space(); Figure[] figures = { new Square(0, 0, 5), new Square(10, 10, 5), new Square(28, 10, 5), // обрезается // new Square(1, 1, 5), // пересечение с иключением }; foreach (var figure in figures) figure.Draw(space); space.Draw(); Console.ReadLine(); } }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д