예제 #1
0
        /// <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);
        }
예제 #2
0
 /// <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);
 }
예제 #3
0
        /// <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);
            }
        }