예제 #1
0
 public bool Fire(int x, int y)      //Обстрел
 {
     if (_fire[y, x] == 0)           //Если по этому полю еще не стреляли
     {
         if (_opponent.Defend(x, y)) //Если оно не пусто
         {
             _fire[y, x] = 2;        //Отмечаем в матрице обстрела что тут корабль был
             int  size = 0, sx = 0, sy = 0;
             bool vert = false;
             if (_opponent.Kill(x, y, ref size, ref sx, ref sy, ref vert)) //Если он был убит то обводим его со всех сторон точками
             {
                 for (int i = 0; i < size; i++)
                 {
                     if (vert)
                     {
                         if (sx > 0)
                         {
                             _fire[sy + i, sx - 1] = 1;
                         }
                         if (sx < 9)
                         {
                             _fire[sy + i, sx + 1] = 1;
                         }
                     }
                     else
                     {
                         if (sy > 0)
                         {
                             _fire[sy - 1, sx + i] = 1;
                         }
                         if (sy < 9)
                         {
                             _fire[sy + 1, sx + i] = 1;
                         }
                     }
                 }
                 if (!vert)
                 {
                     if (sx > 0)
                     {
                         if (sy > 0)
                         {
                             _fire[sy - 1, sx - 1] = 1;
                         }
                         _fire[sy, sx - 1] = 1;
                         if (sy < 9)
                         {
                             _fire[sy + 1, sx - 1] = 1;
                         }
                     }
                     if (sx + size < 9)
                     {
                         if (sy > 0)
                         {
                             _fire[sy - 1, sx + size] = 1;
                         }
                         _fire[sy, sx + size] = 1;
                         if (sy < 9)
                         {
                             _fire[sy + 1, sx + size] = 1;
                         }
                     }
                 }
                 else
                 {
                     if (sy > 0)
                     {
                         if (sx > 0)
                         {
                             _fire[sy - 1, sx - 1] = 1;
                         }
                         _fire[sy - 1, sx] = 1;
                         if (sx < 9)
                         {
                             _fire[sy - 1, sx + 1] = 1;
                         }
                     }
                     if (sy + size < 9)
                     {
                         if (sx > 0)
                         {
                             _fire[sy + size, sx - 1] = 1;
                         }
                         _fire[sy + size, sx] = 1;
                         if (sx < 9)
                         {
                             _fire[sy + size, sx + 1] = 1;
                         }
                     }
                 }
             }
             return(true);
         }
         else
         {
             _fire[y, x] = 1;
         }
         return(true);
     }
     return(false);
 }