Hallo Leute,
vielen Dank für die Antworten.
Ich habe einige eurer Ratschläge befolgt und bin noch einmal in mich gegangen.
Eine Neuprogrammierung habe ich mir schon vor dem erstem Posting durch den
Kopf gedacht. Ich wollte habe nur auf neue Anregungen gewartet.
Hauptschwerpunkt des Rewrite waren Basisfunktionen, wie die Speicherung von
Daten und deren Zugriff. Mathematische Berechnungen usw. wurden durch Random - Fkt.
ersetzt, ebenso wie die Spielerverwaltung und spielen keine primäre Bedeutung.
Ein paar kleine Anmerkungen noch:
- "EP" ist eine Art dummy - Spieler, der gesetzt wird, wenn keiner der anderen Spieler
die Runde spielen will und ist somit in jeder Liste "anwesend".
- Implementierung Datenbank, graf. Oberfläche usw:
Mit diesem Projekt will ich mir Python aneignen. Das hier ist der erste Schritt
um mir die allgemeinen Konzepte zur Python - Programmierung beizubringen.
Mit derartigen Features ziehe ich mir nur noch mehr Baustellen auf den Tisch und
der Code wird noch weniger verständlich. Datenbank, Visu usw. kommen, wenn dieses
Basisgerüst steht.
Wie gesagt, nachfolgender Code ist auf das notwendige reduziert. Mein Problem aus
dem ursprünglichen Posting kann nachvollzogen werden, indem die auskommentierten
Zeilen (de)kommentiert werden und die jeweiligen Zeilen darüber auskommentiert
werden. (for - Schleifen in skatliste.py).
skatliste.py:
Code: Alles auswählen
#!/usr/bin/python
# -*- coding: cp1252 -*-
import random
from collections import namedtuple
from skatrunde import SkatRunde
from skatspieler import SkatSpieler
if __name__ == "__main__":
gewinnstufe = namedtuple("Gewinnstufe",
["Hand", "Schneider", "Schneider_anges", "Schwarz", "Schwarz_anges", "Overt"])
spieler = namedtuple("Skatspieler", ["name", "gewonnen", "verloren", "punkte"])
skat_runde = SkatRunde()
skat_spieler_0 = SkatSpieler("EP")
skat_spieler_1 = SkatSpieler("SF1")
skat_spieler_2 = SkatSpieler("SF2")
skat_spieler_3 = SkatSpieler("SF3")
skat_freunde = [skat_spieler_0, skat_spieler_1, skat_spieler_2, skat_spieler_3]
skatliste = []
for x in range(int(input("Runden? "))):
akt_spieler = skat_freunde[random.randint(0, 3)]
skat_runde.set_gewinnstufe_bool_random()
skat_runde.set_grundwert_random()
skat_runde.set_spielwert_random()
akt_runde_gewinnstufe = gewinnstufe(skat_runde.get_gewinnstufe_hand,
skat_runde.get_gewinnstufe_schneider,
skat_runde.get_gewinnstufe_schneider_angesagt,
skat_runde.get_gewinnstufe_schwarz,
skat_runde.get_gewinnstufe_schwarz_angesagt,
skat_runde.get_gewinnstufe_overt)
akt_runde_grundwert = skat_runde.get_grundwert()
akt_runde_spielwert = skat_runde.get_spielwert()
if akt_spieler.get_spieler_name == "EP":
akt_spieler.set_win()
else:
if akt_runde_spielwert < 0:
akt_spieler.set_loss()
else:
akt_spieler.set_win()
akt_spieler.set_points(akt_runde_spielwert)
tmp_spieler = spieler(akt_spieler.get_spieler_name, akt_spieler.get_spieler_win, akt_spieler.get_spieler_loss, akt_spieler.get_spieler_points)
skatliste.append([x, akt_runde_grundwert, akt_runde_gewinnstufe, akt_runde_spielwert, tmp_spieler])
# skatliste.append([x, akt_runde_grundwert, akt_runde_gewinnstufe, akt_runde_spielwert, akt_spieler])
for x in range(len(skatliste)):
zeile = skatliste[x]
runde = zeile[0]
grundwert = zeile[1]
gewinnstufe = zeile[2]
spielwert = zeile[3]
spieler_name = zeile[4]
print(runde, grundwert, gewinnstufe, spielwert, spieler_name)
# print(runde, grundwert, gewinnstufe, spielwert, spieler_name.get_spieler_name, spieler_name.get_spieler_win, spieler_name.get_spieler_loss, spieler_name.get_spieler_points)
skatrunde.py
Code: Alles auswählen
#!/usr/bin/python
# -*- coding: cp1252 -*-
import random
class SkatRunde:
"""Klasse zur Auswertung einer Skatrunde"""
grundwerte_farbe = {"EP": 0, "Schell": 9, "Herz": 10, "Gruen": 11, "Kreuz": 12, "Grand": 24}
grundwerte_null = {"Null": 23, "Null-Hand": 35, "Null-Overt": 46, "Null-Hand-Overt": 59}
def __init__(self):
"""Konstruktor / INIT"""
self.__grundwert = self.grundwerte_farbe["EP"]
self.__spitzen = 0
self.__hand = False
self.__schneider = False
self.__schneider_angesagt = False
self.__schwarz = False
self.__schwarz_angesagt = False
self.__overt = False
self.__spielwert = 0
@property
def get_gewinnstufe_hand(self): return self.__hand
@property
def get_gewinnstufe_schneider(self): return self.__schneider
@property
def get_gewinnstufe_schneider_angesagt(self): return self.__schneider_angesagt
@property
def get_gewinnstufe_schwarz(self): return self.__schwarz
@property
def get_gewinnstufe_schwarz_angesagt(self): return self.__schwarz_angesagt
@property
def get_gewinnstufe_overt(self): return self.__overt
def set_gewinnstufe_bool_random(self):
"""bool'sche Werte der Gewinnstufen
zufaellig mit True / False belegen"""
self.__hand = random.choice([True, False])
self.__schneider = random.choice([True, False])
self.__schneider_angesagt = random.choice([True, False])
self.__schwarz = random.choice([True, False])
self.__schwarz_angesagt = random.choice([True, False])
self.__overt = random.choice([True, False])
def get_grundwert(self):
"""Rueckgabe Integer Spielgrundwert"""
return self.__grundwert
def set_grundwert_random(self):
"""Grundwert (int) zufaellig
zwischen 0 .. 72 setzen"""
self.__grundwert = random.randint(0, 72)
def get_spielwert(self):
"""Rueckgabe Integer Spielwert / Punkte"""
return self.__spielwert
def set_spielwert_random(self):
"""Spielwert (int) zufaellig
zwischen -200..144 setzen"""
self.__spielwert = random.randint(-200, 144)
skatspieler.py:
Code: Alles auswählen
#!/usr/bin/python
# -*- coding: cp1252 -*-
class SkatSpieler:
def __init__(self, name: str= "Skatfreund") -> object:
self.__name = name
self.__id = 0
self.__win = 0
self.__loss = 0
self.__points = 0
def set_win(self): self.__win += 1
def set_loss(self): self.__loss += 1
def set_points(self, value): self.__points += value
def set_edit_abs(self, win, loss, points):
self.__win = win
self.__loss = loss
self.__points = points
def set_edit_rel(self, win, loss, points):
self.__win += win
self.__loss += loss
self.__points += points
@property
def get_spieler_name(self): return self.__name
@property
def get_spieler_win(self): return self.__win
@property
def get_spieler_loss(self): return self.__loss
@property
def get_spieler_points(self): return self.__points
Danke
für evtl. Anregungen,
asdf