You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
77 lines
2.4 KiB
77 lines
2.4 KiB
11 months ago
|
//The design among these 3 classes needs improvement, and the code has a couple of bugs, too.
|
||
|
//Improve the design and fix the bugs.
|
||
|
//The public interface of Player should remain the same as it is now.
|
||
|
|
||
|
//Hints:
|
||
|
//Avoid duplicate data
|
||
|
//Methods and instance data should have high cohesion
|
||
|
//Coupling should be loose between classes
|
||
|
|
||
|
import java.util.*;
|
||
|
|
||
|
public class Player {
|
||
|
private String name;
|
||
|
private CoinInventory coinInventory;
|
||
|
private ArrayList<Item> otherInventory;
|
||
|
private int encumbrance;
|
||
|
|
||
|
public Player(String name) {
|
||
|
this.name = name;
|
||
|
coinInventory = new CoinInventory();
|
||
|
otherInventory = new ArrayList<Item>();
|
||
|
encumbrance = 0;
|
||
|
}
|
||
|
|
||
|
public void addItem(Item item) {
|
||
|
otherInventory.add(item);
|
||
|
}
|
||
|
|
||
|
public void collectMoney(int cp, int sp, int ep, int gp, int pp) {
|
||
|
int[] moneys = coinInventory.getCoins();
|
||
|
moneys[0] += cp;
|
||
|
moneys[1] += sp;
|
||
|
moneys[2] += ep;
|
||
|
moneys[3] += gp;
|
||
|
moneys[4] += pp;
|
||
|
coinInventory.setCoins(moneys);
|
||
|
}
|
||
|
|
||
|
public double getRunningSpeed() {
|
||
|
double speed = 5 * (1 - getEncumbrance() / 1000.0); //Speed 5 if unencumbered; speed 0 if 1000 units carried or more.
|
||
|
if (speed < 0) {
|
||
|
return 0;
|
||
|
}
|
||
|
else {
|
||
|
return speed;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
public double getMoneyValue() {
|
||
|
int[] moneys = coinInventory.getCoins();
|
||
|
return .01 * moneys[0] + .1 * moneys[1] + .5 * moneys[2] + 1 * moneys[3] + 5 * moneys[4];
|
||
|
}
|
||
|
|
||
|
public int getEncumbrance() {
|
||
|
int[] moneys = coinInventory.getCoins();
|
||
|
return moneys[0] + moneys[1] + moneys[2] + moneys[3] + moneys[4] + encumbrance;
|
||
|
}
|
||
|
|
||
|
//Test method.
|
||
|
public static void main(String[] args) {
|
||
|
Player p = new Player("Whistlestick");
|
||
|
Item sword = new Item("Magic sword +2", 20);
|
||
|
Item shield = new Item("Normal shield", 40);
|
||
|
p.addItem(sword);
|
||
|
p.addItem(shield);
|
||
|
if (p.getEncumbrance() != 60) throw new RuntimeException("getEncumbrance() should be 60, not " + p.getEncumbrance());
|
||
|
p.collectMoney(10,2,0,40,2);
|
||
|
if (p.getEncumbrance() != 60+54) throw new RuntimeException("getEncumbrance() should be 114, not " + p.getEncumbrance());
|
||
|
if (p.getMoneyValue() != 50.3) throw new RuntimeException("getMoneyValue() should be 50.3, not " + p.getMoneyValue());
|
||
|
p.collectMoney(0,0,0,6,0);
|
||
|
if (p.getEncumbrance() != 120) throw new RuntimeException("getEncumbrance() should be 120, not " + p.getEncumbrance());
|
||
|
if (p.getRunningSpeed() != 4.4) throw new RuntimeException("getRunningSpeed() should be 4.4, not " + p.getRunningSpeed());
|
||
|
System.out.println("All tests passed.");
|
||
|
}
|
||
|
|
||
|
|
||
|
}
|