Example #1
0
        /// <summary>
        ///		Crea una pieza
        /// </summary>
        private PieceBaseModel CreatePiece(PieceBaseModel.PieceType type, PieceBaseModel.PieceColor color)
        {
            switch (type)
            {
            case PieceBaseModel.PieceType.Pawn:
                return(new PawnModel(color));

            case PieceBaseModel.PieceType.Rook:
                return(new RookModel(color));

            case PieceBaseModel.PieceType.Knight:
                return(new KnightModel(color));

            case PieceBaseModel.PieceType.Bishop:
                return(new BishopModel(color));

            case PieceBaseModel.PieceType.Queen:
                return(new QueenModel(color));

            case PieceBaseModel.PieceType.King:
                return(new KingModel(color));

            default:
                throw new ArgumentException($"Piece type unknown: {type}");
            }
        }
        /// <summary>
        ///		Añade una pieza
        /// </summary>
        public void Add(PieceBaseModel.PieceType piece, PieceBaseModel.PieceColor color, CellModel cell)
        {
            switch (piece)
            {
            case PieceBaseModel.PieceType.Pawn:
                Add(new PawnModel(color, cell));
                break;

            case PieceBaseModel.PieceType.Rook:
                Add(new RookModel(color, cell));
                break;

            case PieceBaseModel.PieceType.Knight:
                Add(new KnightModel(color, cell));
                break;

            case PieceBaseModel.PieceType.Bishop:
                Add(new BishopModel(color, cell));
                break;

            case PieceBaseModel.PieceType.Queen:
                Add(new QueenModel(color, cell));
                break;

            case PieceBaseModel.PieceType.King:
                Add(new KingModel(color, cell));
                break;
            }
        }
Example #3
0
 public ActionMoveModel(PieceBaseModel.PieceType type, PieceBaseModel.PieceColor color,
                        int fromRow, int fromColumn, int toRow, int toColumn) : base(type, color)
 {
     FromRow    = fromRow;
     FromColumn = fromColumn;
     ToRow      = toRow;
     ToColumn   = toColumn;
 }
Example #4
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);
 }
 /// <summary>
 ///		Busca una pieza
 /// </summary>
 private Figure SearchPiece(PieceBaseModel.PieceType type, PieceBaseModel.PieceColor color, CellModel cell)
 {
     // Busca la pieza
     foreach (Figure figure in Cells)
     {
         if (figure.Type == type && figure.Color == color && figure.Row == cell.Row && figure.Column == cell.Column)
         {
             return(figure);
         }
     }
     // Devuelve una pieza vacía
     return(new Figure(-1, -1, color, null, null, null));
 }
Example #6
0
 /// <summary>
 ///		Busca una pieza
 /// </summary>
 private Image SearchPiece(PieceBaseModel.PieceType type, PieceBaseModel.PieceColor color, int row, int column)
 {
     // Busca la pieza
     foreach (FrameworkElement control in udtCanvas.Children)
     {
         if (control is Image image && image.Tag != null && image.Tag is FigureViewModel figure &&
             figure.Type == type && figure.Color == color && figure.Row == row && figure.Column == column)
         {
             return(image);
         }
     }
     // Devuelve una pieza vacía
     return(null);
 }
Example #7
0
        /// <summary>
        ///		Extrae la pieza de la cadena
        /// </summary>
        private PieceBaseModel.PieceType ExtractPiece(ref string content)
        {
            PieceBaseModel.PieceType piece = PieceBaseModel.PieceType.Pawn;
            bool extract = false;

            // Obtiene la pieza
            switch (content[0])
            {
            case 'P':
                piece   = PieceBaseModel.PieceType.Pawn;
                extract = true;
                break;

            case 'N':
                piece   = PieceBaseModel.PieceType.Knight;
                extract = true;
                break;

            case 'B':
                piece   = PieceBaseModel.PieceType.Bishop;
                extract = true;
                break;

            case 'R':
                piece   = PieceBaseModel.PieceType.Rook;
                extract = true;
                break;

            case 'Q':
                piece   = PieceBaseModel.PieceType.Queen;
                extract = true;
                break;

            case 'K':
                piece   = PieceBaseModel.PieceType.King;
                extract = true;
                break;
            }
            // Extrae el contenido de la cadena
            if (extract)
            {
                content = content.Substring(1);
            }
            // Devuelve la pieza
            return(piece);
        }
Example #8
0
        /// <summary>
        ///		Promociona una pieza
        /// </summary>
        public bool Promote(int row, int column, PieceBaseModel.PieceType type)
        {
            bool           canPromote = false;
            PieceBaseModel piece      = this[row, column];

            if (piece != null && piece.Type == PieceBaseModel.PieceType.Pawn && piece.Color == Parameters.GetTurnColor() &&
                type != PieceBaseModel.PieceType.Pawn && type != PieceBaseModel.PieceType.King &&
                ((piece.Color == PieceBaseModel.PieceColor.White && row == 0) ||
                 (piece.Color == PieceBaseModel.PieceColor.Black && row == 7)))
            {
                // Promociona la pieza
                this[row, column] = CreatePiece(type, piece.Color);
                // Indica que se ha promocionado
                canPromote = true;
            }
            // Devuelve el valor que indica si ha podido promocionar
            return(canPromote);
        }
Example #9
0
        /// <summary>
        ///		Busca la pieza de un color que se puede mover a una celda
        /// </summary>
        public (int row, int column, PieceBaseModel piece) SearchMoveTo(PieceBaseModel.PieceType type, PieceBaseModel.PieceColor color,
                                                                        int fromRow, int fromColumn, int toRow, int toColumn)
        {
            List <(int row, int column, PieceBaseModel piece)> pieces = new List <(int row, int column, PieceBaseModel piece)>();

            // Busca las piezas
            for (int row = 0; row < 8; row++)
            {
                for (int column = 0; column < 8; column++)
                {
                    PieceBaseModel piece = this[row, column];

                    if (piece != null && piece.Type == type && piece.Color == color &&
                        piece.CanMoveTo(this, row, column, toRow, toColumn))
                    {
                        pieces.Add((row, column, 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 && (fromRow != -1 || fromColumn != -1))
            {
                foreach ((int row, int column, PieceBaseModel piece)piece in pieces)
                {
                    if ((fromColumn == -1 && piece.row == fromRow) ||
                        (fromRow == -1 && piece.column == fromColumn) ||
                        (piece.row == fromRow && piece.column == fromColumn))
                    {
                        return(piece);
                    }
                }
            }
            // Devuelve la primera pieza localizada
            if (pieces.Count > 0)
            {
                return(pieces[0]);
            }
            else
            {
                return(-1, -1, null);
            }
        }
Example #10
0
 /// <summary>
 ///		Crea un movimiento
 /// </summary>
 private ActionMoveModel CreateMoveAction(PieceBaseModel.PieceType type, PieceBaseModel.PieceColor color, CellModel from, CellModel to)
 {
     return(new ActionMoveModel(type, color, from.Row, from.Column, to.Row, to.Column));
 }
Example #11
0
 public ActionCaptureModel(PieceBaseModel.PieceType type, PieceBaseModel.PieceColor color, int targetRow, int targetColumn) : base(type, color)
 {
     TargetRow    = targetRow;
     TargetColumn = targetColumn;
 }
 /// <summary>
 ///		Crea un movimiento
 /// </summary>
 private void CreateMoveAction(PieceBaseModel.PieceType type, PieceBaseModel.PieceColor color, CellModel from, CellModel to)
 {
     Add(new ActionMoveModel(type, color, from, to));
 }
Example #13
0
 protected ActionBaseModel(PieceBaseModel.PieceType type, PieceBaseModel.PieceColor color)
 {
     Type  = type;
     Color = color;
 }
Example #14
0
 public ActionPromoteModel(PieceBaseModel.PieceType type, PieceBaseModel.PieceColor color,
                           int toRow, int toColumn) : base(type, color)
 {
     ToRow    = toRow;
     ToColumn = toColumn;
 }
Example #15
0
 /// <summary>
 ///		Crea una captura
 /// </summary>
 private ActionCaptureModel CreateCaptureAction(PieceBaseModel.PieceType pieceCaptured, PieceBaseModel.PieceColor colorCaptured, CellModel target)
 {
     return(new ActionCaptureModel(pieceCaptured, colorCaptured, target.Row, target.Column));
 }
Example #16
0
 public FigureViewModel(int row, int column, PieceBaseModel.PieceType type, PieceBaseModel.PieceColor color) : base(row, column, color)
 {
     Type = type;
 }
 /// <summary>
 ///		Añade una pieza
 /// </summary>
 public void Add(PieceBaseModel.PieceType piece, PieceBaseModel.PieceColor color, int row, int column)
 {
     Add(piece, color, new CellModel(row, column));
 }
Example #18
0
 /// <summary>
 ///		Crea un promoción
 /// </summary>
 private ActionPromoteModel CreatePromoteAction(PieceBaseModel.PieceType type, PieceBaseModel.PieceColor color, CellModel target)
 {
     return(new ActionPromoteModel(type, color, target.Row, target.Column));
 }
Example #19
0
 /// <summary>
 ///		Asigna una pieza a una posición
 /// </summary>
 private void Create(PieceBaseModel.PieceType type, PieceBaseModel.PieceColor color, int row, int column)
 {
     this[row, column] = CreatePiece(type, color);
 }