Exemplo n.º 1
0
        /// <summary>
        /// Controlador para el evento de cambio de estado del juego
        /// </summary>
        private void Game_StateChanged(object sender, EventArgs e)
        {
            switch (_game.State)
            {
            case GameState.PendingForWhiteMove:
            case GameState.PendingForBlackMove:
                // Si el juego está pendiente de inciar movimiento habilitamos las celdas
                // seleccionables (las que tienen piezas del color del jugador)
                IEnumerable <Square> selectionableSquares = _game.GetSquaresThatCanBeSelected();
                foreach (SquareControl square in _squares)
                {
                    square.Enabled = selectionableSquares.Contains(square.BoardSquare);
                    square.FlatAppearance.BorderSize = 0;
                }
                break;

            case GameState.WhitePlayerMoving:
            case GameState.BlackPlayerMoving:
                // Si el juego está pendiente de finalizar el movimiento habilitamos:
                // - las celdas posible destino del movimiento
                // - la celda inicio del movimiento para dar la posibilidad de deseleccionarla
                // También establecemos un borde en las celdas destino para marcárselas al usuario
                IEnumerable <Square> destinationSquares = _game.PosibleDestinationSquares();
                foreach (SquareControl square in _squares)
                {
                    square.Enabled = destinationSquares.Contains(square.BoardSquare) ||
                                     square.BoardSquare == _game.SelectedSquare;
                    if (square.Enabled)
                    {
                        square.FlatAppearance.BorderSize = 1;
                    }
                }
                break;

            case GameState.WhitePlayerWin:
            case GameState.BlackPlayerWin:
                // Si ha finalizado el juego deshabilitamos todas las celdas
                foreach (SquareControl square in _squares)
                {
                    square.Enabled = false;
                    square.FlatAppearance.BorderSize = 0;
                }
                // Mostramos el Label con el ganador
                lblWin.Text = string.Format("{0} Ganan",
                                            _game.State == GameState.WhitePlayerWin ? "Blancas" : "Negras");
                lblWin.Visible = true;
                break;
            }
        }