diff --git a/.idea/workspace.xml b/.idea/workspace.xml index 6874a1a978a5f5695e8da9f1844c28dc4dda18f5..387eb97ae37bf6306a6a01e684c004ad77ada2b6 100644 --- a/.idea/workspace.xml +++ b/.idea/workspace.xml @@ -4,10 +4,13 @@ <option name="autoReloadType" value="SELECTIVE" /> </component> <component name="ChangeListManager"> - <list default="true" id="8ee76397-4d4b-4c15-b3e9-7f1b49a6172e" name="Changes" comment=""> + <list default="true" id="8ee76397-4d4b-4c15-b3e9-7f1b49a6172e" name="Changes" comment="UNO"> <change beforePath="$PROJECT_DIR$/.idea/workspace.xml" beforeDir="false" afterPath="$PROJECT_DIR$/.idea/workspace.xml" afterDir="false" /> <change beforePath="$PROJECT_DIR$/src/Regelwerk.java" beforeDir="false" afterPath="$PROJECT_DIR$/src/Regelwerk.java" afterDir="false" /> + <change beforePath="$PROJECT_DIR$/src/SpielerHand.java" beforeDir="false" afterPath="$PROJECT_DIR$/src/SpielerHand.java" afterDir="false" /> <change beforePath="$PROJECT_DIR$/src/UNO.java" beforeDir="false" afterPath="$PROJECT_DIR$/src/UNO.java" afterDir="false" /> + <change beforePath="$PROJECT_DIR$/src/UnoDeck.java" beforeDir="false" afterPath="$PROJECT_DIR$/src/UnoDeck.java" afterDir="false" /> + <change beforePath="$PROJECT_DIR$/src/UnoKarte.java" beforeDir="false" afterPath="$PROJECT_DIR$/src/UnoKarte.java" afterDir="false" /> </list> <option name="SHOW_DIALOG" value="false" /> <option name="HIGHLIGHT_CONFLICTS" value="true" /> @@ -26,19 +29,19 @@ <option name="hideEmptyMiddlePackages" value="true" /> <option name="showLibraryContents" value="true" /> </component> - <component name="PropertiesComponent"><![CDATA[{ - "keyToString": { - "RunOnceActivity.OpenProjectViewOnStart": "true", - "RunOnceActivity.ShowReadmeOnStart": "true", - "WebServerToolWindowFactoryState": "false", - "last_opened_file_path": "C:/Users/bluml/IdeaProjects/untitled4/src", - "node.js.detected.package.eslint": "true", - "node.js.detected.package.tslint": "true", - "node.js.selected.package.eslint": "(autodetect)", - "node.js.selected.package.tslint": "(autodetect)", - "vue.rearranger.settings.migration": "true" + <component name="PropertiesComponent">{ + "keyToString": { + "RunOnceActivity.OpenProjectViewOnStart": "true", + "RunOnceActivity.ShowReadmeOnStart": "true", + "WebServerToolWindowFactoryState": "false", + "last_opened_file_path": "C:/Users/bluml/IdeaProjects/untitled4/src", + "node.js.detected.package.eslint": "true", + "node.js.detected.package.tslint": "true", + "node.js.selected.package.eslint": "(autodetect)", + "node.js.selected.package.tslint": "(autodetect)", + "vue.rearranger.settings.migration": "true" } -}]]></component> +}</component> <component name="RecentsManager"> <key name="CopyFile.RECENT_KEYS"> <recent name="C:\Users\bluml\IdeaProjects\untitled4\src" /> @@ -69,11 +72,24 @@ <option name="number" value="Default" /> <option name="presentableId" value="Default" /> <updated>1682062534174</updated> - <workItem from="1682062535374" duration="6911000" /> + <workItem from="1682062535374" duration="7279000" /> + <workItem from="1682084928918" duration="2023000" /> </task> + <task id="LOCAL-00001" summary="UNO"> + <created>1682074031978</created> + <option name="number" value="00001" /> + <option name="presentableId" value="LOCAL-00001" /> + <option name="project" value="LOCAL" /> + <updated>1682074031978</updated> + </task> + <option name="localTasksCounter" value="2" /> <servers /> </component> <component name="TypeScriptGeneratedFilesManager"> <option name="version" value="3" /> </component> + <component name="VcsManagerConfiguration"> + <MESSAGE value="UNO" /> + <option name="LAST_COMMIT_MESSAGE" value="UNO" /> + </component> </project> \ No newline at end of file diff --git a/src/Regelwerk.java b/src/Regelwerk.java index b3d89994fd1b84a362180085f311c4678a67ab4b..a490c5babc19a46cd7909c343e5e9d77dc2d11b7 100644 --- a/src/Regelwerk.java +++ b/src/Regelwerk.java @@ -1,20 +1,23 @@ import java.util.ArrayList; import java.util.Random; +import java.util.Scanner; -public class Regelwerk { +public class Regelwerk { + Scanner scanner = new Scanner(System.in); public ArrayList<Integer> reihenfolge; + public ArrayList<Farbe> color; - public void reihenfolgeFestlegen(){ + public void reihenfolgeFestlegen() { reihenfolge = new ArrayList<Integer>(); - reihenfolge.add(0,0); - reihenfolge.add(1,1); - reihenfolge.add(2,2); - reihenfolge.add(3,3); + reihenfolge.add(0, 0); + reihenfolge.add(1, 1); + reihenfolge.add(2, 2); + reihenfolge.add(3, 3); } - public UnoKarte ersteKarte(UnoDeck hand, int zug){ - if(zug == 1) { + public UnoKarte ersteKarte(UnoDeck hand, int zug) { + if (zug == 1) { Random rand = new Random(); int n = rand.nextInt(53); UnoKarte aktuellekarte = hand.get(n); @@ -24,83 +27,107 @@ public class Regelwerk { } return hand.get(1); } - public void aktuelleKarte(UnoKarte letzteKarte){ + public void aktuelleKarte(UnoKarte letzteKarte) { System.out.println("Die Aktuelle Karte:"); System.out.println(letzteKarte); } - public int reihenfolge(){ + public int reihenfolge() { int aktuell = reihenfolge.get(0); reihenfolge.remove(0); reihenfolge.add(aktuell); return aktuell; + } + public void wunschFestlegen(){ + color = new ArrayList<Farbe>(); + color.add(0,Farbe.Wild); + } + public boolean karteLegbar(UnoKarte aktuellekarte, UnoKarte neueKarte, String PlayerName[], UnoDeck deck, SpielerHand spielerHand) { + if (color.size() == 2) { + if ((color.get(1) == neueKarte.getFarbe()) || (color.get(0) == neueKarte.getFarbe())) { + color.remove(1); + return Lege(aktuellekarte, neueKarte, PlayerName, deck, spielerHand); + }else { + return false; + } + } else { + return Lege(aktuellekarte, neueKarte, PlayerName, deck, spielerHand); + } } - public Boolean karteLegbar(UnoKarte aktuellekarte, UnoKarte neueKarte,String PlayerName[]){ - if(aktuellekarte.getFarbe() == neueKarte.getFarbe()){ - if(neueKarte.getWert() == Wert.Zwei_Ziehen){ - UnoDeck deck = new UnoDeck(); - SpielerHand spielerHand = new SpielerHand(PlayerName[0], PlayerName[1], PlayerName[2], PlayerName[3]); - spielerHand.befuelleSpieleHand(reihenfolge()+1,deck,2); + + 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 (neueKarte.getWert() == Wert.Zwei_Ziehen) { + zweiZiehen(PlayerName, deck, 2, spielerHand); } else if (neueKarte.getWert() == Wert.Aussetzen) { - int aktuell = reihenfolge.get(0); - reihenfolge.remove(0); - reihenfolge.add(aktuell); + aussetzen(); } else if (neueKarte.getWert() == Wert.Richtungswechsel) { - int [] richtungswechsel = new int[4]; - for(int i = 0; i < reihenfolge.size(); i++){ - richtungswechsel[i] = reihenfolge.get(i); - System.out.println(richtungswechsel[i]); - } - int size = reihenfolge.size(); - for(int i = 0; i < size; i++){ - reihenfolge.remove(0); - System.out.println(reihenfolge); - } - for(int i = 3; i >= 0; i--){ - reihenfolge.add(richtungswechsel[i]); - System.out.println(reihenfolge); - } - int zwischen = reihenfolge.get(0); - reihenfolge.remove(0); - reihenfolge.add(zwischen); + richtungaendern(); + } else if (neueKarte.getWert() == Wert.Multicolor) { + wunschFarbe(); + }else if (neueKarte.getWert() == Wert.Draw_Four) { + wunschFarbe(); + zweiZiehen(PlayerName, deck, 4, spielerHand); } return true; - } - if (aktuellekarte.getWert() == neueKarte.getWert()){ - if (neueKarte.getWert() == Wert.Zwei_Ziehen) { - UnoDeck deck = new UnoDeck(); - SpielerHand spielerHand = new SpielerHand(PlayerName[0], PlayerName[1], PlayerName[2], PlayerName[3]); - spielerHand.befuelleSpieleHand(reihenfolge() + 1, deck, 2); - }else if (neueKarte.getWert() == Wert.Aussetzen) { - int aktuell = reihenfolge.get(0); - reihenfolge.remove(0); - reihenfolge.add(aktuell); - }else if (neueKarte.getWert() == Wert.Richtungswechsel) { - int [] richtungswechsel = new int[4]; - for(int i = 0; i < reihenfolge.size(); i++){ - richtungswechsel[i] = reihenfolge.get(i); - } - int size = reihenfolge.size(); - for(int i = 0; i < size;i++){ - reihenfolge.remove(0); - } - for(int i = 3; i >= 0; i--){ - reihenfolge.add(richtungswechsel[i]); - } - int zwischen = reihenfolge.get(0); - reihenfolge.remove(0); - reihenfolge.add(zwischen); - } - return true; - } - if (neueKarte.getFarbe() == Farbe.Wild){ - if(neueKarte.getWert() == Wert.Multicolor){ - + } else if ((aktuellekarte.getWert() == neueKarte.getWert()) || (Farbe.Wild == neueKarte.getFarbe()) || (Farbe.Wild != neueKarte.getFarbe())) { + if (neueKarte.getWert() == Wert.Zwei_Ziehen) { + zweiZiehen(PlayerName, deck, 2, spielerHand); + } else if (neueKarte.getWert() == Wert.Aussetzen) { + aussetzen(); + } else if (neueKarte.getWert() == Wert.Richtungswechsel) { + richtungaendern(); + }else if (neueKarte.getWert() == Wert.Multicolor) { + wunschFarbe(); + }else if (neueKarte.getWert() == Wert.Draw_Four) { + wunschFarbe(); + zweiZiehen(PlayerName, deck, 4, spielerHand); } return true; - } else { - return false; + } + return false; + } + public void zweiZiehen(String PlayerName[], UnoDeck deck, int anzahl,SpielerHand spielerHand){ + int spieler = reihenfolge.get(0); + spielerHand.befuelleSpieleHand(spieler, deck, anzahl); + } + public void aussetzen(){ + int aktuell = reihenfolge.get(0); + reihenfolge.remove(0); + reihenfolge.add(aktuell); + } + public void richtungaendern(){ + int [] richtungswechsel = new int[4]; + for(int i = 0; i < reihenfolge.size(); i++){ + richtungswechsel[i] = reihenfolge.get(i); + } + int size = reihenfolge.size(); + for (int i = 0; i < size; i++) { + reihenfolge.remove(0); + } + for(int i = 3; i >= 0; i--){ + reihenfolge.add(richtungswechsel[i]); + } + int zwischen = reihenfolge.get(0); + reihenfolge.remove(0); + reihenfolge.add(zwischen); + } + public void wunschFarbe(){ + System.out.println("Welche Farbe möchteswt du?(Gruen, Blau, Gelb, Rot"); + switch (scanner.nextLine().toLowerCase()){ + case "gruen": + color.add(Farbe.Gruen); + break; + case "blau": + color.add(Farbe.Blau); + break; + case "gelb": + color.add(Farbe.Gelb); + break; + case "rot": + color.add(Farbe.Rot); + break; } } } diff --git a/src/SpielerHand.java b/src/SpielerHand.java index 918a4a1ddd967ed959680ca4e1af71699a15b873..d0bf16a2eaa4fef52f873f311a23ced6072aa6b6 100644 --- a/src/SpielerHand.java +++ b/src/SpielerHand.java @@ -1,7 +1,7 @@ import java.util.ArrayList; import java.util.Random; -public class SpielerHand { +public class SpielerHand{ private String[] spielerNamen; public ArrayList<ArrayList<UnoKarte>> spielerHaende; @@ -29,14 +29,14 @@ public class SpielerHand { } public void zeigeHaende(int indexSpieler) { - System.out.println(spielerNamen[indexSpieler] + ":"); - int j = 1; - for (UnoKarte karte : spielerHaende.get(indexSpieler)) { - System.out.print("Index: " + j +"\t"); - System.out.println(karte); - j++; - } - System.out.println(); + System.out.println(spielerNamen[indexSpieler] + ":"); + int j = 1; + for (UnoKarte karte : spielerHaende.get(indexSpieler)) { + System.out.print("Index: " + j +"\t"); + System.out.println(karte); + j++; + } + System.out.println(); //Diese Methode zeigt die Hand des Spielers } public void befuelleSpieleHand(int spielerIndex, UnoDeck hand, int anzahl){ diff --git a/src/UNO.java b/src/UNO.java index 93691945b53623437c58947651482c8ff8c7d7b1..b9088632890c2f67e0b0760c0004bd0c091cb4c0 100644 --- a/src/UNO.java +++ b/src/UNO.java @@ -1,3 +1,4 @@ + import java.util.Scanner; public class UNO { @@ -12,6 +13,7 @@ public class UNO { deck.befuellen(); deck.mischeHand(); regel.reihenfolgeFestlegen(); + regel.wunschFestlegen(); //Spiler Namen Abfrage und Anzahl der Spieler @@ -21,7 +23,7 @@ public class UNO { int PlayerAnzahl = 0; String Antwort; String PlayerNameInput; - String PlayerName[] = {"Joy Bot","Note Bot","Quick Bot","CyBot"}; + String PlayerName[] = {"Joy Bot", "Note Bot", "Quick Bot", "CyBot"}; for (index = 0; index < 4; ) { PlayerAnzahl++; PlayerNameInput = scanner.nextLine(); @@ -39,12 +41,14 @@ public class UNO { } SpielerHand spielerHand = new SpielerHand(PlayerName[0], PlayerName[1], PlayerName[2], PlayerName[3]); - spielerHand.befuelleSpieleHand(0,deck,7); + spielerHand.befuelleSpieleHand(0,deck,30); spielerHand.befuelleSpieleHand(1,deck,7); spielerHand.befuelleSpieleHand(2,deck,7); spielerHand.befuelleSpieleHand(3,deck,7); + + //GameLoop: boolean win = false; int zug = 1; @@ -54,60 +58,63 @@ public class UNO { while (!win) { System.out.println("Zum Zug Starten, Start schreiben"); if("start" .equals(scanner.nextLine().toLowerCase())) { - regel.aktuelleKarte(aktuelleKarte); + System.out.println("Die Aktuelle Karte: \n" + aktuelleKarte); zug++; int spieler = regel.reihenfolge(); spielerHand.zeigeHaende(spieler); System.out.println("legen oder ziehen"); + if ("legen".equals(scanner.nextLine().toLowerCase())) { + System.out.println("Welche Karte?(Index)"); + legeKarte = Integer.parseInt(scanner.nextLine()); + UnoKarte neueKarte = spielerHand.spielerHaende.get(spieler).get(legeKarte-1); + geht = true; + if (geht == regel.karteLegbar(aktuelleKarte, neueKarte,PlayerName, deck, spielerHand)) { + spielerHand.entferneKarteHand(spieler, legeKarte, deck, zug); + System.out.println("karte wurde gelegt"); + aktuelleKarte =neueKarte; + geht = false; + }else { + while(geht == true) { + System.out.println("Die Aktuelle Karte: \n" + aktuelleKarte); + System.out.println("karte wurde nicht gelegt"); + System.out.println("Weiterhin legen?(ja/nein)"); + if ("ja".equals(scanner.nextLine().toLowerCase())) { + System.out.println("Welche Karte?(Index)"); + legeKarte = Integer.parseInt(scanner.nextLine()); + neueKarte = spielerHand.spielerHaende.get(spieler).get(legeKarte-1); + if (geht == regel.karteLegbar(aktuelleKarte, neueKarte,PlayerName,deck, spielerHand)) { + spielerHand.entferneKarteHand(spieler, legeKarte, deck, zug); + aktuelleKarte =neueKarte; + System.out.println("karte wurde gelegt"); + geht = false; + } + }else { + spielerHand.befuelleSpieleHand(spieler, deck, 1); + System.out.println("Karte wurde gezogen"); + geht = false; + } + } + } + } else { + spielerHand.befuelleSpieleHand(spieler, deck, 1); + int size = spielerHand.spielerHaende.get(spieler).size(); + System.out.println("Die Aktuelle Karte: \n" + aktuelleKarte); + System.out.println("Gezogene Karte: " + spielerHand.spielerHaende.get(spieler).get(size - 1)); + System.out.println("legen oder behalten?"); if ("legen".equals(scanner.nextLine().toLowerCase())) { - System.out.println("Welche Karte?(Index)"); - legeKarte = Integer.parseInt(scanner.nextLine()); - UnoKarte neueKarte = spielerHand.spielerHaende.get(spieler).get(legeKarte-1); + UnoKarte neueKarte = spielerHand.spielerHaende.get(spieler).get(size - 1); + System.out.println(neueKarte); geht = true; - if (geht == regel.karteLegbar(aktuelleKarte, neueKarte,PlayerName)) { - spielerHand.entferneKarteHand(spieler, legeKarte, deck, zug); + if (geht == regel.karteLegbar(aktuelleKarte, neueKarte,PlayerName, deck, spielerHand)) { + spielerHand.entferneKarteHand(spieler, size, deck, zug); System.out.println("karte wurde gelegt"); + aktuelleKarte =neueKarte; geht = false; }else { - while(geht == true) { - regel.aktuelleKarte(aktuelleKarte); - System.out.println("karte wurde nicht gelegt"); - System.out.println("Weiterhin legen?(ja/nein)"); - if ("ja".equals(scanner.nextLine().toLowerCase())) { - System.out.println("Welche Karte?(Index)"); - legeKarte = Integer.parseInt(scanner.nextLine()); - neueKarte = spielerHand.spielerHaende.get(spieler).get(legeKarte-1); - if (geht == regel.karteLegbar(aktuelleKarte, neueKarte,PlayerName)) { - spielerHand.entferneKarteHand(spieler, legeKarte, deck, zug); - System.out.println("karte wurde gelegt"); - geht = false; - } - }else { - spielerHand.befuelleSpieleHand(spieler, deck, 1); - System.out.println("Karte wurde gezogen"); - geht = false; - } - } - } - } else { - spielerHand.befuelleSpieleHand(spieler, deck, 1); - int size = spielerHand.spielerHaende.get(spieler).size(); - regel.aktuelleKarte(aktuelleKarte); - System.out.println("Gezogene Karte: " + spielerHand.spielerHaende.get(spieler).get(size - 1)); - System.out.println("legen oder behalten?"); - if ("legen".equals(scanner.nextLine().toLowerCase())) { - UnoKarte neueKarte = spielerHand.spielerHaende.get(spieler).get(size - 1); - System.out.println(neueKarte); - geht = true; - if (geht == regel.karteLegbar(aktuelleKarte, neueKarte,PlayerName)) { - spielerHand.entferneKarteHand(spieler, size, deck, zug); - System.out.println("karte wurde gelegt"); - geht = false; - }else { - System.out.println("Karte wurde nicht gelegt"); - } + System.out.println("Karte wurde nicht gelegt"); } } + } if(spielerHand.spielerHaende.get(spieler).size() == 1){ System.out.println("Möchtest du Uno sagen?"); if("uno" .equals(scanner.nextLine().toLowerCase())){ @@ -121,8 +128,12 @@ public class UNO { } } } + + + + //Game Loop + + } } } - - diff --git a/src/UnoDeck.java b/src/UnoDeck.java index 971a74ffed9cdcfcd9029fb53c0da68dec060541..c1ae3a9876b2e36f81016883554734a230866ec7 100644 --- a/src/UnoDeck.java +++ b/src/UnoDeck.java @@ -10,7 +10,7 @@ public class UnoDeck { public void fuegeKarteHinzu(UnoKarte karte) { hand.add(karte); - //Diese Methode fügt Karten in die UnoHand (Algemeine Deck) hinzu + //Diese Methode fügt Karten in die UnoDeck (Algemeine Deck) hinzu } public UnoKarte get(int index){ return hand.get(index); @@ -70,9 +70,9 @@ public class UnoDeck { 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.Wild_Draw_Four)); + 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 + //Diese Methode verbindet die Farben und die Zahlen der jeweiligen enums } } diff --git a/src/UnoKarte.java b/src/UnoKarte.java index b60c63f92632bac29f2bf387cfe48c6b31773378..089c0c254934e698ca39413b39c40c717e3e3daa 100644 --- a/src/UnoKarte.java +++ b/src/UnoKarte.java @@ -27,6 +27,6 @@ enum Farbe { } enum Wert { - Null, Eins, Zwei, Drei, Vier, Fuenf, Sechs, Sieben, Acht, Neun, Aussetzen, Richtungswechsel, Zwei_Ziehen, Multicolor, Wild_Draw_Four + Null, Eins, Zwei, Drei, Vier, Fuenf, Sechs, Sieben, Acht, Neun, Aussetzen, Richtungswechsel, Zwei_Ziehen, Multicolor, Draw_Four //Das sind die eigenschaften der jeweiligen Karten } \ No newline at end of file