import java.util.ArrayList; import java.util.Scanner; import java.util.Collections; class Spill { final static int MAX_I_SEKK = 3; // max antall i spillernes ryggsekker final static int ANT_TREKK = 3; private Terreng terreng; // Alle steder, skattkister og gjenstander leses og opprettes her private ArrayList spillere = new ArrayList(); Scanner term; // samme Scanner-objekt i hele programmet for terminal boolean veivalgSpill; // Enkel vei eller flere utganger aa velge i boolean parallelt; // Sekvensielt eller en traad per spiller // Forbereder ny spillomgang public Spill (String stedFilNavn, String gjenstandFilNavn, Scanner term, boolean veivalgSpill, boolean parallelt) { this.veivalgSpill = veivalgSpill; this.parallelt = parallelt; this.term = term; // Bygger opp og lenker sammen enkle eller veivalg-steder, // plasserer skattkister if(veivalgSpill) terreng = new VeivalgTerreng(stedFilNavn, gjenstandFilNavn); else terreng = new Terreng(stedFilNavn, gjenstandFilNavn); opprettSpillere(); } public ArrayList begynn() { // VANLIG SPILLELOKKE eller TRADER: if (parallelt) tradSpillLokke(); else vanligSpillLokke(); Collections.sort(spillere); System.out.println("Spillet avsluttes\n====================================\n"); return spillere; } private void vanligSpillLokke() { for (int i = 0; i < ANT_TREKK; i++) { for (Spiller spiller : spillere) { spiller.nyttTrekk(); } } } private void tradSpillLokke() { ArrayList tradene = new ArrayList(); for (Spiller spiller : spillere) { tradene.add(new Thread(new Trad(spiller, ANT_TREKK))); } for (Thread trad: tradene) { trad.start(); } // Venter paa at alle Spillerene blir ferdig: for (Thread trad : tradene) { try { trad.join(); } catch (InterruptedException e) { } } } private void opprettSpillere() { int antRoboter = 0; System.out.print("Antall spillere: "); int antSpillere = term.nextInt(); BrukerGrensesnitt terminal = new Terminal(term); BrukerGrensesnitt brukerType = null; for (int i = 0; i < antSpillere; i++) { System.out.print("Spillernavn (ROBOT for robot): "); String navn = term.next(); if (navn.equals("ROBOT")) { navn += " nr. " + (++antRoboter); brukerType = new Robot(); } else { brukerType = terminal; } if (veivalgSpill) spillere.add(new VeivalgSpiller(navn, brukerType, terreng.hentStart())); else spillere.add(new Spiller(navn, brukerType, terreng.hentStart())); } System.out.println("====================================\n"); } public String resultat() { String s = "Resultater:\n"; Collections.sort(spillere); int plass = 0; for (Spiller sp: spillere) { s += (++plass) + ". plass: " + sp.hentNavn() + " med " + sp.beregnPoengSum() + " poeng\n"; } return s; } }