ich bin als Übungsprojekt gerade dabei das Spiel "love letter" zu programmieren, um gegen einen Bot spielen zu können.
Wie wärt ihr eigentlich an eine solche Aufgabe herangegangen? Also wo fängt man an? Ich habe einfach mal drauf los getippt, was aber wohl nicht die intelligenteste Vorgehensweise ist. Vermutlich wäre es besser gewesen, sich zu überlegen was der schwierigste Teil des Codes sein wird, mit dem zu beginnen und alles andere drum herum zu coden. Gibts da eine allgemeine Anleitung?
Bin jetzt an der Stelle an der ich die Funktionen der einzelnen Karten coden möchte. In der Funktion "karte_ziehen_und_ausspielen" müsste dann die jeweile Funktion aufgerufen werden. Die Karten-Funktionen sind aber vom Zähler in der "karte_ziehen_und_ausspielen"-Funktion abhängig. Sollte das "i" dann eine globale Variable werden? Irgendwie habe ich das Gefühl, dass es da sicherlich eine bessere Möglichkeit gibt, die ich allerdings noch nicht kenne.
Bin für hilfreiche Stichworte dankbar.
Viele Grüße
Stefan
Code: Alles auswählen
# Regeln: https://pegasusshop.de/media/pdf/e9/55/30/4250231705021_de.pdf
from random import shuffle
import random
karten = ( # Nr., Name, Anzahl, Beschreibung
[1,"Die Wächterin", 5, "Die Personenkarte eines Mitspielers darf erraten werden (außer Wächterin selber). Liegt man richtig, scheidet dieser Spieler aus."],
[2,"Der Priester", 2, "Erlaubt dem Spieler, die Handkarte eines Mitspielers anzuschauen."],
[3, "Der Baron", 2, "Erlaubt das Anschauen der Handkarte eines Mitspielers. Der Spieler, dessen Karte den niedrigeren Wert hat, scheidet aus dem Spiel aus."],
[4, "Die Zofe", 2, "Die Zofe schützt den Spieler eine Runde vor den Kartenfunktionen der Mitspieler."],
[5, "Der Prinz", 2, "Ein Mitspieler darf bestimmt werden. Dieser muss seine Handkarte ablegen und eine neue Personenkarte ziehen."],
[6, "Der König", 1, "Erlaubt den Tausch der verbliebenen Personenkarte mit der eines Mitspielers."],
[7,"Die Gräfin", 1, "Muss sofort abgelegt werden, wenn ein Spieler zusätzlich den König oder Prinzen auf der Hand hat."],
[8, "Die Prinzessin", 1, "Wer diese Karte ablegt, scheidet sofort aus der laufenden Runde aus."]
)
spieler = ["Du", "Kelly", "Angela", "Pam"]
ausgeschiedene_spieler = []
nachziehstapel = []
ablagestapel = []
handkarten = []
# Spielaufbau
def karten_mischen():
#Nimm das volle Deck und mische es
#Output: nachziehstapel -> Liste mit "Prinzessin", "König", etc.
for karte in karten:
i = karte[2]
for j in range(i):
nachziehstapel.append(karte[1])
shuffle(nachziehstapel)
def reihenfolge():
shuffle(spieler)
def karten_verteilen():
# Ziehe für jeden Spieler eine zufällige Karte von "nachziehstapel"
# output: handkarten = Liste mit "Spieler 1", Name1, aktuelle Karte
# Eine Reservekarte für evtl. Prinzen im letzten Zug beiseite legen
i = 0
for gamer in spieler:
a = random.choice(nachziehstapel)
handkarten.append(["Spieler {} ".format(i+1), spieler[i], [a]])
nachziehstapel.remove(a)
i +=1
# Reservekarte:
b = random.choice(nachziehstapel)
nachziehstapel.append(nachziehstapel.pop(nachziehstapel.index(b)))
reserve = nachziehstapel.pop()
print("Dies ist die Spielerreihenfolge:")
for i, num in enumerate(handkarten):
num = handkarten[i][1]
print("Der {}. Spieler ist {}".format(i+1, num))
# Spielablauf
def karte_ziehen_und_ausspielen():
# Spieler X nimmt eine Karte vom Nachziehstapel auf die Hand und legt eine der beiden Karten wieder ab
i = 0
while handkarten:
try:
for gamer in handkarten:
if handkarten[i][1] != "Du":
#Karte nehmen
a = random.choice(nachziehstapel)
handkarten[i][2].append(a)
nachziehstapel.remove(a)
#Karte ablegen
b = random.choice(handkarten[i][2])
handkarten[i][2].remove(b)
ablagestapel.append(b)
elif handkarten[i][1] == "Du":
print("Du bist dran")
i += 1
if i == 4:
i = 0
except IndexError:
print("Stapel ist leer")
break
def waechterin_bot():
a = random.choice(spieler)
if handkarten[i][1] != "Du":
print("asf")
else:
print("asf")
# Aufruf der Funktionen
reihenfolge()
karten_mischen()
karten_verteilen()
karte_ziehen_und_ausspielen()