From 383e89566314f9eb1f65665b42060aa0836a9def Mon Sep 17 00:00:00 2001 From: bluml <blumluan@gmail.com> Date: Sun, 23 Apr 2023 20:46:39 +0200 Subject: [PATCH] UNO --- src/Regelwerk.java | 21 +++++++++++---------- src/SpielerHand.java | 19 +++++++++++++------ src/UNO.java | 15 +++++---------- src/UnoDeck.java | 20 +++++++++++++------- 4 files changed, 42 insertions(+), 33 deletions(-) diff --git a/src/Regelwerk.java b/src/Regelwerk.java index a490c5b..02f6802 100644 --- a/src/Regelwerk.java +++ b/src/Regelwerk.java @@ -16,10 +16,10 @@ public class Regelwerk { reihenfolge.add(3, 3); } - public UnoKarte ersteKarte(UnoDeck hand, int zug) { + public UnoKarte ersteKarte(UnoDeck hand, int zug, int anzahl) { if (zug == 1) { Random rand = new Random(); - int n = rand.nextInt(53); + int n = rand.nextInt(anzahl); UnoKarte aktuellekarte = hand.get(n); System.out.println("Die Aktuelle Karte:"); System.out.println(aktuellekarte); @@ -45,6 +45,7 @@ public class Regelwerk { public boolean karteLegbar(UnoKarte aktuellekarte, UnoKarte neueKarte, String PlayerName[], UnoDeck deck, SpielerHand spielerHand) { if (color.size() == 2) { + System.out.println("Wunchfarbe: " + color.get(1)); if ((color.get(1) == neueKarte.getFarbe()) || (color.get(0) == neueKarte.getFarbe())) { color.remove(1); return Lege(aktuellekarte, neueKarte, PlayerName, deck, spielerHand); @@ -57,9 +58,9 @@ public class Regelwerk { } public boolean Lege(UnoKarte aktuellekarte, UnoKarte neueKarte,String PlayerName[], UnoDeck deck, SpielerHand spielerHand){ - if ((aktuellekarte.getFarbe() == neueKarte.getFarbe()) || (Farbe.Wild == neueKarte.getFarbe()) || (Farbe.Wild != neueKarte.getFarbe())) { + if ((aktuellekarte.getFarbe() == neueKarte.getFarbe()) || (Farbe.Wild == neueKarte.getFarbe()) || ((aktuellekarte.getFarbe() == Farbe.Wild) && (Farbe.Wild != neueKarte.getFarbe()))) { if (neueKarte.getWert() == Wert.Zwei_Ziehen) { - zweiZiehen(PlayerName, deck, 2, spielerHand); + Ziehen(PlayerName, deck, 2, spielerHand); } else if (neueKarte.getWert() == Wert.Aussetzen) { aussetzen(); } else if (neueKarte.getWert() == Wert.Richtungswechsel) { @@ -68,12 +69,12 @@ public class Regelwerk { wunschFarbe(); }else if (neueKarte.getWert() == Wert.Draw_Four) { wunschFarbe(); - zweiZiehen(PlayerName, deck, 4, spielerHand); + Ziehen(PlayerName, deck, 4, spielerHand); } return true; - } else if ((aktuellekarte.getWert() == neueKarte.getWert()) || (Farbe.Wild == neueKarte.getFarbe()) || (Farbe.Wild != neueKarte.getFarbe())) { + } else if ((aktuellekarte.getWert() == neueKarte.getWert()) || (Farbe.Wild == neueKarte.getFarbe()) || ((aktuellekarte.getFarbe() == Farbe.Wild) && (Farbe.Wild != neueKarte.getFarbe()))) { if (neueKarte.getWert() == Wert.Zwei_Ziehen) { - zweiZiehen(PlayerName, deck, 2, spielerHand); + Ziehen(PlayerName, deck, 2, spielerHand); } else if (neueKarte.getWert() == Wert.Aussetzen) { aussetzen(); } else if (neueKarte.getWert() == Wert.Richtungswechsel) { @@ -82,13 +83,13 @@ public class Regelwerk { wunschFarbe(); }else if (neueKarte.getWert() == Wert.Draw_Four) { wunschFarbe(); - zweiZiehen(PlayerName, deck, 4, spielerHand); + Ziehen(PlayerName, deck, 4, spielerHand); } return true; } return false; } - public void zweiZiehen(String PlayerName[], UnoDeck deck, int anzahl,SpielerHand spielerHand){ + public void Ziehen(String PlayerName[], UnoDeck deck, int anzahl,SpielerHand spielerHand){ int spieler = reihenfolge.get(0); spielerHand.befuelleSpieleHand(spieler, deck, anzahl); } @@ -114,7 +115,7 @@ public class Regelwerk { reihenfolge.add(zwischen); } public void wunschFarbe(){ - System.out.println("Welche Farbe möchteswt du?(Gruen, Blau, Gelb, Rot"); + System.out.println("Welche Farbe möchteswt du?(Gruen, Blau, Gelb, Rot)"); switch (scanner.nextLine().toLowerCase()){ case "gruen": color.add(Farbe.Gruen); diff --git a/src/SpielerHand.java b/src/SpielerHand.java index d0bf16a..574eea8 100644 --- a/src/SpielerHand.java +++ b/src/SpielerHand.java @@ -14,16 +14,18 @@ public class SpielerHand{ } } - public void fuegeKarteHinzu(int spielerIndex, UnoDeck hand, int kartenIndex) { - UnoKarte karte = hand.get(kartenIndex); + public void fuegeKarteHinzu(int spielerIndex, UnoDeck deck, int kartenIndex) { + UnoKarte karte = deck.get(kartenIndex); spielerHaende.get(spielerIndex).add(karte); + deck.hand.remove(kartenIndex); //Diese Fuktion fügt karten in die Hand des jeweiligen spielers } - public void entferneKarteHand(int spielerIndex, int kartenIdex, UnoDeck hand, int zug){ + public void entferneKarteHand(int spielerIndex, int kartenIdex, UnoDeck deck, int zug){ Regelwerk regel = new Regelwerk(); kartenIdex = kartenIdex-1; regel.aktuelleKarte(spielerHaende.get(spielerIndex).get(kartenIdex)); + deck.hand.add(spielerHaende.get(spielerIndex).get(kartenIdex)); spielerHaende.get(spielerIndex).remove(kartenIdex); //Diese Methode entfernt eine Karte aus der Hand des Spielers } @@ -39,13 +41,18 @@ public class SpielerHand{ System.out.println(); //Diese Methode zeigt die Hand des Spielers } - public void befuelleSpieleHand(int spielerIndex, UnoDeck hand, int anzahl){ + public void befuelleSpieleHand(int spielerIndex, UnoDeck deck, int anzahl){ Random rand = new Random(); for (int i = 0; i < anzahl; i++) { - int n = rand.nextInt(53); - fuegeKarteHinzu(spielerIndex, hand, n); + int n = rand.nextInt(deck.hand.size()); + fuegeKarteHinzu(spielerIndex, deck, n); } //Diese Methode gibt die Anzhal der Karten die der Spieler bekommen soll und wählt die zufähligge karte aus } + public void ranking(){ + for (int i = 0; i < spielerHaende.size(); i++){ + System.out.println(spielerNamen[i] + " Menge an Karten: " +spielerHaende.get(i).size()); + } + } } diff --git a/src/UNO.java b/src/UNO.java index b908863..1e4a933 100644 --- a/src/UNO.java +++ b/src/UNO.java @@ -1,4 +1,3 @@ - import java.util.Scanner; public class UNO { @@ -41,7 +40,7 @@ public class UNO { } SpielerHand spielerHand = new SpielerHand(PlayerName[0], PlayerName[1], PlayerName[2], PlayerName[3]); - spielerHand.befuelleSpieleHand(0,deck,30); + spielerHand.befuelleSpieleHand(0,deck,7); spielerHand.befuelleSpieleHand(1,deck,7); spielerHand.befuelleSpieleHand(2,deck,7); spielerHand.befuelleSpieleHand(3,deck,7); @@ -52,9 +51,9 @@ public class UNO { //GameLoop: boolean win = false; int zug = 1; - UnoKarte aktuelleKarte = regel.ersteKarte(deck,zug); + UnoKarte aktuelleKarte = regel.ersteKarte(deck,zug,deck.hand.size()); int legeKarte; - boolean geht = false; + boolean geht = false; //Das boolean hilft bei der kontrolle ob die Karte legbar ist!!!! while (!win) { System.out.println("Zum Zug Starten, Start schreiben"); if("start" .equals(scanner.nextLine().toLowerCase())) { @@ -124,16 +123,12 @@ public class UNO { } } if(spielerHand.spielerHaende.get(spieler).size() == 0){ + spielerHand.ranking(); win = true; } } } - - - - //Game Loop - - } } } + diff --git a/src/UnoDeck.java b/src/UnoDeck.java index c1ae3a9..e0eedeb 100644 --- a/src/UnoDeck.java +++ b/src/UnoDeck.java @@ -22,7 +22,7 @@ public class UnoDeck { //Diese Methode mischt die UnoHand } - public void zeigeHand() { + public void zeigeDeck() { for (UnoKarte karte : hand) { System.out.println(karte); //Diese Methode gibt das Array der UnoHand aus @@ -65,14 +65,20 @@ public class UnoDeck { } for (int zahl = 0; zahl <= 9; zahl++) { fuegeKarteHinzu(new UnoKarte(farbe, wertVonZahl(zahl))); + if (zahl != 0) { + fuegeKarteHinzu(new UnoKarte(farbe, wertVonZahl(zahl))); + } + } + for (int i = 0; i < 2; i++) { + fuegeKarteHinzu(new UnoKarte(farbe, Wert.Richtungswechsel)); + fuegeKarteHinzu(new UnoKarte(farbe, Wert.Aussetzen)); + fuegeKarteHinzu(new UnoKarte(farbe, Wert.Zwei_Ziehen)); } - fuegeKarteHinzu(new UnoKarte(farbe, Wert.Richtungswechsel)); - fuegeKarteHinzu(new UnoKarte(farbe, Wert.Aussetzen)); - fuegeKarteHinzu(new UnoKarte(farbe, Wert.Zwei_Ziehen)); } - fuegeKarteHinzu(new UnoKarte(Farbe.Wild, Wert.Multicolor)); - fuegeKarteHinzu(new UnoKarte(Farbe.Wild, Wert.Draw_Four)); - + for (int i = 0; i < 4; i++) { + fuegeKarteHinzu(new UnoKarte(Farbe.Wild, Wert.Multicolor)); + fuegeKarteHinzu(new UnoKarte(Farbe.Wild, Wert.Draw_Four)); + } //Diese Methode verbindet die Farben und die Zahlen der jeweiligen enums } } -- GitLab