CISC181 S2019 Lab4

From class_wiki
Revision as of 12:14, 13 March 2019 by Cer (talk | contribs) (Instructions)
Jump to: navigation, search

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:

Poker payouts.png

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 had.

  • If you have worse than a single high card, discard everything
  • If you have no better than one "high card" (jack or higher), keep it and discard the other four
  • 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

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 Comparable<Card>

Obviously, a core function would be to compare two hands and determine which one is better.

In this lab you will write a Comparator class ByHandValue to compare hands in 5-card draw Poker. 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." You must use the Card class provided -- do not make your own.

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.