Erste Schritte Wuerfelspiel mit Math.random()

Thorwine

Mitglied
Hallo Java.Community!

Ich bin Umsteiger von VB.net auf Java und habe vor vielen Jahren Fachinformatiker (Anwendungsentwicklung) gelernt. Allerdings habe ich mich in den letzten 10 Jahren mehr auf Systemintegration, Netzwerke und Administration spezialisiert und code jetzt nur noch aus Spiel, Spaß und Entspannung 🙂

Ich hab grad in der Mittagspause ein simples Wuerfelspiel gebastelt, das die Math.random() Funktion nutzt, mit der ich noch etwas auf Klappstuhl stehe. Es scheint schon zu funktionieren, aber ich wuesste gerne, was ich besser machen kann, was evt. nicht den Konventionen entspricht, oder was ich weglassen kann.

Koennte mal bitte jemand drueberschauen und bissl was dazu sagen?
Ich wuerde mich sehr freuen! DANKE!

Java:
package mypackage;

import javax.swing.*;

public class Wuerfelspiel {

    public static void main(String[] args) {
        String sAnzahlWuerfel;
        int iAnzahlWuerfel = 0;

        String sAnzahlSeiten;
        int iAnzahlSeiten = 0;

        int iMin = 0;
        int iMax = 0;
        int ergebnis = 0;

        sAnzahlWuerfel = JOptionPane.showInputDialog("Wieviele Wuerfel?");
        iAnzahlWuerfel = Integer.parseInt(sAnzahlWuerfel);

        sAnzahlSeiten = JOptionPane.showInputDialog("Wieviele Seiten haben die Wuerfel?");
        iAnzahlSeiten = Integer.parseInt(sAnzahlSeiten);

        iMin = iAnzahlWuerfel;
        iMax = iAnzahlWuerfel * iAnzahlSeiten;

        ergebnis = (int) (Math.random() * iMax) + iMin;
        JOptionPane.showMessageDialog(null, "Ergebnis: " + ergebnis);
    }
}
 
Das entspricht von der Wahrscheinlichkeit her ja nicht dem Würfelspiel.

Wenn Du mit 2 Würfeln würfelst, die jeweils 6 Seiten haben, dann ist zwar der kleinste Wurf 1 und der größte mögliche Wurf 12, aber die Wahrscheinlichkeit für eine 2 oder 12 ist doch nicht so hoch, wie für eine 7. Für die 2 oder 12 gibt es nur eine Kombination. Aber die die 7 gibt es ganz viele Kombinationen:
1 + 6
2 + 5
3 + 4
4 + 3
5 + 2
6 + 1
Also eine 6fach höhere Wahrscheinlichkeit. Und das bildest Du ja nicht ab.
 
Deklariere die Variablen erst wenn du sie benötigst.
-> Bei deinem Code deklarierst du zuerst alle Variablen und dananch beginnt der eigentliche Code, dadurch wird der Code unnötig lange und du musst dir für die Variablen Initialisierungswert überlegen (unnötig).
Hier eine bessere Beschreibung dazu: http://c2.com/cgi/wiki?DeclareVariablesAtFirstUse

Vermeide bei den Variablen Prefixe wie "i" für die int Variablen.
-> unnötige Schreibarbeite und auch nicht wirklich lesbar

Die Variablen "sAnzahlWuerfel" und "sAnzahlSeiten" werden nur gebraucht um den eingegeben Wert zu speichern und diesen danach in ein int umzuwandeln. Deklariere stattdessen eine String Variable "input" und verwende diese für die eingelesenen Sachen.
-> Wozu 2 Variablen deklarieren welche nur für ein "kurzes" Zwischenspeichern gebraucht werden, wenn es mit einer auch geht

Ansonsten gibts nicht viel zu sagen 🙂
 
@kneitzel Danke fuer den Hinweis, das ist natuerlich absolut richtig!
Aber diese Geschichte uebersteigt (zumindest fuer den Moment!) meine Faehigkeiten, vorallem mit einer variablen Anzahl von Wuerfeln und deren Seiten...
Ich bin doch schon ganz gluecklich, das so hinzubekommen 😀
 
Also ich bin fest davon überzeugt, dass Du jetzt Dein Licht unter einen Scheffel stellst....

Ich bin sicher, dass Du eine Schleife hin bekommst. Und dann kannst Du ja einfach so oft würfeln, wie es Würfel geben soll. Und das Ergebnis wird dann so nach und nach zusammen gezählt. Willst Du es mal versuchen? Und dabei die Vorschläge / Hinweise von Joose einarbeiten?
 
@Joose Ich schaetze, man sieht da noch meine roots, wie ich es in VB mal gelernt habe 😕
Danke fuer die Tipps, siehe unten...

@kneitzel Danke fuer die Motivation, Schleifchen sollte ich hinbekommen Erst noch eine Version mit dem gleichen Stand, aber Jooses Gedanken eingebaut:

Java:
package mypackage;

import javax.swing.*;

public class Wuerfelspiel {

    public static void main(String[] args) {
    
        String input;
    
        input = JOptionPane.showInputDialog("Wieviele Wuerfel?");
        int anzahlWuerfel = Integer.parseInt(input);
    
        input = JOptionPane.showInputDialog("Wieviele Seiten haben die Wuerfel?");
        int anzahlSeiten = Integer.parseInt(input);
    
        int min = anzahlWuerfel;
        int max = anzahlWuerfel * anzahlSeiten;

        int ergebnis = 0;
        ergebnis = (int) (Math.random() * max) + min;
        JOptionPane.showMessageDialog(null, "Ergebnis: " + ergebnis);
    }
}

Sollte ich die Variablen min und max auch weglassen und dafuer anzahlWuerfel und anzahlSeiten direkt in die Math.random() Funktion einsetzen?
 
Zuletzt bearbeitet:
Sollte ich die Variablen min und max auch weglassen und dafuer anzahlWuerfel und anzahlSeiten direkt in die Math.random() Funktion einsetzen?

Darüber lässt sich streiten 😉
Für Anfänger ist diese Variante sicher die lesbarere und sicherere. Aber natürlich sollte man den Code einfach halten -> Sprich bei einer komplexeren Rechnung ist es vielleicht von Vorteil Zwischenergebenisse auszurechnen oder ähnliches.
 
OK, dann lass ich diesen Code mal so als Wuerfelspiel1 stehen und versuche mich an kneitzels Gedanken mit der Schleife. Danke fuer's Erste! 🙂
 
So, dann hau ich noch einen raus vor dem Wochenende. Schaut's euch bitte mal an, geht das so durch?

Java:
package mypackage;

import javax.swing.*;

public class Wuerfelspiel2 {

    public static void main(String[] args) {

        String input;

        input = JOptionPane.showInputDialog("Wieviele Wuerfel?");
        int anzahlWuerfel = Integer.parseInt(input);

        input = JOptionPane.showInputDialog("Wieviele Seiten haben die Wuerfel?");
        int anzahlSeiten = Integer.parseInt(input);

        int ergebnis = 0;
        for (int counter = 1; counter <= anzahlWuerfel; counter++) {
            int wurf = (int) (Math.random() * anzahlSeiten) + 1;
            ergebnis = ergebnis + wurf;
        }

        JOptionPane.showMessageDialog(null, "Ergebnis: " + ergebnis);
    }
}

Allen schonmal vielen Dank fuer eure konstruktive Kritik und ein schoenes Wochenende! 🙂
 
Ja super! Also komm mir nicht noch einmal mit "übersteigt meine Fähigkeiten" 🙂

Also einfach trauen und wenn Du irgendwo doch mal hängst, dann kommst Du einfach ins Forum damit und dann wird Dir schon weiter geholfen!
 

Zurück
Oben