Esempio n. 1
0
        /// <summary>
        /// Проверка всех выиграшных возможностей
        /// </summary>
        /// <param name="iY">Индекс строки</param>
        /// <param name="iX">Индекс столбца</param>
        /// <param name="mark">Отметка</param>
        /// <param name="ltd">Линия для отрисовки</param>
        /// <returns>Возвращает символ, для отрисовки линии</returns>
        char CheckObliqueLine(int iY, int iX, Mark mark, ref LineToDraw ltd)
        {
            ltd.SetStart(iY, iX);
            ltd.SetEnd(iY, iX);
            int forward = 1, backslash = 1;

            for (int i = 1; i <= lineToWin; i++)
            {
                if (iX + i < cells.GetLength(1) && iY + i < cells.GetLength(0))
                {
                    if (cells[iY + i, iX + i] == mark)
                    {
                        forward++;
                        ltd.SetEnd(iY + i, iX + i);
                        continue;
                    }
                }
                break;
            }
            for (int i = 1; i <= lineToWin; i++)
            {
                if (iX - i >= 0 && iY - i >= 0)
                {
                    if (cells[iY - i, iX - i] == mark)
                    {
                        forward++;
                        ltd.SetStart(iY - i, iX - i);
                        continue;
                    }
                }
                break;
            }
            if (forward >= lineToWin)
            {
                return('\\');
            }
            for (int j = 1; j <= lineToWin; j++)
            {
                if (iY - j >= 0 && iX + j < cells.GetLength(1))
                {
                    if (cells[iY - j, iX + j] == mark)
                    {
                        backslash++;
                        ltd.SetEnd(iY - j, iX + j);
                        continue;
                    }
                }
                break;
            }
            for (int j = 1; j <= lineToWin; j++)
            {
                if (iY + j < cells.GetLength(0) && iX - j >= 0)
                {
                    if (cells[iY + j, iX - j] == mark)
                    {
                        backslash++;
                        ltd.SetStart(iY + j, iX - j);
                        continue;
                    }
                }
                break;
            }
            if (backslash >= lineToWin)
            {
                return('/');
            }
            return(' ');
        }
Esempio n. 2
0
        /// <summary>
        /// Проверка всех выиграшных возможностей
        /// </summary>
        /// <param name="iY">Индекс строки</param>
        /// <param name="iX">Индекс столбца</param>
        /// <param name="mark">Отметка</param>
        /// <param name="ltd">Линия для отрисовки</param>
        /// <returns>Возвращает символ, для отрисовки линии</returns>
        char CheckStaightLine(int iY, int iX, Mark mark, out LineToDraw ltd)
        {
            ltd = new LineToDraw(iY, iX, iY, iX);
            // Предполагается что текущий ход уже имеет 1 заполненую ячейку
            int totalX = 1, totalY = 1;

            for (int i = 1; i <= lineToWin; i++)
            {
                if (iX + i < cells.GetLength(1))
                {
                    if (cells[iY, iX + i] == mark)
                    {
                        totalX++;
                        ltd.SetEnd(iY, iX + i);
                        continue;
                    }
                }
                break;
            }
            for (int i = 1; i <= lineToWin; i++)
            {
                if (iX - i >= 0)
                {
                    if (cells[iY, iX - i] == mark)
                    {
                        totalX++;
                        ltd.SetStart(iY, iX - i);
                        continue;
                    }
                }
                break;
            }
            if (totalX >= lineToWin)
            {
                return('-');
            }
            for (int j = 1; j <= lineToWin; j++)
            {
                if (iY + j < cells.GetLength(0))
                {
                    if (cells[iY + j, iX] == mark)
                    {
                        totalY++;
                        ltd.SetEnd(iY + j, iX);
                        continue;
                    }
                }
                break;
            }
            for (int j = 1; j <= lineToWin; j++)
            {
                if (iY - j >= 0)
                {
                    if (cells[iY - j, iX] == mark)
                    {
                        totalY++;
                        ltd.SetStart(iY - j, iX);
                        continue;
                    }
                }
                break;
            }
            if (totalY >= lineToWin)
            {
                return('|');
            }
            return(' ');
        }