Ich hoffe, ich poste hier im richtigen Forum.
Das hier ist mein allererstes komplett selbst erstelltes (sprich ohne sinnloses c&p aus irgendwelchen Tutorials) Programm.
Es kann noch nicht viel, aber bevor ich weiter mache, würde ich ganz gerne mal eure Kritik dazu hören.
Für mich läuft es erstmal einfach nur, wobei vieles wahrscheinlich viel zu umständlich ist und ich bestimmt unbewusst einige hässliche Sachen gemacht habe.
Es handelt sich um ein ganz billiges MauMau, sprich die einzigen Regeln sind derzeit, dass die zu spielende Karte entweder
a) die selbe Farbe hat, wie die Karte, die gerade liegt
oder
b) vom selben Kartentyp ist, wie die Karte, die gerade liegt (z.B. Dame auf Dame).
Code: Alles auswählen
#!/usr/bin/env python
# -*- coding: utf-8 -*-
#Competitive MauMau
#erstmal ohne KI
#Folgender Aufbau:
#kartendeck: das Kartendeck als Liste
#kartenliste: enthält für jeden Spieler eine Liste seiner Karten
#kartenstock: die Karten, die nach dem Austeilen übrig bleiben (auch Talon)
#aktive_karte: die Karte, die gerade für alle Spieler zu sehen ist
#kartenablage: die Karten, die schon gespielt wurden außer der gerade aktiven
# Karte. Ist der Kartenstock erschöpft, wird die Kartenablage ge-
# mischt und ergibt den neuen Kartenstock
from random import shuffle
def generiere_kartendeck(x, joker=False, blaetter=1):
#x entspricht der Anzahl der Nummernkarten 0 <= x <= 8 (x=4 wäre zB 7,8,9,10)
#joker: False/True
# blaetter: ganze Zahl (2 für doppeltes Blatt etc.)
global farben #global, wegen spielzug()
global kartentypen
farben = ['Ka', 'He', 'Pi', 'Kr']
dummy = range(10, 10-x,-1)
kartentypen = []
for i in dummy: #umwandeln der Int in Strings
x = str(i)
kartentypen.append(x)
kartentypen = kartentypen + ['Bu', 'Da', 'Ko', 'As']
if joker:
kartentypen.append('Jo')
else:
pass
kartendeck = []
for a in farben:
for b in kartentypen:
kartendeck.append(a + b)
kartendeck = kartendeck * blaetter
return kartendeck
def austeilen(kartendeck, spieleranzahl, n):
#n Karten für jeden Spieler
#kartendeck ist die Liste aller Karten
kartenliste = []
for a in xrange(spieleranzahl):
spielerkarten = kartendeck[a:spieleranzahl * n:spieleranzahl]
kartenliste.append(spielerkarten)
for a in xrange(spieleranzahl): #lösche spielerkarten aus kartendeck(=kartenstock)
for b in kartenliste[a]:
del kartendeck[kartendeck.index(b)]
kartenstock = kartendeck
return kartenstock, kartenliste
def spielzug(spieler): #wahrscheinlich besser ohne Fkt lösbar
print 'Spieler', spieler, ':', kartenliste[spieler]
spielereingabe = raw_input('Dein Spielzug: Entweder Karte spielen oder ' \
'eine Karte (a)ufnehmen: ')
if spielereingabe == 'a': #Karte aufnehmen
kartenliste[spieler].append(kartenstock[0])
del kartenstock[0]
zeige_aktive_karte()
return aktive_karte
elif spielereingabe in kartenliste[spieler]: #Spielzugüberprüfung
x = False
#Die ganze Aufteilung hier ist einfach "suboptimal"
for farbe in farben: # gleiche Farbe
if (farbe in spielereingabe) and (farbe in aktive_karte):
x = True
break
else:
continue
if x == False:
for kartentyp in kartentypen: #gleicher Typ (König, Dame)
if (kartentyp in spielereingabe) \
and (kartentyp in aktive_karte):
x = True
break
else:
continue
else:
pass
if x == True: #Karte spielen
entferne = kartenliste[spieler].index(spielereingabe)
del kartenliste[spieler][entferne]
kartenablage.append(aktive_karte)
print 6 * '>', 'Es liegt:', spielereingabe
return spielereingabe
else:
print 6 * '>','Unzulässiger Spielzug.'
spielzug(spieler)
else:
zeige_aktive_karte()
print 6 * '>', 'Bitte eine Karte angeben, die sich in deinem ' \
'Blatt befindet.'
spielzug(spieler)
def zeige_aktive_karte():
print 6 * '>', 'Es liegt:', aktive_karte
#Spielanfang:
kartendeck = generiere_kartendeck(x=4, blaetter=2)
kartenablage = []
shuffle(kartendeck)
spieleranzahl = int(raw_input('Spieleranzahl (2-5)?'))
startkarten = int(raw_input('Wie viele Karten soll jeder Spieler zu Beginn '\
'bekommen?'))
kartenstock, kartenliste = austeilen(kartendeck, spieleranzahl, startkarten)
aktive_karte = kartenstock[0]
del kartenstock[0]
print 6 * '>', 'Es liegt:', aktive_karte
#Spielablauf
kontrolle = True
while kontrolle:
for spieler in xrange(spieleranzahl):
aktive_karte = spielzug(spieler)
if len(kartenstock) == 0: #Kartenstock leer?
kartenstock = kartenablage
shuffle(kartenstock)
kartenablage = []
elif len(kartenliste[spieler]) == 0: #Siegbedingung
print 'Spieler', spieler, 'hat gewonnen!'
kontrolle = False
break
else:
pass
print 'Ende'