/// <summary> /// Comprueba si puede capturar una pieza /// </summary> internal bool CanCapture(PieceBaseModel piece, CellModel cell) { PieceBaseModel target = Pieces.GetPiece(cell); return(target != null && target.Color != piece.Color); }
/// <summary> /// Obtiene la pieza de un color que está en una fila / columna /// </summary> private PieceBaseModel GetPiece(PieceBaseModel.PieceType type, PieceBaseModel.PieceColor color, CellModel cell) { // Busca la pieza foreach (PieceBaseModel piece in Pieces) { if (piece.Type == type && piece.Color == color && piece.Cell.Row == cell.Row && piece.Cell.Column == cell.Column) { return(piece); } } // Si ha llegado hasta aquí es porque no ha encontrado nada return(null); }
/// <summary> /// Busca la pieza de un color que se pueden mover a una celda /// </summary> internal PieceBaseModel SearchMoveTo(MovementFigureModel movement, CellModel target, CellModel origin) { List <PieceBaseModel> pieces = new List <PieceBaseModel>(); // Busca las piezas foreach (PieceBaseModel piece in Pieces) { if (piece.Type == movement.OriginPiece && piece.Color == movement.Color && piece.CanMoveTo(this, target, movement.Type)) { pieces.Add(piece); } } // Si se le ha pasado una fila / columna para ajustarlo, obtiene la pieza que estaba inicialmente en esa posición if (pieces.Count > 1) { if (origin != null && (origin.Row != -1 || origin.Column != -1)) { foreach (PieceBaseModel piece in pieces) { if ((origin.Column == -1 && piece.Cell.Row == origin.Row) || (origin.Row == -1 && piece.Cell.Column == origin.Column) || (piece.Cell.Row == origin.Row && piece.Cell.Column == origin.Column)) { return(piece); } } } } // Devuelve la primera pieza localizada if (pieces.Count > 0) { return(pieces[0]); } else { return(null); } }