Exemplo n.º 1
0
        private void OnTileClick(object sender, RoutedEventArgs e)
        {
            Button btn = (Button)sender;

            if (btn.Opacity < 1)
            {
                return;
            }

            int       row   = Grid.GetRow(btn);
            int       col   = Grid.GetColumn(btn);
            GamePiece piece = _game._gameBoard[row, col];

            // Selecting a piece
            if (_selectedPiece == null)
            {
                if (piece == null)
                {
                    return;
                }
                if (piece.Owner.Name != _game._currentPlayer.Name)
                {
                    return;
                }
                if (piece.IsMovable)
                {
                    _selectedPiece = piece;
                }
            }
            // Making a move (or reselectinga piece)
            else
            {
                if (piece != null && piece.Owner.Name == _game._currentPlayer.Name)
                {
                    _selectedPiece = piece;
                }
                else
                {
                    // Math.Abs gives the absolute value for a number (always positive)
                    int deltaX    = col - _selectedPiece.Position.Column;
                    int deltaY    = row - _selectedPiece.Position.Row;
                    int distanceX = Math.Abs(deltaX);
                    int distanceY = Math.Abs(deltaY);

                    if (distanceX > 1 || distanceY > 1 || distanceX + distanceY > 1)
                    {
                        return;                                     //Can't move more than 1 spot at a time, or diagonally
                    }
                    Direction direction;                            //Possible movement directions
                    if (deltaX > 0)
                    {
                        direction = Direction.Right;
                    }
                    else if (deltaX < 0)
                    {
                        direction = Direction.Left;
                    }
                    else if (deltaY > 0)
                    {
                        direction = Direction.Down;
                    }
                    else
                    {
                        direction = Direction.Up;
                    }

                    if (!_game.MakeMove(_selectedPiece, direction))
                    {
                        return;
                    }

                    _selectedPiece = null;
                }
            }
            DrawBoard();
        }