Schleife für ein Würfelspiel

Diskutiere Schleife für ein Würfelspiel im Java Basics - Anfänger-Themen Bereich.
N

NavaJoob

Hallo ich bin dabei für eine Uni Hausaufgabe ein Würfelspiel zu Programmieren aber ich brauche noch einige Schleifen welche abfragen ob ein Spieler nochmal würfeln möchte und dann das Programm nochmal ausführt.

Leider habe ich mich so in meinem Ansatz verrannt, dass nichtsmehr funktioniert.

Wäre wirklich für jede Hilfe dankbar!

Hier mein bisheriger Code und die Angabe im Anhang.

Java:
import java.util.*;
public class Macao {
 public static void main (String[] args) {
    
    
     System.out.println("Wie viele Spieler nehmen teil ?");
     Scanner a = new Scanner(System.in);
     final int numberOfPlayers = a.nextInt();
    
    
     int i = 1;
     for(i = 1; i <= numberOfPlayers; i++) {
     System.out.println( "Spieler : " +i);
    
     int erster = (int)  (Math.random() * 6) + 1;
     System.out.println("Sie haben eine "+erster);   
    
     boolean again = true;
     while(again) {
     String neu = "j";
     String ende = "n";
     System.out.println("Nochmal würfeln ? j oder n ?");
     Scanner c = new Scanner(System.in);
     String b = c.next();
     if (neu.equals(b)) {
         int zweiter = (int)  (Math.random() * 6) + 1;
         System.out.println("Sie haben eine "+zweiter);
         System.out.println("Gesamt "+(erster+zweiter));}
     else {  System.out.println("Endergebnis :" +erster);}

    
    
     }
     }
    
    
    
    
     }
      }
 

Anhänge

X

Xyz1

Java:
import java.util.Scanner;

/**
 * @author
 */
public class Macao {
    public static void main(String[] args) {
        int numberOfPlayers;
        Scanner scan = new Scanner(System.in); // Convert to try-with-resource...
        System.out.println("Wie viele Spieler werden am Spiel teilnehmen?");
        numberOfPlayers = scan.nextInt();
        scan.nextLine();
        do {
            int i = 1;
            int[] sums = new int[numberOfPlayers];
            while (i <= numberOfPlayers) {
                boolean foo = true;
                do {
                    System.out.println("Spieler " + i + " ist dran.");
                    int x = (int) (Math.random() * 6) + 1;
                    System.out.println("Spieler " + i + " würfelte eine: " + x + ".");
                    sums[i - 1] += x;
                    System.out.println("Spieler " + i + " hat jetzt: " + sums[i - 1] + ".");
                    if (sums[i - 1] > 9) {
                        System.out.println("Spieler " + i + " hat verloren.");
                        foo = false;
                    } else {
                        System.out.println("Noch einmal würfeln? ('y')");
                        if (!scan.nextLine().contains("y")) {
                            foo = false;
                        }
                    }
                } while (foo);
                i++;
            }
            int max = -1;
            for (int j = 0; j < numberOfPlayers; j++) {
                if (sums[j] <= 9 && (max == -1 || sums[j] > sums[max])) {
                    max = j;
                }
            }
            if (max == -1) {
                System.out.println("Kein Spieler hat gewonnen.");
            } else {
                System.out.println("Spieler " + (max + 1) + " hat mit " + sums[max] + " gewonnen!!!");
            }
            System.out.println("Noch einmal spielen? ('y')");
        } while (scan.nextLine().contains("y"));
        scan.close();
    }
}
 
J

Javinner

Bin jetzt etwas verwirrt, wer bekommt denn jetzt die vierzehn Punkte für das Lösen der Aufgabe? Hm..
 
N

NavaJoob

Die 14 Punkte gehen wohlverdient an Tobias!!!

Vielen lieben Dank dir!
 
X

Xyz1

Verändere es ein bisschen....
Das wäre dann zwar 'Verschleierung' aber bis ich den obigen Code schrittweise entwickelt hätte, hätte ich das nicht bis 24 Uhr hinbekommen.... ;)

Nee sprich mit einem Tutor dadrüber...
 
N

NavaJoob

Klar, ändere ich auf jeden fall noch soweit wie möglich ab, ist ja so noch perfekter als eine Musterlösung. :D

Danke dir wirklich nochmal!:)
 
X

Xyz1

Büdde. (Hatte gerade etwas Leerlauf)
Mich erinnert das ein bisschen an eine Mathe, oder war es Jura?, prüfung an einer Uni bei der bei Beginn der prüfung dann ca 75% der Studierenden krank wurden und danach zu demselben Arzt gegangen sind, um sich einen roten Schein zu holen.... Für die Studierenden war die prüfung eindeutig 'zu schwer' und auch unfair gestellt. Es kamen in der Vorlesung nicht besprochene Inhalte dran. Als 'Protest' wurden also wie abgesprochen alle erst während der prüfung krank. Das hat seitens der Uni einen großen Aufschrei erzeugt, alle sollten einen Fehlversuch bekommen, auch die Drittversuchler. Aber später gab es seitens der Uni einen trade-off. Nicht alle bekamen einen Fehlversuch angerechnet, die meisten mussten ihre Erkrankung nocheinmal attestieren lassen und durften, wenn gewünscht, die prüfung zu einem späteren Zeitpunkt wiederholt schreiben.
Wieso schreibe ich denn jetzt davon? Ich weiß auch nicht genau. Vielleicht um das nicht 'auf die leicht Schulter' zu nehmen. ;)
 
B

Bible Man

Habe mich auch mal daran versucht. Bis dann.
Java:
package macao;

import java.util.Scanner;

public class Macao {

    public static void main(String[] args) {
        int numberOfPlayers = 0;
        Scanner s = new Scanner(System.in);
        int wurf;
        int wuerfelsumme = 0;
        String antwort;
        int[] punkte;

        System.out.println("How many players?");

        while (true) {
            numberOfPlayers = s.nextInt();
            punkte = new int[numberOfPlayers];
            for (int spieler = 1; spieler <= numberOfPlayers; spieler++) {
                System.out.println("NEXT TURN: Player " + spieler);

                wurf = (int) (Math.random() * 6 + 1);
                wuerfelsumme += wurf;
                System.out.print("You rolled a " + wurf + "! ");
                System.out.println("Score: " + wuerfelsumme);

                while (true) {
                    System.out.println("Roll the dice again? Press ’y’ to continue or any other key to quit.");
                    antwort = s.next();
                    if (antwort.equals("y")) {

                        wurf = (int) (Math.random() * 6 + 1);
                        wuerfelsumme += wurf;
                        if (wuerfelsumme > 9) {
                            punkte[spieler - 1] = wuerfelsumme;
                            System.out.println("YOU LOSE!");
                            break;
                        }
                        System.out.print("You rolled a " + wurf + "! ");
                        System.out.println("Score: " + wuerfelsumme);

                    } else{
                        punkte[spieler - 1] = wuerfelsumme;
                        System.out.println("Your final score is: " + punkte[spieler - 1]);
                        break;
                    }
                }
                wuerfelsumme = 0;
            }
            int gewinner = -1;
            for (int i = 0; i < punkte.length; i++) {
                if(punkte[i] <= 9) {
                    if(gewinner != -1) {
                        if(punkte[i] > punkte[gewinner]) {
                            gewinner = i;
                        }
                    } else {
                        gewinner = i;
                    }
                }
            }
            if(gewinner == -1) {
                System.out.println("No one wins");
            } else {
                System.out.println("Player " + (gewinner + 1) + " has won with a score of " + punkte[gewinner]);
            }
            break;
        }
        s.close();
    }
}
 
M

marco20

Hallo ich habe so eine ähnliche Aufgabe bekommen in der Uni aber komme auf keine Lösung. Vielleicht könnte einer mir weiterhelfen. Habe bis jetzt versucht aus den obigen Lösungen für meine Aufgabe die Lösung abzuleiten. Und mir fehlt noch, wie in der Aufgabe verlangt, das unterschieden wird ob bereits 6 oder 7 gewürfelt wurden, womit entschieden wird, ob weiter gewürfelt wird oder nicht. Steht aber nochmal alles in der Aufgabe im Anhang. Würde mich über eine Rückmeldung freuen.



public class Macao {
public static void main(String[] args) {
int numberOfPlayers = 2;
do {
int i = 1;
int[] sums = new int[numberOfPlayers];
while (i <= numberOfPlayers) {
boolean foo = true;
do {
System.out.println("NEXT TURN: Player " + i);
int x = (int) (Math.random() * 6) + 1;
System.out.println("Player " + i + " rolled a " + x + "! Score: " + x);
sums[i - 1] += x;
System.out.println("Player " + i + " rolled a " + sums[i - 1] + "! Score: " + sums[i - 1]);
if (sums[i - 1] > 9) {
System.out.println("Player " + i + " LOST!");
foo = false;
}
} while (foo);
i++;
}
int max = -1;
for (int a = 0; a < numberOfPlayers; a++) {
if (sums[a] <= 9 && (max == -1 || sums[a] > sums[max])) {
max = a;
}
}
if (max == -1) {
System.out.println("No Player has won!");
} else {
System.out.println("Player " + (max + 1) + " has won with a score of " + sums[max] + "!");
}
}
}
 

Anhänge

MoxxiManagarm

MoxxiManagarm

Do hast zu viele do-while-Schleifen drin. Die brauchst du nur beim Würfeln eines Spielers. Die Spieler selbst sollten mit einer for-Schleife iteriert werden. Dein boolean foo ist Blödsinn, deine Bedingung schreibst du direkt rein und betrifft die aktuelle Summe
 
Thema: 

Schleife für ein Würfelspiel

Passende Stellenanzeigen aus deiner Region:
Anzeige

Neue Themen

Anzeige

Anzeige
Oben