Advertisement
Guest User

Untitled

a guest
Sep 22nd, 2019
104
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 2.69 KB | None | 0 0
  1.     /// <summary>
  2.     /// Ищет линию, закрашенную тремя одинаковыми символами
  3.     /// </summary>
  4.     /// <param name="cellNum">Клетка, состоящая в искомой линии</param>
  5.     /// <returns>Массив номеров клеток найденой линии или null</returns>
  6.     private int[] FindLine(int cellNum)
  7.     {
  8.         int row, col;
  9.         // Находим ряд и столбец клетки
  10.         row = cellNum / N;
  11.         col = cellNum - N * row;
  12.        
  13.         int[] line = new int[N];
  14.        
  15.         // Проверка диагоналей
  16.         bool diag = false;
  17.         // Диагональ 00 - 11
  18.         if (row == col)
  19.         {
  20.             diag = true;
  21.             for (int i = 0; i < N; i++)
  22.             {
  23.                 if (_cells[0].State != _cells[N * i + i].State)
  24.                 {
  25.                     diag = false;  
  26.                 }
  27.             }
  28.             if (diag)
  29.             {
  30.                 for (int i = 0; i < N; i++)
  31.                 {
  32.                     line[i] = N * i + i;
  33.                 }
  34.  
  35.                 return line;
  36.             }
  37.         }
  38.         // Диагональ 10 - 01
  39.         if (row + col == N - 1)
  40.         {
  41.             diag = true;
  42.             for (int i = 0; i < N; i++)
  43.             {
  44.                 if (_cells[N-1].State != _cells[N*(N-1)-i*(N-1)].State)
  45.                 {
  46.                     diag = false;  
  47.                 }
  48.             }
  49.             if (diag)
  50.             {
  51.                 for (int i = 0; i < N; i++)
  52.                 {
  53.                     line[i] = N*(N-1)-i*(N-1);
  54.                 }
  55.  
  56.                 return line;
  57.             }
  58.         }
  59.        
  60.         // Проверка горизонтальной линии
  61.         bool hline = true;
  62.         for (int i = 0; i < N; i++)
  63.         {
  64.             if (_cells[N * row].State != _cells[N * row + i].State)
  65.             {
  66.                 hline = false;  
  67.             }
  68.         }
  69.         if (hline)
  70.         {
  71.             for (int i = 0; i < N; i++)
  72.             {
  73.                 line[i] = N * row + i;
  74.             }
  75.  
  76.             return line;
  77.         }
  78.        
  79.         // Проверка вертикальной линии
  80.         bool vline = true;
  81.         for (int i = 0; i < N; i++)
  82.         {
  83.             if (_cells[col].State != _cells[col+i*N].State)
  84.             {
  85.                 vline = false;  
  86.             }
  87.         }
  88.         if (vline)
  89.         {
  90.             for (int i = 0; i < N; i++)
  91.             {
  92.                 line[i] = col+i*N;
  93.             }
  94.  
  95.             return line;
  96.         }
  97.        
  98.         return null;
  99.     }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement