コード例 #1
0
        /// <summary>
        /// Зачеркивание выиграшной комбинации
        /// </summary>
        /// <param name="ltd">Координаты комбинации</param>
        /// <param name="line">Ориентация линии</param>
        public void DrawLine(LineToDraw ltd, char line)
        {
            int x1 = cellSize * ltd.StartX + mathLineX() + cellSize / 2;
            int y1 = cellSize * ltd.StartY + mathLineY() + cellSize / 2;
            int x2 = cellSize * ltd.EndX + mathLineX() + cellSize / 2;
            int y2 = cellSize * ltd.EndY + mathLineY() + cellSize / 2;

            switch (line)
            {
            case '|':
                y1 -= cellSize / 2;
                y2 += cellSize / 2;
                break;

            case '-':
                x1 -= cellSize / 2;
                x2 += cellSize / 2;
                break;

            case '\\':
                x1 -= cellSize / 2;
                y1 -= cellSize / 2;
                x2 += cellSize / 2;
                y2 += cellSize / 2;
                break;

            case '/':
                x1 -= cellSize / 2;
                y1 += cellSize / 2;
                x2 += cellSize / 2;
                y2 -= cellSize / 2;
                break;
            }
            gField.DrawLine(linePen, x1, y1, x2, y2);
        }
コード例 #2
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(' ');
        }
コード例 #3
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(' ');
        }