CompSci 308
Spring 2023
Advanced Software Design and Implementation

Fluxx Design Exercise

This project is intended to help you to think about what it means to be a game and how much flexibility can be applied to any aspect of a game.

Specification

Consider designing a software version of the card game of Fluxx by Looney Labs, a card game with dynamically changing rules. Fluxx was designed by ex-NASA engineers and has enjoyed relative superstar status in the gaming world. It is considered part of a family of games with mutable rules; in this case, by playing cards within the game. The game starts out with just two basic rules: each player draws one card, and plays one card during his turn; and no way to win the game! After that, any part of the play can be changed by playing rule or goal cards.

Simply put, the rules and goals are on the cards, so as you play, anything can change. That sounds easy enough at first, until it is put into practice — this means that not only are no two games the same, but no two minutes of a game are the same. In fact, you are not even playing the same game as the game progresses: you may be playing a game that requires you to have a hand of several dozen cards; or a game where no one is allowed to have any cards in hand; you may have to make several plays before the next person can play; or the play order could be rearranged so you will have to wait twice as long before you can play at all; you may be playing someone else's cards; or you may be playing cards that are not even in play. And since the rules are always changing, any and all of these events can take place in a matter of minutes in the same game!

The game has become so popular that it has spawned many versions, expansion packs, and variants. However, people seems to be divided on the game between those that love the challenge and variety presented by the game to those that hate the lack of strategy possible. I have even known people to play cards that allow others to win just to end the game!

These links highlight some details to consider when creating your design:

You can try playing a version online here, download an app (iOS or Android), or watch some videos on YouTube.

Use Cases

The following scenarios are provided to help test your design. By describing how your design handles these scenarios, we will be able to better understand how deeply you have considered the basic design issues. It may help you to role play or draw a diagram of how your classes collaborate to complete each story.

Describing Your Design

Now that your team has thought about the problem generally, refine your discussion into a Object-Oriented design by identifying specific abstractions and their behaviors instead of implementation issues. A picture may be helpful to show how your parts are related to and dependent on each other.