private void TidesOfMadnessForm_Load(object sender, EventArgs e)
        {
            driver = new GameDriver();
            driver.InitializeGame();
            UpdateGameLog(driver.GetGameLog());
            UpdateScoreDisplays();

            pbxCardImage.SizeMode = PictureBoxSizeMode.StretchImage;


            lbxHumanHand.DataSource    = driver.GetHumanPlayer().GetCardsInHand();
            lbxHumanHand.DisplayMember = "CardNameDisplay";

            lbxHumanInPlay.DataSource    = driver.GetHumanPlayer().GetCardsInPlay();
            lbxHumanInPlay.DisplayMember = "CardNameDisplay";

            lbxOppInPlay.DataSource    = driver.GetAIPlayer().GetCardsInPlay();
            lbxOppInPlay.DisplayMember = "CardNameDisplay";

            lbxDiscardPile.DataSource    = driver.GameState.DiscardPile.CardsInCollection;
            lbxDiscardPile.DisplayMember = "CardNameDisplay";

            pbxCardImage.ImageLocation = SetArtFromListBox(lbxHumanHand, 0);

            UpdatePlayerInstructions(driver.GetCurrentGameState(), lblPlayerInstructions);
            UpdateUISettings(driver.GetCurrentGameState());
        }
        private void btnSubmit_Click(object sender, EventArgs e)
        {
            switch (driver.GetCurrentGameState())
            {
            case GameStates.Setup:
            {
                UpdateScoreDisplays();
                break;
            }

            case GameStates.PlayCards:
            case GameStates.ChooseCardToReplay:
            case GameStates.ChooseCardToDiscard:
            {
                Card selectedCard = (Card)lbxHumanHand.SelectedItem;

                if (selectedCard != null)
                {
                    PlayerInput input = new PlayerInput();
                    input.SelectedCards.Add(selectedCard);
                    driver.ActOnPlayerInput(input);
                    UpdateUISettings(driver.GetCurrentGameState());
                    UpdateGameLog(driver.GetGameLog());
                }
                break;
            }

            case GameStates.ResolveMadnessBonus:
            {
                PlayerInput          input        = new PlayerInput();
                ResolveMadnessOption chosenOption = (ResolveMadnessOption)cbxPlayerChoice.SelectedItem;
                input.SelectedBonus = chosenOption.Bonus;
                driver.ActOnPlayerInput(input);
                UpdateUISettings(driver.GetCurrentGameState());
                UpdateGameLog(driver.GetGameLog());
                break;
            }

            case GameStates.SetDreamlands:
            {
                PlayerInput input = new PlayerInput();
                input.SelectedSuit = (SuitOption)cbxPlayerChoice.SelectedItem;
                driver.ActOnPlayerInput(input);
                UpdateUISettings(driver.GetCurrentGameState());
                UpdateGameLog(driver.GetGameLog());
                break;
            }

            case GameStates.Scoring:
            {
                break;
            }

            case GameStates.PickUpCards:
            {
                BindingList <Card> selectedCards = new BindingList <Card>();

                foreach (Card card in lbxHumanInPlay.SelectedItems)
                {
                    selectedCards.Add(card);
                }

                if (selectedCards.Count == 5)
                {
                    PlayerInput input = new PlayerInput();
                    input.SelectedCards = selectedCards;
                    driver.ActOnPlayerInput(input);
                    UpdateUISettings(driver.GetCurrentGameState());
                    UpdateGameLog(driver.GetGameLog());
                }
                break;
            }

            default:
            {
                break;
            }
            }
            UpdatePlayerInstructions(driver.GetCurrentGameState(), lblPlayerInstructions);
            UpdateScoreDisplays();
        }