Andrew Luo github.com ID: drewluo926
Sasha Shams github.com ID: sashashams
Project: Texas Hold'em Poker Game
(a) This project is a GUI application that plays a game of Texas Hold'em Poker between the user and the computer.
(b) User stories: -As a player, I can allow the turn card to be dealt, and furthermore the river to be dealt, so that the game can advance according to the rules. -As a player, I can view the two cards I've been dealt, as well as the cards in the shared hand, so that I may judge how good my hand is and decide what I want to do as the game continues. -As a player, I can place/match bets, raise, or fold so that I can gamble my money in smart ways and try to win as much as possible. -As a player, I can view how many chips I have, how many chips my opponent has, and how much money is in the pot at any given time, so that I can make educated decisions about my bets.
(c) The software does run. Currently, the game operates by dealing two cards to the player and the dealer (computer). The user can bet or fold at any time, and is prompted to match the computer's bet when the computer does bet. After all the cards are dealt, the winner is decided by the best hand, the chips are given to the winner, and the count of wins for the winner is updated.
(d) Possible additional user stories: -As two players, we can play against eachother on a local socket connection so that we can play multiplayer poker. -As a single player, I can choose to play against the computer so that I can play the game by myself. -As a player, I can visibly see my opponents actions (call, check, fold, etc.) so that I can respond appropriately. -As a player, I can view the results of the showdown (the two best hands for each player as calculated by the program) so that I can understand how the winner was decided.
(e) The README.md looks fine, but could be improved to have run instructions, project history, descriptions of the various files, etc.
(f) The build.xml is in good condition. It only includes important targets and has descriptions on all targets.
(g) There are a number of issues with this project that need to be addressed: -(~100 points) Improve README to have more information (see issue #11) -(~400 points) Make the game have two options on startup: 1. Single player: How the game is currently played, against the computer 2. Multiplayer (2 players): Play against a friend over a socket connection. -(~300 points) Alternate the betting order (see issue #10) and make the game turn based so that it better simulates an actual game of poker. Additionally, add text explicitly stating the opposing players actions and prompts for the user to decide their actions during every round instead of at any time. -(~100 points) Fix various bugs (see issue #4 and #12) -(~100 points) Make siginificant changes to the gui to make it easier to follow and play. e.g. change layout of the buttons, create prompt and dealer action messages, etc.
(i) The code is fairly easy to understand at a glance, although some of the functions do get very lengthy and hard to read e.g. sameHand() in Hand.java. The classes and their purposes are pretty straightforward and intuitive. The Card class is used to represent a card, with it's suit and number. The Hand class extends ArrayList, specifically ArrayList, and provides methods to calculate it's value as it would have in poker and compare it to other hands. Deck represents a standard deck of 52 Cards, and provides methods to deal Cards, draw Cards, and discard Cards from the deck in order to simulate the random effect of shuffling and dealing cards from a real deck of cards. The Player class represents the players, with chips to bet with and their number of wins recorded. The PlayerDelegate interface is the only class whose function is questionable; its only purpose seems to deal with folding.The PokerGame class is the class that is actually run to play the game, and contains all of the swing GUI components as well as handles the flow of the game. As it is, the game shows cards with their images as .png files. The game progresses at the prompting of the user, and betting is allowed at any time.
(j) Yes there is testing, but maybe not complete. There are a number of hard-coded tests for comparing hands, but there could be some edge cases that are being overlooked. Full coverage testing would be optimal.