//displays discard cards
 public void DisplayDiscardCards()
 {
     if (discardDisplayList.Count() > 0)
     {
         CardImageControl startingCardControl = new CardImageControl();
         flpDiscardPile.Controls.Add(startingCardControl);
     }
 }
        //displays trump card
        public void DisplayTrumpCards()
        {
            flpTrumpCard.Controls.Clear();
            trumpCardDisplayList.Clear();

            for (int i = 0; i < 1; i++)
            {
                trumpCardDisplayList.Add(myDeck.getTrumpCard());
            }
            foreach (Card card in trumpCardDisplayList)
            {
                CardImageControl myCardControl = new CardImageControl();
                myCardControl.Card = card;
                flpTrumpCard.Controls.Add(myCardControl);
            }
        }
        //displays river cards
        public void DisplayRiverCards()
        {
            //River Display Cards

            flpRiver.Controls.Clear();
            RiverDisplayList.Clear();

            for (int i = 0; i < myRiver.length(); i++)
            {
                RiverDisplayList.Add(myRiver.GetCard(i));
            }
            foreach (Card card in RiverDisplayList)
            {
                CardImageControl myCardControl = new CardImageControl();
                myCardControl.Card = card;
                flpRiver.Controls.Add(myCardControl);
            }
        }
        //resets game
        public void ResetGame()
        {
            lblHumanAttacking.Visible    = true;
            lblComputerAttacking.Visible = false;
            lblHumanPlayer.Text          = myPlayerOne.getName().ToString();
            lblComputerPlayer.Text       = myPlayerTwo.getName().ToString();
            flpDeck.Controls.Clear();
            flpComputerHand.Controls.Clear();
            flpHumanHand.Controls.Clear();
            flpRiver.Controls.Clear();
            flpTrumpCard.Controls.Clear();
            flpDiscardPile.Controls.Clear();
            CardImageControl startingCardControl = new CardImageControl();

            flpDeck.Controls.Add(startingCardControl);
            myDeck               = new GameDeck(deckSize);
            myRiver              = new GameRiver();
            myHandOne            = new PlayerHand();
            myHandTwo            = new PlayerHand();
            myPlayerOne          = new Player("PlayerOne", myHandOne, true, false);
            myPlayerTwo          = new PlayerAI("PlayerTwo", myHandTwo, false, true);
            DeckDisplayList      = new CardList();
            HandOneDisplayList   = new CardList();
            HandTwoDisplayList   = new CardList();
            PlayerOneDisplayList = new CardList();
            PlayerTwoDisplayList = new CardList();
            RiverDisplayList     = new CardList();
            trumpCardDisplayList = new CardList();
            discardDisplayList   = new CardList();
            myDeck.Shuffle(deckSize);

            txtDeckCardsRemaining.Text   = myDeck.getCardsRemaining().ToString();
            txtRiverCardsRemaning.Text   = myRiver.getCardsRemaining().ToString();
            txtDicardCardsRemaining.Text = discardDisplayList.Count().ToString();
            txtRoundNumber.Text          = roundNumber.ToString();

            btnPickUp.Enabled      = false;
            btnCeaseAttack.Enabled = true;

            roundNumber = 0;
            GameLog.Log("\nNEW GAME");
            GameLog.Log("\n PlayerOne Win/Loss Ratio " + playerOneWins.ToString() + "/" + playerOneLosses.ToString());
            GameLog.Log("\n PlayerTwo Win/Loss Ratio " + playerTwoWins.ToString() + "/" + playerTwoLosses.ToString() + "\n");
        }
        //displays player one cards
        public void DisplayPlayerOneCards()
        {
            //PlayerOne Display Cards

            flpHumanHand.Controls.Clear();
            PlayerOneDisplayList.Clear();

            for (int i = 0; i < myPlayerOne.getHand().length(); i++)
            {
                PlayerOneDisplayList.Add(myPlayerOne.getHand().GetCard(i));
            }
            foreach (Card card in PlayerOneDisplayList)
            {
                CardImageControl myCardControl = new CardImageControl();
                myCardControl.Card = card;
                flpHumanHand.Controls.Add(myCardControl);

                //stores a card click event method for each card
                myCardControl.CardClicked += new EventHandler(Card_Click);
            }
        }
        //displays player two cards
        public void DisplayPlayerTwoCards()
        {
            //PlayerTwo Display Cards

            flpComputerHand.Controls.Clear();
            PlayerTwoDisplayList.Clear();

            for (int i = 0; i < myPlayerTwo.getHand().length(); i++)
            {
                PlayerTwoDisplayList.Add(myPlayerTwo.getHand().GetCard(i));
            }
            foreach (Card card in PlayerTwoDisplayList)
            {
                //CardImageControl myCardControl = new CardImageControl();
                //myCardControl.Card = card;
                //flpComputerHand.Controls.Add(myCardControl);

                //myCardControl.CardClicked += new EventHandler(Card_Click);

                CardImageControl startingCardControl = new CardImageControl();
                flpComputerHand.Controls.Add(startingCardControl);
            }
        }
        //on card click will raise event in card image control class
        //clicked card will go through player attack/defend phase method
        private void Card_Click(object sender, EventArgs e)
        {
            CardImageControl clickedCardControl = new CardImageControl();

            clickedCardControl = (CardImageControl)sender;

            //if (myPlayerTwo.getIsDefending() == false)
            //{
            //    myPlayerOne.setIsDefending(true);
            //}
            //else if (myPlayerTwo.getIsDefending() == true)
            //{
            //    myPlayerOne.setIsDefending(false);
            //}

            //checks to see if computer is defending if so human player attack phas starts and computer
            //defend phase begins
            if (myPlayerTwo.getIsDefending() == true)
            {
                myPlayerOne.AttackingPhase(myRiver, (clickedCardControl.Card));

                myPlayerTwo.DefendingPhase(myRiver, myDeck.getTrumpCard());


                //checks to see if computer is defending if not will log round in output file
                //will reset round and have human start defending
                if (myPlayerTwo.getIsDefending() == false)
                {
                    roundNumber += 1;

                    GameLog.LogRound(GameLog, roundNumber, myPlayerOne, myPlayerTwo, myRiver);


                    for (int i = 0; i < myRiver.length(); i++)
                    {
                        myHandTwo.AddCardToHand(myRiver.GetCard(i));
                    }
                    myRiver.ClearRiver();
                    lblComputerAttacking.Visible = true;
                    lblHumanAttacking.Visible    = false;
                    try
                    {
                        myPlayerOne.RefillHand(myDeck);
                        myPlayerTwo.RefillHand(myDeck);
                    }
                    catch (Exception)
                    {
                    }

                    btnPickUp.Enabled      = true;
                    btnCeaseAttack.Enabled = false;

                    myPlayerTwo.AttackingPhase(myRiver);
                }
            }

            //human is defending, from computer attacks
            else
            {
                myPlayerOne.DefendingPhase(myRiver, myDeck.getTrumpCard(), (clickedCardControl.Card));
                myPlayerTwo.AttackingPhase(myRiver);

                //if human no longer defending, round over and reset, computer is now defending
                if (myPlayerTwo.getIsDefending() == true)
                {
                    roundNumber += 1;

                    GameLog.LogRound(GameLog, roundNumber, myPlayerOne, myPlayerTwo, myRiver);

                    for (int i = 0; i < myRiver.length(); i++)
                    {
                        discardDisplayList.Add(myRiver.GetCard(i));
                    }
                    myRiver.ClearRiver();
                    lblComputerAttacking.Visible = false;
                    lblHumanAttacking.Visible    = true;
                    try
                    {
                        myPlayerOne.RefillHand(myDeck);
                        myPlayerTwo.RefillHand(myDeck);
                    }
                    catch (Exception)
                    {
                    }
                    btnPickUp.Enabled      = false;
                    btnCeaseAttack.Enabled = true;
                }
            }



            DisplayAllCardLists();

            //logs who won the game and win/loss ratios
            if (myPlayerOne.getHand().length() == 0)
            {
                playerOneWins   += 1;
                playerTwoLosses += 1;
                MessageBox.Show("GAME OVER: PLAYER ONE HAS WON");
                GameLog.Log("\n*****GAME OVER: PLAYER ONE HAS WON***** \n");
                GameLog.Log("\n PlayerOne Win/Loss Ratio " + playerOneWins.ToString() + "/" + playerOneLosses.ToString());
                GameLog.Log("\n PlayerTwo Win/Loss Ratio " + playerTwoWins.ToString() + "/" + playerTwoLosses.ToString() + "\n");
                ResetGame();
            }

            if (myPlayerTwo.getHand().length() == 0)
            {
                playerTwoWins   += 1;
                playerOneLosses += 1;
                MessageBox.Show("GAME OVER: PLAYER TWO HAS WON");
                GameLog.Log("\n*****GAME OVER: PLAYER TWO HAS WON***** \n");
                GameLog.Log("\n PlayerOne Win/Loss Ratio " + playerOneWins.ToString() + "/" + playerOneLosses.ToString());
                GameLog.Log("\n PlayerTwo Win/Loss Ratio " + playerTwoWins.ToString() + "/" + playerTwoLosses.ToString() + "\n");
                ResetGame();
            }
        }