Overview

For this assignment, you will implement the class described by the UML diagram below along with a game that makes use of objects from the class.

Overview video

GitHub Classroom

Accept the assignment invitation from your instructor and create a new IntelliJ project from version control to clone the repository onto your computer.

Assignment

Prior to the end of lab you must have the Die class completely implemented. The Die class represents a die with a specified number of sides (selected by passing an integer to the constructor). The die must have at least two sides and no more than 100. If a value outside of this range is attempted, the die should default to having six sides. The current value of the die should be set to an integer between one and the number of sides the die has, chosen at random when the die object is constructed and whenever the roll() method is called. For example, for a six sided die, the current value must be set to one of the following values with equal likelihood: 1, 2, 3, 4, 5, or 6.

The UML class diagram for the Die class, as well as the other classes required for your assignment, are shown below. Note: The Die class specified for this assignment is slightly different that the Die class specified in exercise 5.

Your code must conform to the design specified in the UML class diagram above; however, you may add additional attributes and methods to the classes as long as they are declared as private. The Git repository has starter code for several of these classes.

This assignment has several components to it and is more complicated that previous assignments. It is helpful to think about the problem at different levels of abstraction. We recommend that you read over the entire assignment carefully to understand the overall goal for the program. You may find it helpful to "play" the game with a partner to become familiar with the rules of the game. Then focus on particular aspects. For example, you may choose to develop the Die class first and then move on to the Mugwump class. A MugwumpPlayground class has been provided that is intended to help you verify that your implementation of the Mugwump class is implemented correctly.

By building and testing each class incrementally, it will be easier build up to the final solution.

Battle Simulator 3000

The program simulates an epic battle between a Valiant Warrior (human player) and an evil Mugwump (computer player). Using rules from some generic tabletop game, the player will attempt to vanquish the evil scourge and save the kingdom.

A battle consists of a sequence of attacks which alternate between the two combatants.

Starting a Battle

Each player begins with a number of Hit Points. As long as the player has a positive number of Hit Points, they have not lost the battle.

The battle consists of a number of attack rounds.

An Attack Round

Each attack round consists of an opportunity for each player to mount an attack (unless the second attacker is eliminated prior to their turn). To determine the first attacker for the round, both the Mugwump and the Valiant Warrior will roll a d10. Whoever rolls higher gets to attack first. In the case of a tie, both re-roll.

The attacker chooses an attack strategy and attempts to hit their opponent by rolling the die. If a hit is made, they roll the appropriate die/dice to determine the damage, and then deducts that damage from the opponent's Hit Points.

The Valiant Warrior has two possible attacks: Their Trusty Sword and their Shield of Light. The user must decide which to use in each attack.

The evil Mugwump also has two possible attacks: Their Razor-Sharp Claws and their Fangs of Death.

If the Mugwump does not use either of their attacks, they lick their wounds and heal themself! The amount of hit points to be restored is determined by rolling on d10; however, the total number of hit points for the Mugwump must not exceed the Mugwumps starting hit points.

After each attack, the attack strategy, resulting damage (or healing), and the Hit Points remaining for each combatant must be displayed.

Battle End

The battle ends when one combatant's Hit Points goes to zero or below

Repeating Play

After each battle completes you will ask the user if they would like to battle.

Sample Run

Welcome to Battle Simulator 3000! The world's more low tech battle simulator!
You are a Valiant Warrior defending your humble village from an evil Mugwump! Fight bravely, 
or the citizens of your town will be the Mugwump's dinner!

You have your Trusty Sword, which deals decent damage, but can be tough to hit with sometimes. 
You also have your Shield of Light, which is not as strong as your sword, but is easier to deal 
damage with.

Let the epic battle begin!

Warrior HP: 29
Mugwump HP 51

The Mugwump attacks first!
The Mugwump snaps at you and misses!
How would you like to attack?
1. Your Trusty Sword
2. Your Shield of Light
Enter choice: 1
You swing your sword and miss the foul creature!
Warrior HP: 29
Mugwump HP 51
.
.
.
Warrior HP: 2
Mugwump HP 1

The Warrior attacks first!
How would you like to attack?
1. Your Trusty Sword
2. Your Shield of Light
Enter choice: 2
You hit the Mugwump with your Shield of Light for 2 points of damage!

The citizens cheer and invite you back to town for a feast as thanks for saving their lives (again)!

Would you like to play again? (yes/no)
no
Thank you for playing Battle Simulator 3000!

Acknowledgement

This laboratory assignment was developed by Prof. Sean Jones.

See your professor's instructions for details on submission guidelines and due dates.