4th of July weekend work
4th of July weekend work

Refactored Strategy class a bit to split decision making into the three main choices
that players face:
    - Which card to discard
    - Which opponent to target when apply the effects of a discarded card
    - Which card to guess when targeting another player with the Guard

While these are the main choices, there's a lot of work to do in order to expose and record, within
the Strategy object, all the relevant data needed to properly make optimal decisions,
but that will be forthcoming.

Split up RandomStrategy class into its component decisions.

Created ExamineDiscardedCardsGuess class which makes a better than random guess by examining
what has been discarded and then making a random guess amongst what remains unseen. Still
not optimal, but better than just randomly guessing.

Created LowestDiscard class which always chooses to discard the lower value card in a player's
hand. Won't lose by discarding the Princess at least.

Amended discard_hand() in the Player class to properly lose/fail the player if they discard
the Princess.

Fixed discard_hand() to draw the burn card if the deck is empty.

Added function to Player to access their discard pile.

Fixed Game.do_turn() and Game.lose() to properly out the current_player if they are knocked out during
their own turn.

Added available_targets() function to Game to return targets that are not under protection.

Added some logic at the end of the script to play several games with AI players and tally the results.

ClifHouck/LoveLetter