Announcement

Collapse
No announcement yet.

Mäxchen das Spiel Endlosschleife

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Mäxchen das Spiel Endlosschleife

    Hallo Leute,
    Ich habe zu der folgenden Aufgabenstellung paar Fragen.

    Aufgabe 2)
    Mäxchen ist ein einfaches Würfelspiel. Ein Spieler wirft zwei Würfel. Der Wert des Wurfs ergibt sich
    aus den Augen der Würfel wie folgt:
    1. Der Wurf 1, 2 heißt Mäxchen und ist 1000 Punkte Wert.
    2. Ein Wurf mit zwei gleichen Augenzahlen wird als „Pasch“ bezeichnet und ist 100*Augenzahl
    an Punkte Wert. Der Wurf 2, 2 hat beispielweise den Wert 200.
    3. Ansonsten ist der Wert 10*(höhere Augenzahl)+(niedrigere Augenzahl). Der Wurf 3, 5 hat
    beispielweise den Wert 53.
    Schreiben Sie ein Programm Mäxchen, dass das Spiel für n Spieler wie folgt durchführt:
    - das Spiel initialisiert (fragt die Anzahl der Spieler sowie deren Namen),
    - die Zwischenergebnisse geeignet verwaltet,
    - die Würfe nach Anforderung der Spieler durch führt und
    - nach jeder Runde den Namen des Spielers, der momentan das Spiel führt, ausgibt.


    Problem:- Zwischenergebnisse werden nicht gespeichert
    - zur Laufzeit existiert eine Endlosschleife in der main Methode
    Attached Files

  • #2
    Wo sollen die Zwischenergebnisse gespeichert werden?

    Des Weiteren
    Es ist schlecht, alles aus dem Konstruktor heraus ablaufen zu lassen. Besser

    Maexchen spiel=new Maexchen();
    spiel.init();
    spiel.start();
    Diese Methoden sind dann aus dem Konstruktor zu entfernen.

    Die Namenseingabe funktioniert nicht,weil

    for(int i=0;i==n;i++)

    falsch ist. Weiterhin ist das lesen aus dem Scanner mit nextInt falsch. Das abschließende RETURN wird nicht mehr gelesen und der nächsten Scannerabfrage (dem ersten Namen) zugeordnet.

    Die if-Abfrage für Mäxchen muss erweitert werden, weil sonst nicht alle Fälle erkannt werden.

    Wozu gibt die Methode wurf() einen Wert zurück, der nie verarbeitet wird?

    Sicherlich gibt es eine Endlosschleife, weil du die Abfrage

    int auswahl=scan.nextInt();

    außerhalb der while-Schleife zu stehen hast und somit die Schleife nie auf weitere Eingaben reagieren kann.

    [highlight=java]

    import java.util.Scanner;

    public class Maexchen
    {
    private int maexchen=1000;
    private int z1;
    private int z2;
    private int pasch=100*z1;

    public Maexchen()
    {
    }

    public void start()
    {
    Scanner scan=new Scanner(System.in);
    boolean beenden=false;
    System.out.println("-----Let´s play Mäxchen-----");
    System.out.println("Spieler initialisieren");
    System.out.println("1) Mäxchen spielen");
    System.out.println("2) Spiel beenden");
    while(!beenden)
    {
    int auswahl=scan.nextInt();
    System.out.println("gewählt wurde: "+auswahl);
    switch(auswahl)
    {
    case 1:
    {
    wurf();
    }
    break;
    case 2:
    {
    beenden=true;
    }
    break;
    }
    }
    }

    public int wurf()
    {
    z1=(int)((Math.random()*6)+1);
    System.out.println(z1);
    z2=(int)((Math.random()*6)+1);
    System.out.println(z2);
    if((z1==1&&z2==2)||(z1==2&&z2==1))
    {
    System.out.println("Mäxchen: "+maexchen);
    return maexchen;
    }
    else if(z1==z2)
    {
    System.out.println("Pasch! "+pasch);
    return pasch;
    }
    return 0;
    }

    public static void main(String[] args)
    {
    Maexchen spiel=new Maexchen();
    spiel.init();
    spiel.start();
    }

    public int init()
    {
    Scanner scan=new Scanner(System.in);
    System.out.println("Die Anzahl der Spieler eingeben:");
    int n=Integer.valueOf(scan.nextLine());
    for(int i=0;i<n;i++)
    {
    String name=scan.nextLine();
    System.out.println("Willkommen "+name);
    }
    return n;
    }

    }


    [/highlight]
    Christian

    Comment


    • #3
      Hallo Christian,

      vielen Dank für die schnelle Antwort. Also ich rufe alle Methoden aus dem Konstruktor aus, weil der Prof gemeint hat, dass so die Konvention ist. Alles aus der main-Methode aufzurufen wäre schlechter Programmierstil .

      Ich bekomm aber den Teil mit, dass jede Runde der nächste Spieler aufgerufen wird nicht hin. Desweiteren hab ich mir das Speichern schon überlegt, allerdings finde ich keine gute Lösung.

      Ein Array kommt nicht in Frage, weil ich ja Mindestens 2 Datentypen zugeordert speichern muss d.H Name=Punktezahl. Ich hab da an Object gedacht, der Prof hat davon wiederum abgeraten. Ich kenn sonst keine anderen Speichermethoden.

      Gruß seltesh

      Comment


      • #4
        weil der Prof gemeint hat, dass so die Konvention ist
        Das würde ich anders sehen. Im Konstruktor wird die Klasse eingerichet. Man könnte allenfalls die init-Methode dahin verlagern. Auch das ist dann abhängig, ob mit dem init ein neues Spiel gestartet wird, oder ob man dazu eine neue Instanz der Klasse anlegen muss. Da hier letztres nicht der Fall sein sollte, würd ich noch nicht mal die init in den Konstruktor legen
        Des Weitern kann die Aussage so nicht stimmen, weil ja sonst weitere Methoden in einer Klasse fast überflüssig werden. Aber was will man von Professoren erwarten....C4 Bezahlung und keine Ahnung, Tutoren beschäftigen, nicht erreichbar sein usw...

        Was du mit Speichern meinst verstehe ich nicht
        Bisher fehlt deinem Programm völlig die Information welcher Spieler an der Reihe ist. Um diese Infos zu speichern sollte eine neue Klasse angelegt werden

        [highlight=java]
        public class Spieler
        {
        private int punkte;
        private String name;

        public String getName()
        {
        return name;
        }

        public void setName(String name)
        {
        this.name=name;
        }

        public int getPunkte()
        {
        return punkte;
        }

        public void setPunkte(int punkte)
        {
        this.punkte=punkte;
        }

        }

        [/highlight]


        Die Spieler werden dann in einer ArrayList

        List<Spieler> spieler=new ArrayList<Spieler>();

        gespeichert. Mittels eines einfachen int-Wertes, der den aktullen Spieler beinhaltet, kannst du dann mit

        spieler.get(aktuellerSpieler)

        auf die Daten zugreifen
        Christian

        Comment

        Working...
        X