Willkommen auf meinem Apache-Webserver!

Dieser Server verwendet MariaDB 10.11.8-MariaDB-0ubuntu0.24.04.1

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