private void PrivateWhoWin() { IFigureInterface king = null; king = findKing("black"); if (king == null) { checkmate = "check and mate Black"; return; } listCheckBlack = cheekKing("black"); if (listCheckBlack.Count != 0) { checkmate = "check Black"; return; } // ListCoordinatesFigures("black") king = findKing("white"); if (king == null) { checkmate = "check and mate White"; return; } listCheckWhite = cheekKing("white"); if (listCheckWhite.Count != 0) { checkmate = "check White"; return; } checkmate = ""; }
/* * массив заполняется координатами фигур, * он передается в функций checkMove*, там происходит проверка может ли фигура в новой позиции защитить короля(королю уйти от атаки) */ private List <Position> cheekKing(string color)// проверка короля, возвращает вектор с кординатами врагов, если они ставят шах и не возвращает ни чего, если король не под шахом { IFigureInterface king = null; Position kingPosition; king = findKing(color); if (king == null) { return(null); } kingPosition = king.GetPosition(); List <Position> list = new List <Position>(); if (color == "white") { list = ListCoordinatesFigures("black"); } else { list = ListCoordinatesFigures("white"); } checkBlack = 0; checkWhite = 0; List <Position> listMoves = new List <Position>(); for (int i = 0; i < list.Count; i++) { List <Position> buf = returnFigure(list[i]).PossibleMoves(board, cell); for (int j = 0; j < buf.Count; j++) { Position bufPosition = buf[j]; if (kingPosition.x == bufPosition.x && kingPosition.y == bufPosition.y) { if (color == "white") { checkWhite += 1; } if (color == "black") { checkBlack += 1; } listMoves.Add(list[i]);//изменить break; } } } return(listMoves); }
protected IFigureInterface[,] getBoard() { IFigureInterface[,] matrix = new IFigureInterface[cell, cell]; for (int i = 0; i < cell; i++) { for (int j = 0; j < cell; j++) { if (board[i, j] != null) { matrix[i, j] = board[i, j].DeepCopy(); } else { matrix[i, j] = null; } } } return(matrix); }