1. Write a class called "Card" with the following traits: it holds two private variables, a suit and a value (ace is high). It has public functions that randomly generate and modify the suit, value and print out the suit/value to the screen. Write a suitable main function to test that it is working properly.
2. Write a class called "Deck" with the following traits: it holds an array that keeps track of all of the cards in the deck, it has functions like that shuffles the deck (randomly arranges the array with a list of cards), reports how many cards are currently in the deck, allows a card to be "drawn" from the deck (gives the next card in the array and marks it as used; this will return a value that is of type Card). Write a suitable main function to test if this is working properly.
3. Write a class called "Player" with the following traits: it holds an array of five "Cards" (from above), a player name, current points/money. It should have functions that will set and report the player name, set the starting balance of points, add/subtract points as necessary, compare two cards to see if they are the same, "draw" five random cards from the deck and store the draw into the array (making sure that no duplicates exist), print out the hand to the screen, ask the user to discard a specific number of cards (and select them) and replace the discarded cards with new ones. Write a suitable main function to test that it is working properly.
This solution provides a detailed discussion of the given programming languages problem.