DepressingRealitys Skrevet 9. oktober 2013 Del Skrevet 9. oktober 2013 (endret) .... Endret 14. mars 2014 av DepressingReality Lenke til kommentar
jonny Skrevet 9. oktober 2013 Del Skrevet 9. oktober 2013 Ja, du har rett, bruk en if-setning, blir veldig lik kode i alle gaaMotXxx()-metodene i Spiller.java. Noe ala dette: if (staarI.harRomXxx()) { staarI = staarI.hentRomXxx(); } else { System.out.println("Ingen rom mot xxx!"); } I tillegg bør du vel i Spiller.skrivUtRomBeskrivelse() bruke metoden staarI.hentBeskrivelse() isteden for å skrive ut en konstant verdi... Lenke til kommentar
jonny Skrevet 9. oktober 2013 Del Skrevet 9. oktober 2013 (endret) Du kan forøvrig gjøre koden litt kortere og slippe å duplisere kode ved å innføre retning som en parameter i de forskjellige metodene, slik at de 4 gaaMotXxx()-metodene blir redusert til en gaaMot(Retning)-metode. Tilsvarende for settRomXxx()-, hentRomXxx()- og harRomXxx()-metodene. F.eks. slik: /** * Fag: INF100 V2013 * Øving: 5 * * Et adventure spill der spilleren flytter seg * rundt i rom som har forskjellig farge. Kartet * over rom er som følger: * N * | * V - - Ø ______ * | | rødt | * S ________|------|________ * |oransje | gult | grøndt | * |________|______|________| * * Spilleren starter i det røde rommet. **/ public class Adventure { public static void main(String[] args) { java.util.Scanner tastatur = new java.util.Scanner(System.in); // Oppretter alle rommene Rom rodtRom = new Rom("Rommet er rødt."); Rom grontRom = new Rom("Rommet er grønt."); Rom gultRom = new Rom("Rommet er gult."); Rom oransjeRom = new Rom("Rommet er oransje."); // Kobler rommene sammen etter hvor // de befinner seg i forhold til hverandre. // Oppgave 1 rodtRom.settRom(Retning.SOER, gultRom); gultRom.settRom(Retning.NORD, rodtRom); gultRom.settRom(Retning.VEST, oransjeRom); oransjeRom.settRom(Retning.OEST, gultRom); gultRom.settRom(Retning.OEST, grontRom); grontRom.settRom(Retning.VEST, gultRom); Spiller spiller = new Spiller(rodtRom); spiller.skrivUtRomBeskrivelse(); // Så lenge brukeren ikke skriver inn // "Hade!" leses inn nye kommandoer boolean fortsett = true; while (fortsett) { String[] kommando = tastatur.nextLine().trim().split(" "); switch (kommando[0]) { case "Gå": if (kommando.length == 2) { try { Retning r = Retning.fraTekst(kommando[1]); spiller.gaaMot(Retning.fraTekst(kommando[1])); spiller.skrivUtRomBeskrivelse(); break; } catch (java.util.NoSuchElementException e) { } } System.out.println("Ugyldig retning oppgitt!"); break; case "Hade!": System.out.println("Hade!"); fortsett = false; break; default: System.out.println("Ukjent kommando, prøv igjen!"); } } } } public enum Retning { OEST ("øst"), SOER ("sør"), VEST ("vest"), NORD ("nord"); private String tekst; Retning(String t) { tekst = t; } public static Retning fraTekst(String t) { for (Retning r : Retning.values()) { if (r.tekst.equals(t)) return r; } throw new java.util.NoSuchElementException(); } public String somTekst() { return tekst; } } /** * Fag: INF100 V2013 * Øving: 5 * * Rom beskriver et rom i et adventure spill. * Et rom kan føre til et rom i alle retninger * (nord,sør,vest,øst). Det er også en beskrivelse * av hvert rom. * **/ public class Rom{ /** * Rom som dette rommet fører til. **/ private java.util.Map<Retning, Rom> naborom = new java.util.EnumMap<>(Retning.class); /** Beskrivelsen av rommet **/ private String beskrivelse; /** * Konstruktør for Rom. * @param beskrivelsen En beskrivelse av rommet. **/ public Rom(String beskrivelse){ this.beskrivelse = beskrivelse; } /** * Setter hvilket rom rommet fører til * i retning <code>r</code>. Hvis gitt null er det * ikke et rom til i denne retningen. * @param rom Rommet som dette rommet skal * føre til. **/ public void settRom(Retning r, Rom rom) { naborom.put(r, rom); } /** * Henter hvilket rom rommet fører til * i retning <code>r</code>. Returnerer null dersom * det ikke er noe rom i denne retningen. * @return rommet til vest for dette rommet. **/ public Rom hentRom(Retning r) { return naborom.get(r); } /** * @return true dersom rommet fører til * et rom mot retning <code>r</code>. **/ public boolean harRom(Retning r) { return naborom.get(r) != null; } /** * @return En beskrivelse av rommet. **/ public String hentBeskrivelse(){ return beskrivelse; } } /** * Fag: INF100 V2013 * Øving: 5 * * Beskriver en spiller i et adventure spill. * Spilleren står i et rom og kan flytte seg * i en retning til et annet rom (nord,sør * vest,øst) avhengig av om rommet fører til * et nytt rom i den retningen. * */ public class Spiller{ /** Rommet som spilleren står i **/ Rom staarI; /** * Konstruktør for klassen spiller * @param staarI rommet som spilleren står i. **/ public Spiller(Rom staarI){ this.staarI = staarI; } /** * Skriver ut beskrivelsen av rommet som spilleren * står i. **/ public void skrivUtRomBeskrivelse(){ //Oppgave 2 System.out.println(staarI.hentBeskrivelse()); } /** * Går til rommet som er i retning <code>r</code> * for rommet som spilleren står i nå hvis det * rommet finnes. Hvis ikke skrives en feilmelding ut. **/ public void gaaMot(Retning r){ //Oppgave 2 if (staarI.harRom(r)) { staarI = staarI.hentRom(r); } else { System.out.println("Ingen rom mot " + r.somTekst() + "!"); } } } Endret 10. oktober 2013 av jonny 1 Lenke til kommentar
DepressingRealitys Skrevet 10. oktober 2013 Forfatter Del Skrevet 10. oktober 2013 (endret) ... Endret 14. mars 2014 av DepressingReality Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå