---
# System prepended metadata

title: ooga

---

ooga
====

This project implements a player for multiple related games.

Names:

Livia Seibert (las120)
Rachel Luria (rl213)
Martha Aboagye (mfa23)
Patrick Liu (pyl8)


### Timeline

Start Date: March 25, 2021

Finish Date: April 25, 2021

Hours Spent: 200

### Primary Roles

Livia - My primary role was to work on the data module of the project. I created the layout for the XML files, the XML parser module, the game objects, the win managers, and the win rule engine.

Rachel - My primary role was to work on the data aspect of the project. I created the XML Writer package, and helped create the game objects.

Patrick - All of the engine package (card dealing, money managing, bet actions, discard action, action managers); some of the controller package (game logic)

### Resources Used

[Rule Engine Pattern]("https://yiniski.medium.com/rule-engine-pattern-8a3f0e0c2d81")
[Poker Variations]("https://www.pagat.com/poker/variants/")

### Running the Program

Main class: The Main file starts up the view and initiates game play.

Data files needed: 

texasholdem.xml
fivecarddraw.xml
fivecardomaha.xml
fivecardstudlowball.xml
omahahilosplit.xml

Features implemented:

- Preferences - change language, color, etc.
- Load Games - load in a previously paused game
- Multiple Games at Once - flip between workspaces with different games going on
- Artificial Players - choose from Easy or Hard AI player
- Player Profiles - user data can be stored in Firebase
- Chat - chat with other players during the game
- Saving Games - save game state to a file between rounds
- Game Area Editor - form for creating new poker types
- UI - view the current player's cards, the community pool cards, and other active players 
- Bet Actions - check, call, raise, or fold during a betting round; only the appropriate actions based on past actions and the state of the game are shown to users 
- Card Actions - discard cards during a post-betting discard round and replace them with cards from the dealer 


### Notes/Assumptions

Assumptions or Simplifications:

We based our design off of the main poker variations specified by the Paget Poker Website referenced above. Based on what we read from that site, we came up with the different components that we thought would lend themselves to implementing as many poker variations as possible. While there are many poker variations out there, this site is what we used to limit the scope of our project.

In order to focus on a well-rounded design for the engine, games are expected to start with all players having the same amount of money. This simplifcation avoids situations where a player wants to call but does not have enough money, thereby going "all in." This situation is more of a logic challenge than a design challenge, so it was left out. 

Interesting data files:

initializertest1.xml - example of a file that loads in an old game

badwinrulesmain.xml, badinitializertest.xml - data files that test error handling

Known Bugs:

Extra credit:


### Impressions

I think that this project was difficult due to its open-endedness. Unlike the previous projects, we had lots of freedom to decide what we were going to make and what features we were going to add, which means there were lots of different ways we could go about designing our code. Having this flexibility was challenging, but definitely a good learning experience on how to take our own projects from the design phase to the complete implementation.
