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.

68 lines
2.4 KiB

// Here we merged the CoinInventory in with the Player class.
// The class still represents one coherent concept (a player), has only 3 instance variables, and is easy to understand.
// This is ok design unless there is a need for reusing CoinInventory elsewhere in the program.
import java.util.*;
public class Player {
private String name;
private int[] coinCounts; //cp (pennies), sp (dimes), ep (half-dollars), gp (dollar bills), pp (five dollar bills)
private ArrayList<Item> otherInventory;
public Player(String name) {
this.name = name;
otherInventory = new ArrayList<Item>();
coinCounts = new int[5];
}
public void addItem(Item item) {
otherInventory.add(item);
}
public void collectMoney(int cp, int sp, int ep, int gp, int pp) {
coinCounts[0] += cp;
coinCounts[1] += sp;
coinCounts[2] += ep;
coinCounts[3] += gp;
coinCounts[4] += pp;
}
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() {
return .01 * coinCounts[0] + .1 * coinCounts[1] + .5 * coinCounts[2] + 1 * coinCounts[3] + 5 * coinCounts[4];
}
public int getEncumbrance() {
int encumbrance = coinCounts[0] + coinCounts[1] + coinCounts[2] + coinCounts[3] + coinCounts[4];
for(Item i : otherInventory) encumbrance += i.getWeight();
return 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.");
}
}