import java.util.ArrayList; class Spiller implements Comparable { private String navn; protected BrukerGrensesnitt ui; private int formue; protected Sted posisjon; private Skattkiste ryggsekk; private static final int MAX_PAA_RYGGEN = 5; private String[] jaNei = { "Ja", "Nei" }; protected String spmaal; protected int valg; protected String[] alternativer; public Spiller(String n, BrukerGrensesnitt ui, Sted start) { navn = n; this.ui = ui; formue = 100; posisjon = start; ryggsekk = new Skattkiste(new ArrayList()); } public String hentNavn() { return navn; } public void nyttTrekk() { Terminal term; if (ui instanceof Terminal) { // Robot trenger bare laas paa skattkisten term = (Terminal) ui; term.laas(); } ui.giStatus(navn + ": " + posisjon.toString()); ordneMedGjenstander(); ordneMedVeienVidere(); // lager skille mellom trekkene: ui.giStatus("--------------------------------------\n"); if (ui instanceof Terminal) { term = (Terminal) ui; term.laasOpp(); } } protected void ordneMedGjenstander() { Skattkiste kiste = posisjon.hentKiste(); // laaser kisten if (ryggsekk.size() > 0) { alternativer = new String[ryggsekk.size() + 1]; int antG = 0; for (Gjenstand g : ryggsekk.hentListe()) { alternativer[antG++] = g + ""; // toString gir beskrivelse og verdi } alternativer[alternativer.length - 1] = "Nei takk"; spmaal = navn + ": Vil du selge noe? Men skattekisten er magisk saa prisen du faar" + " kan vaere storre eller mindre enn tingens verdi."; valg = ui.beOmKommando(spmaal, alternativer); if (valg != alternativer.length - 1) { Gjenstand ny = ryggsekk.hentUt(valg); // Spiller selger int bruktPris = kiste.kjoepTilfeldigPris(ny); // Kisten kjoeper formue += bruktPris; ui.giStatus(navn + ":Du solgte en " + ny.hentBeskrivelse() + " og fikk kr. " + bruktPris + "\n"); } else { System.out.println(); } } if (kiste.size() > 0 && ryggsekk.size() < MAX_PAA_RYGGEN) { spmaal = navn + ": Vil du ta med deg en gjenstand videre?"; valg = ui.beOmKommando(spmaal, jaNei); if (valg == 0) { Gjenstand taMed = kiste.hentTilfeldig(); ryggsekk.leggNed(taMed); ui.giStatus(navn + ": Den magiske kisten ga deg " + taMed + "\n"); } } else { ui.giStatus(navn + ": Det er ikke noe aa ta med." + " Enten fordi ryggsekken din er full eller kisten her er tom."); } posisjon.leverTilbakeKiste(); // laaser opp kisten } protected void ordneMedVeienVidere() { ui.giStatus(navn + ": Du fortsetter fremover."); posisjon = posisjon.gaaNeste(); } public int beregnPoengSum() { return formue + ryggsekk.hentTotalVerdi(); } @Override public int compareTo(Spiller annen) { int denneP = beregnPoengSum(); int annenP = ((Spiller) annen).beregnPoengSum(); return annenP - denneP; // Snur for aa faa vinner oeverst } public String toString() { String s = navn + " (" + beregnPoengSum() + " poeng)"; s += "\nFormue " + formue + " kroner. \n Bagasje: "; ArrayList bagasje = ryggsekk.hentListe(); if (bagasje.size() == 0) { s += "Tom"; } for (Gjenstand gjs : bagasje) { s += gjs + "\n"; } return s; } }