Wissensportal
Python
import random
# Kartendeck definieren
kartendeck = {
"Gelb": ["0"] + ["1", "2", "3", "4", "5", "6", "7", "8", "9", "Reverse", "Skip", "Plus2"] * 2,
"Blau": ["0"] + ["1", "2", "3", "4", "5", "6", "7", "8", "9", "Reverse", "Skip", "Plus2"] * 2,
"Rot": ["0"] + ["1", "2", "3", "4", "5", "6", "7", "8", "9", "Reverse", "Skip", "Plus2"] * 2,
"Grün": ["0"] + ["1", "2", "3", "4", "5", "6", "7", "8", "9", "Reverse", "Skip", "Plus2"] * 2,
"Schwarz": ["Farbwahl", "Plus4"] * 4
}
# Kartendeck als Liste umwandeln und mischen
deck = []
for farbe, karten in kartendeck.items():
for karte in karten:
deck.append({"Farbe": farbe, "Karte": karte})
random.shuffle(deck)
# Kartenhände und Kartenstapel
deine_karten = []
gegnerische_karten = []
stapel_mitte = None
# Funktion zum Ziehen einer Karte vom Stapel
def karte_ziehen():
if deck:
return deck.pop()
else:
print("Das Deck ist leer!")
return None
# Funktion zur Auswahl einer Startkarte
def startkarte_ziehen():
while True:
karte = karte_ziehen()
if karte and karte["Farbe"] != "Schwarz" and karte["Karte"].isdigit():
return karte
elif karte:
deck.insert(0, karte) # Die Karte zurück ins Deck legen
random.shuffle(deck)
# Funktion zur Prüfung, ob eine Karte spielbar ist
def karte_spielbar(gespielte_karte, stapel_karte):
return (
gespielte_karte["Farbe"] == stapel_karte["Farbe"] or
gespielte_karte["Karte"] == stapel_karte["Karte"] or
gespielte_karte["Farbe"] == "Schwarz"
)
# Funktion, um zu prüfen, ob eine spielbare Karte auf der Hand ist
def passende_karte_vorhanden(hand, stapel_karte):
for karte in hand:
if karte_spielbar(karte, stapel_karte):
return True
return False
# Beispiel für einen Spielzug
def spielzug():
global stapel_mitte
print(f"Aktuelle Karte auf dem Stapel: {stapel_mitte['Farbe']} {stapel_mitte['Karte']}")
print("Deine Karten:")
for index, karte in enumerate(deine_karten):
print(f"{index + 1}: {karte['Farbe']} {karte['Karte']}")
# Überprüfen, ob eine spielbare Karte vorhanden ist
if not passende_karte_vorhanden(deine_karten, stapel_mitte):
print("Keine passende Karte auf der Hand. Ziehe eine Karte.")
gezogene_karte = karte_ziehen()
if gezogene_karte:
deine_karten.append(gezogene_karte)
print(f"Du hast {gezogene_karte['Farbe']} {gezogene_karte['Karte']} gezogen.")
# Prüfen, ob die gezogene Karte spielbar ist
if karte_spielbar(gezogene_karte, stapel_mitte):
print("Die gezogene Karte passt! Sie wird auf den Stapel gelegt.")
stapel_mitte = gezogene_karte
deine_karten.remove(gezogene_karte)
else:
print("Die gezogene Karte passt nicht, der Zug endet.")
return # Zug beenden, wenn keine passende Karte gelegt werden konnte
try:
auswahl = int(input("Welche Karte möchtest du legen? Gib die Zahl der Karte ein: ")) - 1
gewaehlte_karte = deine_karten[auswahl]
if karte_spielbar(gewaehlte_karte, stapel_mitte):
stapel_mitte = gewaehlte_karte # Update der Mitte mit der gespielten Karte
deine_karten.pop(auswahl) # Entferne die gespielte Karte aus der Hand
print(f"Du hast {gewaehlte_karte['Farbe']} {gewaehlte_karte['Karte']} gespielt.")
# Sonderregeln für Aktionskarten
if gewaehlte_karte["Karte"] == "Reverse":
print("Spielrichtung gewechselt!")
elif gewaehlte_karte["Karte"] == "Skip":
print("Nächster Spieler wird übersprungen!")
elif gewaehlte_karte["Karte"] == "Plus2":
print("Nächster Spieler muss zwei Karten ziehen!")
for _ in range(2):
gegnerische_karten.append(karte_ziehen())
elif gewaehlte_karte["Karte"] == "Farbwahl":
neue_farbe = input("Wähle eine neue Farbe (Gelb, Blau, Rot, Grün): ").capitalize()
if neue_farbe in kartendeck:
stapel_mitte["Farbe"] = neue_farbe
print(f"Neue Farbe ist {neue_farbe}.")
else:
print("Ungültige Farbe, Standardfarbe bleibt.")
elif gewaehlte_karte["Karte"] == "Plus4":
print("Nächster Spieler muss vier Karten ziehen und Farbe wechseln!")
for _ in range(4):
gegnerische_karten.append(karte_ziehen())
neue_farbe = input("Wähle eine neue Farbe (Gelb, Blau, Rot, Grün): ").capitalize()
if neue_farbe in kartendeck:
stapel_mitte["Farbe"] = neue_farbe
print(f"Neue Farbe ist {neue_farbe}.")
else:
print("Ungültige Farbe, Standardfarbe bleibt.")
else:
print("Diese Karte kannst du nicht spielen. Versuche es mit einer anderen.")
except (ValueError, IndexError):
print("Ungültige Auswahl. Bitte gib eine Zahl aus der Liste deiner Karten ein.")
# Funktion für den Zug des Gegners
def gegner_zug():
global stapel_mitte
print("Jetzt ist der Gegner am Zug.")
# Überprüfen, ob der Gegner eine spielbare Karte hat
if not passende_karte_vorhanden(gegnerische_karten, stapel_mitte):
print("Der Gegner hat keine passende Karte und zieht eine Karte.")
gezogene_karte = karte_ziehen()
if gezogene_karte:
gegnerische_karten.append(gezogene_karte)
print(f"Der Gegner hat {gezogene_karte['Farbe']} {gezogene_karte['Karte']} gezogen.")
# Prüfen, ob die gezogene Karte spielbar ist
if karte_spielbar(gezogene_karte, stapel_mitte):
print("Die gezogene Karte passt! Sie wird auf den Stapel gelegt.")
stapel_mitte = gezogene_karte
gegnerische_karten.remove(gezogene_karte)
else:
print("Die gezogene Karte passt nicht, der Zug endet.")
return # Zug beenden, wenn keine passende Karte gelegt werden konnte
# Der Gegner wählt zufällig eine spielbare Karte
spielbare_karten = [karte for karte in gegnerische_karten if karte_spielbar(karte, stapel_mitte)]
gewaehlte_karte = random.choice(spielbare_karten)
stapel_mitte = gewaehlte_karte
gegnerische_karten.remove(gewaehlte_karte)
print(f"Der Gegner hat {gewaehlte_karte['Farbe']} {gewaehlte_karte['Karte']} gespielt.")
# Karten verteilen und das Spiel starten
for _ in range(7):
deine_karten.append(karte_ziehen())
gegnerische_karten.append(karte_ziehen())
# Startkarte auswählen und erstes Spielzug starten
print("Hallo und herzlich willkommen!")
bereit = input("Bist du bereit für eine Runde UNO? Ja/Nein ")
try:
if bereit=="Ja":
stapel_mitte = startkarte_ziehen()
print(f"Das Spiel beginnt! Die Startkarte ist: {stapel_mitte['Farbe']} {stapel_mitte['Karte']}")
elif bereit == "Nein":
print("Nein? Das ist aber schade, ich hoffe wir sehen uns bald wieder.")
else:
print("Da hat sich wohl jemand vertippt.")
except:
print("Ungültige Auswahl.")
# Spielschleife
while True:
spielzug() # Spielerzug
# Überprüfen, ob der Spieler gewonnen hat
if not deine_karten:
print("Herzlichen Glückwunsch! Du hast gewonnen!")
break
gegner_zug() # Zug des Gegners
# Überprüfen, ob der Gegner gewonnen hat
if not gegnerische_karten:
print("Der Gegner hat gewonnen! Versuch es nächstes Mal erneut.")
break