Difference between revisions of "CISC181 S2019 Lab4"
(→Instructions) |
(→Instructions) |
||
Line 13: | Line 13: | ||
[[Image:poker_payouts.png|150px]]<br> | [[Image:poker_payouts.png|150px]]<br> | ||
− | Playing each game one by one is rather boring (but you should probably do this in the course of your testing). So instead you will modify and add to the above classes to create a *simulator* to tabulate gains or losses over many games played automatically. Specifically, your player starts with a bankroll of $1,000,000 and bets $1 per game. Win or lose, play 1,000,000 games ''automatically'' according to the following super-simple strategy and print (1) the final amount, and (2) the ''best'' hand that you ever | + | Playing each game one by one is rather boring (but you should probably do this in the course of your testing). So instead you will modify and add to the above classes to create a *simulator* to tabulate gains or losses over many games played automatically. Specifically, your player starts with a bankroll of $1,000,000 and bets $1 per game. Win or lose, play 1,000,000 games ''automatically'' according to the following super-simple strategy and print (1) the final amount, and (2) the ''best'' hand that you ever achieved. |
− | * If you have worse than a | + | * If you have worse than a pair, discard everything |
− | |||
* If you have no better than a pair, keep it and discard the other three | * If you have no better than a pair, keep it and discard the other three | ||
* If you have no better than two pairs, keep them and discard the remaining card | * If you have no better than two pairs, keep them and discard the remaining card | ||
Line 22: | Line 21: | ||
* If you have better than three of a kind, keep everything | * If you have better than three of a kind, keep everything | ||
+ | A fundamental issue here is comparing cards and comparing hands: how much money does a particular hand win, if any, and is the current hand better than any previous hand? | ||
Here are some of the key changes you will need to make for this to happen: | Here are some of the key changes you will need to make for this to happen: | ||
− | * Currently there is no way to compare individual cards to see which one is "better". Make the <tt>Card</tt> class implement <tt>Comparable<Card></tt> | + | * Currently there is no way to compare individual cards to see which one is "better". Make the <tt>Card</tt> class implement the <tt>Comparable<Card></tt> interface |
− | + | * Write a <tt>Comparator</tt> class <tt>ByHandValue</tt> to compare objects from the <tt>Hand</tt> class. The comparison function will be <tt>int compare(ArrayList<Card> H1, ArrayList<Card> H2)</tt>, where a return value < 0 indicates that H1 would lose to H2, a return value > 0 means that H1 would beat H2, and a return value of 0 means H1 and H2 are "tied." | |
− | |||
− | |||
− | |||
− | |||
The ranking of hands is detailed [https://en.wikipedia.org/wiki/List_of_poker_hands here]. Assume that cards come from a standard 52-card deck with no wildcards, and aces can be high or low. This will be a complicated function -- please make it as modular as possible by calling other support functions. | The ranking of hands is detailed [https://en.wikipedia.org/wiki/List_of_poker_hands here]. Assume that cards come from a standard 52-card deck with no wildcards, and aces can be high or low. This will be a complicated function -- please make it as modular as possible by calling other support functions. | ||
Revision as of 12:41, 13 March 2019
Preliminaries
- Make a new project with n = 4 (following these instructions)
- Name your main class "Lab4" (when creating a new module in the instructions above, in the Java class name field)
- Remember that this week you can choose a partner, or work alone. No partners will be assigned
Instructions
Suppose you want to write a video poker simulator based on the provided Card , Deck, and Hand classes. See "The Game" section here for the rules, in particular the "Jacks or Better" variant. In short, for each hand you are given 5 random cards, and you can choose from 0 to 5 of them to replace. Depending on the result (a pair, two pairs, three of a kind, flush, etc.), you get a payout based on the odds, as shown below:
Playing each game one by one is rather boring (but you should probably do this in the course of your testing). So instead you will modify and add to the above classes to create a *simulator* to tabulate gains or losses over many games played automatically. Specifically, your player starts with a bankroll of $1,000,000 and bets $1 per game. Win or lose, play 1,000,000 games automatically according to the following super-simple strategy and print (1) the final amount, and (2) the best hand that you ever achieved.
- If you have worse than a pair, discard everything
- If you have no better than a pair, keep it and discard the other three
- If you have no better than two pairs, keep them and discard the remaining card
- If you have no better than three of a kind, keep it and discard the other two
- If you have better than three of a kind, keep everything
A fundamental issue here is comparing cards and comparing hands: how much money does a particular hand win, if any, and is the current hand better than any previous hand? Here are some of the key changes you will need to make for this to happen:
- Currently there is no way to compare individual cards to see which one is "better". Make the Card class implement the Comparable<Card> interface
- Write a Comparator class ByHandValue to compare objects from the Hand class. The comparison function will be int compare(ArrayList<Card> H1, ArrayList<Card> H2), where a return value < 0 indicates that H1 would lose to H2, a return value > 0 means that H1 would beat H2, and a return value of 0 means H1 and H2 are "tied."
The ranking of hands is detailed here. Assume that cards come from a standard 52-card deck with no wildcards, and aces can be high or low. This will be a complicated function -- please make it as modular as possible by calling other support functions.
Submission
Submit your ByHandValue.java on Canvas (be sure to add your name to any files you create or change). Do NOT submit Lab4.java.