Advertisement
Guest User

Untitled

a guest
Feb 17th, 2019
80
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 2.86 KB | None | 0 0
  1. using System;
  2.  
  3. class Program
  4. {
  5.     static void Main(string[] args)
  6.     {
  7.         Console.WriteLine("Введите размер калейдоскопа (половина стороны)");
  8.         int kaleidoscopeSize = Convert.ToInt32(Console.ReadLine());
  9.         int[,] kaleidoscope = MakeKaleidoscope(kaleidoscopeSize);
  10.         PrintKaleidoscope(kaleidoscope);
  11.     }
  12.  
  13.     /**
  14.      * Возвращает случайный код цвета из Console.ConsoleColor
  15.      */
  16.     static int GetRandomColorCode()
  17.     {
  18.         const int COLORS_COUNT = 16;
  19.         Random random = new Random();
  20.         return random.Next(COLORS_COUNT);
  21.     }
  22.  
  23.     /**
  24.      * Метод генерирует случайную матрицу, которая симметрична по горизонтали, вертикали и диагонали
  25.      */
  26.     static int[,] MakeKaleidoscope(int halfSize)
  27.     {
  28.         int size = halfSize + halfSize;
  29.         int[,] kaleidoscope = new int[size, size];
  30.  
  31.         for (int imain = 0; imain < halfSize; imain++)
  32.         {
  33.             int randomColorCode = GetRandomColorCode();
  34.             SetValueForSymmetricalPoints(kaleidoscope, imain, imain, randomColorCode);
  35.  
  36.             for (int i = imain + 1; i < halfSize; i++)
  37.             {
  38.                 randomColorCode = GetRandomColorCode();
  39.                 SetValueForSymmetricalPoints(kaleidoscope, i, imain, randomColorCode);
  40.                 SetValueForSymmetricalPoints(kaleidoscope, imain, i, randomColorCode);
  41.             }
  42.         }
  43.  
  44.         return kaleidoscope;
  45.     }
  46.  
  47.     /**
  48.      * Выводит калейдоскоп в консоль в виде цветов
  49.      */
  50.     static void PrintKaleidoscope(int[,] kaleidoscope)
  51.     {
  52.         int rowCount = kaleidoscope.GetLength(0);
  53.         int columnCount = kaleidoscope.GetLength(1);
  54.  
  55.         for (int i = 0; i < rowCount; i++)
  56.         {
  57.             for (int j = 0; j < columnCount; j++)
  58.             {
  59.                 Console.BackgroundColor = (ConsoleColor)kaleidoscope[i, j];
  60.                 Console.Write(" ");
  61.             }
  62.             Console.WriteLine();
  63.         }
  64.     }
  65.  
  66.     /**
  67.      * Получая на вход координаты из левой верхней части матрицы, метод устанавливает значение для всех симметричных
  68.      * точек    
  69.      */
  70.     static void SetValueForSymmetricalPoints(int[,] arr, int i, int j, int value)
  71.     {
  72.         int rowCount = arr.GetLength(0);
  73.         int columnCount = arr.GetLength(1);
  74.  
  75.         // Лево верх
  76.         arr[i, j] = value;
  77.         // Право верх
  78.         arr[i, columnCount - j - 1] = value;
  79.         // Лево низ
  80.         arr[rowCount - i - 1, j] = value;
  81.         // Право низ
  82.         arr[rowCount - i - 1, columnCount - j - 1] = value;
  83.     }
  84. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement