Нарисовать фигуры в консоли без их пересечения - C#

Узнай цену своей работы

Формулировка задачи:

Отображать новые фигуры(допустим квадрат) в области консоли ограниченного рамками размера(30х20) так, чтобы новые фигуры не пересекались с уже отображенными. Пересечение вызывает исключение. Вот что у меня есть. Собственно как сделать пересечения и прочее не знаю...
Листинг программы
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.Threading.Tasks;
  6. namespace Figure
  7. {
  8. class Figure
  9. {
  10. int count;
  11. int num;
  12. public Figure()
  13. {
  14. count = 0;
  15. num = 25;
  16. }
  17. public void Init()
  18. {
  19. string[] mas = new string[25];
  20. for (int i = 0; i < mas.Length; i++)
  21. {
  22. mas[i] = "*";
  23. }
  24. }
  25. public void View(string[] mas)
  26. {
  27. for (int i = 0; i < mas.Length; i++)
  28. {
  29. if (count % 5 == 0)
  30. {
  31. Console.Write("\n" + mas[i] + "\t");
  32. count++;
  33. }
  34. else
  35. {
  36. Console.Write(mas[i] + "\t");
  37. count++;
  38. }
  39. }
  40. }
  41. }
  42. class Program
  43. {
  44. static void Main(string[] args)
  45. {
  46. }
  47. }
  48. }

Решение задачи: «Нарисовать фигуры в консоли без их пересечения»

textual
Листинг программы
  1. class Space
  2. {
  3.     int[,] buffer; // Сюда рисуем и определяем пересечения
  4.  
  5.     public Space()
  6.     {
  7.         Clear();
  8.     }
  9.  
  10.     public void Clear()
  11.     {
  12.         buffer = new int[20, 30];
  13.     }
  14.  
  15.     public void AddPoint(Figure f, int x, int y)
  16.     {
  17.         if (x < 0 || y < 0 || x >= buffer.GetLength(1) || y >= buffer.GetLength(0))
  18.             return;
  19.  
  20.         int h = f.GetHashCode(); // Уникальное значение для каждой фигуры
  21.         if (buffer[y, x] != h && buffer[y, x] != 0)
  22.             throw new Exception("Пересечение !");
  23.  
  24.         buffer[y, x] = h;
  25.     }
  26.  
  27.     public void Draw()
  28.     {
  29.         Console.Clear();
  30.         Console.SetCursorPosition(0, 0);
  31.         for (int r = 0; r < buffer.GetLength(0); r++)
  32.         {
  33.             for (int c = 0; c < buffer.GetLength(1); c++)
  34.             {
  35.                 Console.Write(buffer[r, c] != 0 ? '*' : ' ');
  36.             }
  37.             Console.WriteLine();
  38.         }
  39.     }
  40. }
  41.  
  42. abstract class Figure
  43. {
  44.     public readonly int Left; // Координата X
  45.     public readonly int Top; // Координата Y
  46.  
  47.     public Figure(int Left, int Top)
  48.     {
  49.         this.Top = Top;
  50.         this.Left = Left;
  51.     }
  52.  
  53.     public abstract void Draw(Space Space);
  54. }
  55.  
  56. class Square : Figure
  57. {
  58.     public readonly int Width; // Ширина
  59.  
  60.     public Square(int Left, int Top, int Width)
  61.         : base(Left, Top)
  62.     {
  63.         this.Width = Width;
  64.     }
  65.  
  66.     public override void Draw(Space Space)
  67.     {
  68.         for (int y = 0; y < Width; y++)
  69.         {
  70.             for (int x = 0; x < Width; x++)
  71.             {
  72.                 Space.AddPoint(this, Left + x, Top + y);
  73.             }
  74.         }
  75.     }
  76. }
  77.  
  78. public static class Program
  79. {
  80.     public static void Main()
  81.     {
  82.         Space space = new Space();
  83.         Figure[] figures = {
  84.             new Square(0, 0, 5),
  85.             new Square(10, 10, 5),
  86.             new Square(28, 10, 5), // обрезается
  87.             // new Square(1, 1, 5), // пересечение с иключением
  88.         };
  89.  
  90.         foreach (var figure in figures)
  91.             figure.Draw(space);
  92.         space.Draw();
  93.  
  94.         Console.ReadLine();
  95.     }
  96. }

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

14   голосов , оценка 3.929 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут