// Note: The only buttons that can be clicked are those that are in the
        // enemy's grid
        private void btn_Click(object sender, RoutedEventArgs e)
        {
            Button btn = sender as Button;

            if (btn == null)
            {
                return;
            }

            Location loc = (Location)btn.Tag;
            Image    img = new Image();

            img.Height = btn.Height;
            img.Width  = btn.Width;

            Image cimg = new Image();

            cimg.Height = btn.Height;
            cimg.Width  = btn.Width;

            SoundPlayer player = new SoundPlayer();


            if (gameRunning)
            {
                // Update model to reflect player's attack
                AttackResult playerAttackResult = ctrl.AttackComputer(loc);

                if (playerAttackResult == AttackResult.Miss)
                {
                    txtFeedback.Text     = "you missed";
                    img.Source           = new BitmapImage(new Uri("Assets/miss.jpg", UriKind.Relative));
                    player.SoundLocation = "Assets/miss.wav";
                }
                else if (playerAttackResult == AttackResult.Hit)
                {
                    txtFeedback.Text     = "Wooh! You hit a ship!!";
                    img.Source           = new BitmapImage(new Uri("Assets/hit.png", UriKind.Relative));
                    player.SoundLocation = "Assets/hit.wav";
                }
                else if (playerAttackResult == AttackResult.Sink)
                {
                    txtFeedback.Text     = "You managed to sink a ship, good job.";
                    img.Source           = new BitmapImage(new Uri("Assets/hit.png", UriKind.Relative));
                    player.SoundLocation = "Assets/sink.wav";
                }

                if (playerAttackResult != AttackResult.repeat) //ignore instead of throwing exception
                {
                    btn.Content = img;
                    player.Load();
                    player.Play();
                }

                if (ctrl.IsGameOver())
                {
                    player.SoundLocation = "Assets/win.wav";
                    player.Load();
                    player.Play();
                    gameRunning = false;
                    EndGame("You");
                }
            }


            if (gameRunning)
            {
                // Determine computer's response
                ComputerAttackResult computerAttackResult = ctrl.AttackPlayer();

                if (computerAttackResult.Result == AttackResult.Miss)
                {
                    cimg.Source = new BitmapImage(new Uri("Assets/miss.jpg", UriKind.Relative));
                }
                else if (computerAttackResult.Result == AttackResult.Hit)
                {
                    cimg.Source = new BitmapImage(new Uri("Assets/hit.png", UriKind.Relative));
                }
                else if (computerAttackResult.Result == AttackResult.Sink)
                {
                    cimg.Source = new BitmapImage(new Uri("Assets/hit.png", UriKind.Relative));
                }

                for (int i = 0; i < playerGridButtons.Count; i++)
                {
                    if ((playerGridButtons[i].Tag as Location).Column == computerAttackResult.Col && (playerGridButtons[i].Tag as Location).Row == computerAttackResult.Row)
                    {
                        playerGridButtons[i].Content = cimg;
                        break;
                    }
                }

                if (ctrl.IsGameOver())
                {
                    player.SoundLocation = "Assets/lose.wav";
                    player.Load();
                    player.Play();
                    gameRunning = false;
                    EndGame("The computer");
                }
            }
        }