Take 4 hours and create a game of Blackjack!
- Create a fully functional game of Blackjack from scratch using only standard classes and common frameworks.
Rules should follow:
- http://en.wikipedia.org/wiki/Blackjack.
- Dealer stands on 17
- Deck is made of up 8 standard decks of cards
- Ignore the hand splitting
Expected Features
- Single-player game (dealer and one player at minimum)
- Basic Blackjack rules as described here: https://en.wikipedia.org/wiki/Blackjack#Rules
- The player should have cash and be able to bet according to the rules here: https://en.wikipedia.org/wiki/Blackjack#Rules_of_play_at_casinos (You can simplify these, as long as the basic bet/reward structure is in place)
- The ability to play multiple rounds with a persistent cash pool
- The ability to save game state and restore it after restarting
- Customizable game settings (Some examples of things to make adjustable: min bet amount, player starting cash amount, etc.)
- You can use this image for cards: http://math.hws.edu/eck/cs124/javanotes6/c13/cards.png
Nice-to-Haves
- Hand-splitting
- Between 2-6 user controlled players at the table where players can enter/leave the table at any time (all controlled locally)
- Single-player mode where other players at table are AI
- Game stats tracking (highest cash amount, etc.)
- Animations!
Evaluation Criteria (in order of importance)
- The code does what it says it does.
- Well-designed architecture. Assume this the first phase in a project with a much larger scope, and design accordingly. It's better to have well thought-out architecture with fewer features than to have tons of bells and whistles that are hacked together.
- Clean code that follows best practices. We won't reject you because of a single missing access modifier, but you should be fairly dilligent. And don't worry about minor permutations of code style, you can learn our styles once you're onboard.
- Demonstrates some creativity and uniqueness. Whatever that means to you - show us what you love to do!
Deliverables
- Git repository with history intact. Commit early and often so that we can trace the app’s development history. The more you show the better.
- Include a README explaining the features you've implemented, and an outline of code architecture.