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(); }