There is a more recent offering of this course. This is an archive of the
course which was offered in Fall 2019.
Lab
7
Start Now
Lab 7: Battle Simulator 3000
## 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.
## Resources
* The [BattleSim.java](BattleSim.java) contains starter code for the `BattleSim` class.
* The [Mugwump.java](Mugwump.java) contains starter code for the `Mugwump` class.
## 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.
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`.
You should use the following files as a starting point:
[BattleSim.java](BattleSim.java) and [Mugwump.java](Mugwump.java).
## 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, she or he has not lost the battle.
* The Valiant Warrior uses six 10-sided dice (d10) to calculate his or her starting Hit Points.
* The Mugwump uses ten d10 to calculate his or her starting Hit Points.
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 his or her 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 his or her opponent by rolling the die. If a hit is made, she or he rolls 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: His or her Trusty Sword and his or her Shield of Light. The user must decide which to use in each attack.
* His or her Trusty Sword hits the Mugwump on a roll of 12 or greater on a 20-sided die (d20) and rolls two 8-sided dice (d8) for damage.
* His or her Shield of Light hits the Mugwump on a roll of 8 or greater on a d20 and rolls a 4-sided die (d4) for damage.
The evil Mugwump also has two possible attacks: His or her Razor-Sharp Claws and his or her Fangs of Death.
* His or her Razor-Sharp Claws hit on a roll of 12 or greater on a d20 and rolls two 6-sided dice (d6) for damage. The Mugwump uses this attack 75% of the time.
* His or her Fangs of Death hit on a roll of 16 or greater on a d20 and rolls three d6 for damage. The Mugwump uses this attack 15% of the time.
If the Mugwump does not use either of his or her attacks, she or he licks his or her wounds and heals himself or herself! Roll one d6 and add the result to the Mugwump's Hit Points, not exceeding his or her 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 below or below
* If the Valiant Warrior succeeds, an appropriately exultant message is displayed.
* If the Valiant Warrior fails, she or he is mocked by the evil Mugwump.
### Repeating Play
After each battle completes you will ask the user if they would like to battle.
* They should be able to enter any of the following to indicate yes: y, Y, yes, and Yes.
* If they do not enter any of the above, the game should exit.
## 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 71
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 71
.
.
.
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.
Tuesday, 22-Oct-2019 11:39:24 EDT
Submission Form for Dr. Taylor
Demonstration (due at the end of week 7 lab)
Each student must show their implementation of the Die class to their instructor.
Submission (due at 11pm Tuesday week 8)
Classes must be in a package that matches your MSOE username.
Each student must submit all four classes. All classes must follow the coding standards for the course. In particular, this includes:
A comment at the beginning of each file that includes: Course name, Quarter, Assignment name, Author's name, and date
JavaDoc comments must be included for each class and all public methods.
You should submit your solution only once, so be sure you are happy with
your solution before you submit it.