Нарисовать фигуры в консоли без их пересечения - 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();
- }
- }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д