Gå til innhold

[Løst] hjelp med java oppgave.


Anbefalte innlegg

Videoannonse
Annonse

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

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 av jonny
  • Liker 1
Lenke til kommentar

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 konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...