Spiel Kniffel: Gesamtes Array untersuchen.

H

Hjal

Mitglied
Hallo zusammen,
Ich habe vor kurzem angefangen Java zu lernen und habe mir als Übungsaufgabe gestellt, dass Spiel Kniffel in etwas vereinfachter Form in Java zu programmieren. Natürlich ersteinmal nur über die Konsole.
Ich habe eine Klasse Spieler erstellt, inder ich den Aktuellen Spielstand einspeichern kann und eine Klasse Wuerfeln, inder ich 5 zufällige Zahlen generiere (zwischen 1 und 6). Diese sollen ein wurf mit 5 Würfeln simulieren.

Nun zu meinem Problem. Nach den Würfen gibt der Nutzer ein in welches Feld sein Ergebnis gespeichert werden soll z.B. ein Full House. Das Programm soll anschließend überprüfen ob die 5 "Würfel" auch tatsächlich ein Full House(3 gleiche Zahlen und 2 andere gleiche Zahlen) ergeben.

Die 5 generierten Würfelaugen habe ich in einem Array gespeichert:

int[] wuerfel = new int[5];
wuerfel[0] = randomZahl();
wuerfel[1] = randomZahl();
wuerfel[2] = randomZahl();
wuerfel[3] = randomZahl();
wuerfel[4] = randomZahl();

Gibt es einen einfachen Weg wie ich die Zahlen in dem Array auf folgende Fälle untersuchen kann?

Dreier Pasch --> mind. drei gleiche Zahlen z.B 1, 5, 5, 2, 5
Vierer Pasch --> mind. vier gleiche Zahlen z.B 3, 3, 2, 3, 3
Full House --> drei gleiche Zahlen + zwei gleiche Zahlen z.B. 4, 4, 3, 3, 3
kleine Straße --> mind. vier aufeinanderfolgende Zahlen z.B 1, 3, 4, 2, 6
Große Straße --> fünf aufeinanderfolgende Zahlen z.B 1, 3, 4, 2, 5

Ich hoffe ich konnte das Problem einigermaßen gut darstellen und hoffe das einer von euch eine Idee hat :)

LG Hjal
 
dayaftereh

dayaftereh

Top Contributor
Ich würde das Array immer erstmal sortieren. Das hilft aber nicht gehen die ganzen Fall Unterscheidung. Ich denke du musst das Naive runter implementiern.
 
mrBrown

mrBrown

Super-Moderator
Mitarbeiter
Sortiere und gleiche und aufeinanderfolgende Zählen.
Und dann nur noch ein switch/if wie viele es jeweils sind.
 
dayaftereh

dayaftereh

Top Contributor
Was du auch machen kannst ist für die sortieren Kombinationen einen eindeutigen HashCode berechnen. Den HashCode kannst du dann in einer Json, Xml oder Properties Datei abspeichern und auf FullHouse, Straße oder co abbilden.

Damit sparst du dir die häßlich if's bzw swiches. Ich würde behaupten dass es viel performanter ist, da du ein einfach lookup in na HashMap machen musst.
 
JCODA

JCODA

Top Contributor
Also... das geht auch einfacher!
Java:
int[] wuerfel = new int[5];
int[] anzahlWuerfe= new int[6];
for (int i = 0; i < wuerfel.length; i++){
     wuerfel[i] = getRandomNumber();//Liefert 0 bis einschließlich 5
     anzahlWuerfe[wuerfel[i]]++;
}
Nun steht bei anzahlWuerfe[index] drin, wie oft index gewürfelt wurde.

Dreier Pasch ist dann, ob 3 in anzahlWuerfe liegt...
Full House ist, ob 3 und 2 drin liegt...
Ich finde diese Art sehr viel eleganter, als HashMaps, externe Dateien usw...
 
mrBrown

mrBrown

Super-Moderator
Mitarbeiter
Also... das geht auch einfacher!
Java:
int[] wuerfel = new int[5];
int[] anzahlWuerfe= new int[6];
for (int i = 0; i < wuerfel.length; i++){
     wuerfel[i] = getRandomNumber();//Liefert 0 bis einschließlich 5
     anzahlWuerfe[wuerfel[i]]++;
}
Nun steht bei anzahlWuerfe[index] drin, wie oft index gewürfelt wurde.

Dreier Pasch ist dann, ob 3 in anzahlWuerfe liegt...
Full House ist, ob 3 und 2 drin liegt...
Stimmt, sortieren vorm zählen kann man sich sparen. Straße wäre dann 0 nur an Anfang/Ende

Ich finde diese Art sehr viel eleganter, als HashMaps, externe Dateien usw...

Dürfte auch schneller sein, und vor allem schneller umzusetzen, man spart sich das händische Eintragen von zig Würfen
 
X

Xyz1

Gast
Ich werfe einfach mal mit Code um sich:
Java:
    private static boolean drei(int[] gewuerfelt) {
        int[] anzahl = new int[7];
        for (int i : gewuerfelt) {
            anzahl[i]++;
        }
        for (int i : anzahl) {
            if (i == 3) {
                return true;
            }
        }
        return false;
    }

    private static boolean vier(int[] gewuerfelt) {
        int[] anzahl = new int[7];
        for (int i : gewuerfelt) {
            anzahl[i]++;
        }
        for (int i : anzahl) {
            if (i == 4) {
                return true;
            }
        }
        return false;
    }

    private static boolean full(int[] gewuerfelt) {
        int[] anzahl = new int[7];
        for (int i : gewuerfelt) {
            anzahl[i]++;
        }
        boolean b2 = false, b3 = false;
        for (int i : anzahl) {
            if (i == 2) {
                b2 = true;
            }
            if (i == 3) {
                b3 = true;
            }
            if (b2 && b3) {
                return true;
            }
        }
        return false;
    }

    @NotImplementedYet
    private static boolean klein(int[] gewuerfelt) {
        throw new UnsupportedOperationException();
    }

    private static boolean gross(int[] gewuerfelt) {
        gewuerfelt = Arrays.copyOf(gewuerfelt, gewuerfelt.length);
        Arrays.sort(gewuerfelt);
        for (int i = 0; i < gewuerfelt.length - 1; i++) {
            if (gewuerfelt[i] != gewuerfelt[i + 1] - 1) {
                return false;
            }
        }
        return true;
    }

Wegen klein schaue mal hier: http://stackoverflow.com/questions/15671620/small-straight-method

Das Problem ist, dass vier auch drei sein kann, full auch drei sein kann und gross auch klein sein kann . . . . Deswegen in umgekehrter Reihenfolge:
Java:
            if (gross(ia)) {
                System.out.println("gross");
            }
//            if (klein(ia)) {
//                System.out.println("klein");
//            }
            if (full(ia)) {
                System.out.println("full");
            }
            if (vier(ia)) {
                System.out.println("vier");
            }
            if (drei(ia)) {
                System.out.println("drei");
            }

Mit if und Else ! ! ! !
 
X

Xyz1

Gast
Sorry, drei kann auch vier sein, drei kann auch full sein und klein kann auch groß sein. :S

Insgesamt ist das wohl ziemlich Frikadelle, also besser das mit dem Hash. (vorher aber bitte Sortieren)
 
H

Hjal

Mitglied
Habe beim Würfel jetzt den Counter für die Anzahl genommen wie JCODA vorgeschlagen.

Für das Auswerten habe ich folgendes gemacht:
Java:
 boolean isDreierTrue = false;
isDreierTrue = IntStream.of(var.anzahlWuerfe).anyMatch(x -> x >= 3);

boolean isViererTrue = false;
isViererTrue = IntStream.of(var.anzahlWuerfe).anyMatch(x -> x == 4);

boolean isFullHouseTrue = false;
isFullHouseTrue = IntStream.of(var.anzahlWuerfe).anyMatch(x -> x == 3) && IntStream.of(var.anzahlWuerfe).anyMatch(x -> x == 2);

boolean isHitTrue = false;
isFullHouseTrue = IntStream.of(var.anzahlWuerfe).anyMatch(x -> x == 5);


Vielleicht gibt es elegantere Lösungen aber es funktioniert auf jeden Fall :)

Noch eine kleiner andere Frage, wie kann ich den Code wie bei euch in ein eigenes Feld schreiben? :D
 
Zuletzt bearbeitet:
Blender3D

Blender3D

Top Contributor
Code:
import java.util.Random;

public class Dices {
    private int[] result = new int[6];
    private final int NUM_DICES = 5;

    public void clear() {
        for (int i = 0; i < result.length; i++)
            result[i] = 0;
    }

    private boolean isConnectedCount(int num) {
        int cnt = 0;
        for (int i = 0; i < result.length; i++) {
            cnt = (result[i] == 0) ? 0 : cnt + 1;
            if (cnt == num)
                return true;
        }
        return false;
    }

    public int[] getResult() {
        return result;
    }

    public boolean isBigStreet() {
        return isConnectedCount(5);
    }

    public boolean isFourOfAKind() {
        for (int i = 0; i < result.length; i++) {
            if (result[i] == 4)
                return true;
        }
        return false;
    }

    public boolean isFullHouse() {
        if (!isThreeOfAKind())
            return false;
        for (int i = 0; i < result.length; i++) {
            if (result[i] == 2)
                return true;
        }
        return false;
    }

    public boolean isSmallStreet() {
        return isConnectedCount(4);
    }

    public boolean isThreeOfAKind() {
        for (int i = 0; i < result.length; i++) {
            if (result[i] == 3)
                return true;
        }
        return false;
    }

    public void rollDice() {
        Random rnd = new Random(System.currentTimeMillis());
        clear();
        for (int i = 0; i < NUM_DICES; i++)
            result[Math.abs(rnd.nextInt() % 6)]++;
    }

    @Override
    public String toString() {
        StringBuffer tmp = new StringBuffer();
        for (int i = 0; i < result.length; i++) {
            int cnt = result[i];
            while (cnt > 0) {
                tmp.append("[" + (i + 1) + "] ");
                cnt--;
            }
        }
        return tmp.toString();
    }
}
So könnte man es auch machen!
;)
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
Z Kein überprüfen des gesamten Arrays möglich.(Viergewinnt Spiel) Java Basics - Anfänger-Themen 6
G Ufo Spiel programmieren Java Basics - Anfänger-Themen 13
C Java Spiel Java Basics - Anfänger-Themen 3
J Spiel programmieren Java Basics - Anfänger-Themen 16
S Spiel-Programmieren. Wenn ein Objekt den anderen berührt. Java Basics - Anfänger-Themen 6
B Memory Spiel Java Basics - Anfänger-Themen 29
J Memory-Spiel Aktivierung der Methode mit Timer Java Basics - Anfänger-Themen 44
Kamy Ein einfaches "Vier Gewinnt" Spiel für Anfängerin Java Basics - Anfänger-Themen 51
A Breakout-Spiel , Ball mit Platten abprallen lassen Java Basics - Anfänger-Themen 1
S Spiel programmieren mit Java Java Basics - Anfänger-Themen 11
Olis Erste Schritte Simples Memory Spiel möglich? Java Basics - Anfänger-Themen 1
J Spiel mit Button klick starten Java Basics - Anfänger-Themen 9
C Rekursives Backtracking beim Spiel Peg Java Basics - Anfänger-Themen 22
M Spiel programmieren Java Basics - Anfänger-Themen 16
Spencer Reid Feedback zu kleinem Spiel Java Basics - Anfänger-Themen 4
kokojamboo92 Spiel programmieren Java Basics - Anfänger-Themen 1
R Kleines Java Spiel funktioniert nicht. Java Basics - Anfänger-Themen 2
I Spiel Java Basics - Anfänger-Themen 34
H ein einfaches Tic Tac Toe Spiel Java Basics - Anfänger-Themen 1
I Spiel programmieren. Java Basics - Anfänger-Themen 16
B Hilfe bei Escape - Spiel Java Basics - Anfänger-Themen 6
S Java-Spiel Java Basics - Anfänger-Themen 2
M Nim-Spiel geht in den negativen Bereich Java Basics - Anfänger-Themen 1
K Klassen Registrierungsseite für ein Spiel Java Basics - Anfänger-Themen 6
J Programmierung Quiz Spiel Java Basics - Anfänger-Themen 3
J Programmierung Quiz Spiel Java Basics - Anfänger-Themen 2
M Brauche Tipps für ein Spiel Java Basics - Anfänger-Themen 4
S Probleme mit GamGrid Spiel-Erstellung => Actor reagiert nicht auf Tastatur Java Basics - Anfänger-Themen 2
Mxxxt Mosaik Spiel - Steuerpanel wird nicht angezeigt Java Basics - Anfänger-Themen 5
M Erste Schritte Zufallszahl Spiel Problem Java Basics - Anfänger-Themen 7
Z Erste Schritte Kleines 2D. Spiel Objekt Bewegung funktioniert nicht Java Basics - Anfänger-Themen 2
Tacofan Hangman als fertiges Spiel Java Basics - Anfänger-Themen 7
M Array und Objektorientierung? - TicTacToe Spiel Java Basics - Anfänger-Themen 43
C Klassen Sudoku-Spiel Werte werden nicht gesetzt Java Basics - Anfänger-Themen 4
K Kleines Spiel auf Java programmieren Java Basics - Anfänger-Themen 2
W Tic Tac Toe Spiel ohne Arrays Java Basics - Anfänger-Themen 7
S Im objektorientiertem "Spiel" kämpfen Java Basics - Anfänger-Themen 3
I Klassen Umsetzungsfrage zu Spiel "Zuul" Java Basics - Anfänger-Themen 3
F Mastermind Spiel Java Basics - Anfänger-Themen 9
H Liste ausgeben (Spiel Hey Fisch (software-challenge) ändern Anzahl Fische) Java Basics - Anfänger-Themen 1
F Game-Engine für textbasierendes Spiel: Architektur? Java Basics - Anfänger-Themen 9
K Erste Schritte Frage Antwort Spiel - Fragen zur Planung Java Basics - Anfänger-Themen 2
J Java Spiel Zufallsauswahl für Zugbeginn Java Basics - Anfänger-Themen 3
J Frage Antwort Spiel - Wie Zeitcountdown realisieren? Java Basics - Anfänger-Themen 2
L Erste Schritte Spiel: Glückliches Sieben Java Basics - Anfänger-Themen 3
T Hangman spiel Java Basics - Anfänger-Themen 5
J 2 Pc's - Spiel gegeneinander ?! Java Basics - Anfänger-Themen 3
V Spiel Programmieren Java Basics - Anfänger-Themen 9
P 2D-Spiel und Bildschirmgröße Java Basics - Anfänger-Themen 2
O Methoden Fehlermeldung(Illegal start of expression) bei 4-Gewinnt-Spiel Java Basics - Anfänger-Themen 5
T Blöcke für ein Jump and Run Spiel Java Basics - Anfänger-Themen 8
S 2D-Spiel mit Threads... Java Basics - Anfänger-Themen 3
S 2D-Spiel im Vollbild an größe anpassen? Java Basics - Anfänger-Themen 3
M hangman spiel Java Basics - Anfänger-Themen 1
K JTextField in ein Spiel einfügen Java Basics - Anfänger-Themen 2
S Mosaik Spiel Java Basics - Anfänger-Themen 19
P memory spiel Java Basics - Anfänger-Themen 10
T OOP Mein erstes Java-Spiel - Schiffe versenken! Java Basics - Anfänger-Themen 2
K Erste Schritte Wie mache ich weiter? (Spiel-Menü) Java Basics - Anfänger-Themen 9
C Java Applet in html. Pong - old school Spiel Java Basics - Anfänger-Themen 10
J Variablen Invalid Character - Error -> Spiel mit Variablenergebnissen Java Basics - Anfänger-Themen 8
K Schere Stein Papier Spiel Java Basics - Anfänger-Themen 3
A Feedback zum Spiel Java Basics - Anfänger-Themen 5
F Hilfe bei meinem Spiel Java Basics - Anfänger-Themen 3
C Lotto Spiel Java Basics - Anfänger-Themen 23
Jagson Dotcom Spiel - Dots Random setzen Java Basics - Anfänger-Themen 8
Dogge Farben-Spiel Java Basics - Anfänger-Themen 20
K Diverse Bugs in einem Snake Spiel Java Basics - Anfänger-Themen 4
2 Lotto-Spiel Java Basics - Anfänger-Themen 9
X Datentypen Probleme mit Char bei meinem 1. Spiel Java Basics - Anfänger-Themen 20
D Erste Schritte Einstieg in die Java Spiel Programmierung Java Basics - Anfänger-Themen 7
H kleines Spiel [Processing] Java Basics - Anfänger-Themen 7
P NullPointerException in Memory-Spiel Java Basics - Anfänger-Themen 5
R Server/Client für Spiel Java Basics - Anfänger-Themen 2
K Hilfe, komme nicht weiter in meinem JAVA-Spiel Java Basics - Anfänger-Themen 3
J Programm(Spiel) neustarten Java Basics - Anfänger-Themen 8
M Suche Beispiel-Spiel Java Basics - Anfänger-Themen 3
C Java Nullpointer Exception in 2D-Spiel Snake Java Basics - Anfänger-Themen 8
M Apfel-Spiel KeyListener Java Basics - Anfänger-Themen 33
J Ranking für Spiel einbauen Java Basics - Anfänger-Themen 12
J Schere, Stein, Papier Spiel - Logikfrage Java Basics - Anfänger-Themen 6
N Lotto Spiel Java Basics - Anfänger-Themen 12
P Schachbrett Spiel Nr. 01 Java Basics - Anfänger-Themen 17
S Nimm Spiel Java Basics - Anfänger-Themen 2
F Spiel geht nicht mehr nach neuer Klasse Sound Java Basics - Anfänger-Themen 18
P Lotto Spiel Java Basics - Anfänger-Themen 50
J BlueJ! 2 kleine Fragen zum Spiel. Java Basics - Anfänger-Themen 3
F Text in Spiel einbinden Java Basics - Anfänger-Themen 17
S Ziel in Spiel einbauen Java Basics - Anfänger-Themen 4
M Java-Programm wird beendet, wenn ich Spiel öffne... Java Basics - Anfänger-Themen 11
G Spiel des Lebens Java Basics - Anfänger-Themen 3
U Bitte Helfen kleines Spiel Java Basics - Anfänger-Themen 9
K Kleines Spiel / Daten speichern Java Basics - Anfänger-Themen 8
T Kleines Spiel realisieren - wie? Java Basics - Anfänger-Themen 6
S Spiel automat -Bilder vergleichen Java Basics - Anfänger-Themen 3
L Hangman! Spiel Java Basics - Anfänger-Themen 5
M Hangman Spiel Java Basics - Anfänger-Themen 17
C Kleines 2D Spiel. Problem. Java Basics - Anfänger-Themen 5
J Starthilfe für ein "simples" Spiel Java Basics - Anfänger-Themen 2
I Memory-Spiel Feld nur einmal mischen Java Basics - Anfänger-Themen 2

Ähnliche Java Themen

Anzeige

Neue Themen


Oben