/// <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(' '); }
/// <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(' '); }