## Kapitel 20 – Hammurabi – säen, ernten und herrschen

# Seite 292 – Das ganze Programm in einem Rutsch
import random

class HammurabiSpiel:

    def __init__(self):
        self.jahr = 0
        self.buerger = 100
        self.korn = 6000
        self.land = 400
        self.ende = False
        self.land_preis = 5
        self.ernte_pro_acker = 0

    def spiele_eine_runde(self):
        if not self.ende:
            self.jahr += 1

            self.bestimme_ernte_erfolg()
            self.verarbeite_befehle()
            self.bestimme_land_preis()
            self.erstelle_bericht()
            self.pruefe_ende()

    def bestimme_land_preis(self):
        self.land_preis = random.randint(1, 10)

    def bestimme_ernte_erfolg(self):
        self.ernte_pro_acker = random.randint(1, 10)

    def verarbeite_befehle(self):
        eingabe = input("Erteilt Eure Befehle (Format:Nahrung,Aussaat,Landhandel): ")
        teile = eingabe.split(",")

        try:
            verteile_korn = int(teile[0])
        except:
            verteile_korn = 0
        try:
            saee_korn = int(teile[1])
        except:
            saee_korn = 0
        try:
            land_kauf = int(teile[2])
        except:
            land_kauf = 0

        if verteile_korn < 0:
            verteile_korn = 0
        if saee_korn < 0:
            saee_korn = 0

        self.bevoelkerung(verteile_korn)
        self.aussaat(saee_korn)
        self.handel(land_kauf)


    def bevoelkerung(self, nahrung):
        if nahrung > self.korn:
            nahrung = self.korn

        self.korn -= nahrung

        ausreichend = round(nahrung / 20) - self.buerger

        neue = 0
        if ausreichend > 0:
            neue = ausreichend / 2

        tote = 0
        if ausreichend < 0:
            tote = -ausreichend

        self.buerger = round(self.buerger + neue - tote)

    def aussaat(self, saat):
        if saat > self.korn:
            saat = self.korn

        self.korn -= saat

        moegliche_saat = saat // 2

        if moegliche_saat > self.buerger * 10:
            moegliche_saat = self.buerger * 10

        if moegliche_saat > self.land:
            moegliche_saat = self.land

        geerntet = self.ernte_pro_acker * moegliche_saat
        self.korn += geerntet

    def handel(self, kauf):
        # Verkauf
        if kauf < 0:
            verkauf = abs(kauf)
            if verkauf > self.land:
                return
            self.land -= verkauf
            self.korn += verkauf * self.land_preis

        # Kauf
        if kauf > 0:
            if kauf * self.land_preis > self.korn:
                print("Nicht genug Korn für Landkauf!")
                return
            self.land += kauf
            self.korn -= kauf * self.land_preis

    def erstelle_bericht(self):
        if self.ernte_pro_acker == 1:
            ernte = "Unwetter vernichteten Teile der Ernte."
        elif self.ernte_pro_acker in (2, 3):
            ernte = "Das Wetter war schlecht."
        elif self.ernte_pro_acker in (6, 7):
            ernte = "Das Wetter war gut. Die Ernte war reichlich."
        elif self.ernte_pro_acker in (8, 9, 10):
            ernte = "Das Wetter war sehr gut. Die Ernte war hervorragend."
        else:
            ernte = "Das Wetter war normal."

        print("\n==============================")
        print("Weiser Herrscher Hammurabi!")
        print(f"Wir schreiben das Jahr {self.jahr} Eurer Herrschaft.\n")
        print(f"{self.buerger} treue Bürger zählt Euer Reich.")
        print(ernte)
        print(f"{self.korn} Scheffel Korn lagern in den Kornkammern.")
        print(f"{self.land} Acker Land besitzt Ihr.")
        print(f"{self.land_preis} Scheffel Korn kostet ein Acker Land.")
        print("==============================\n")

    def pruefe_ende(self):
        grund = ""

        if self.buerger < 1:
            self.ende = True
            grund += "Ihr habt zu wenige Untertanen. "

        if self.korn < 1:
            self.ende = True
            grund += "Eure Kornkammern sind leer. "

        if self.land < 1:
            self.ende = True
            grund += "Ihr habt zu wenig Land. "

        if self.jahr > 20 and not self.ende:
            self.ende = True
            grund = ("Nach 20 Jahren endet Eure Herrschaft.\n""Euer Name soll auf ewig gepriesen werden!")

        if self.ende:
            print("\nEure Herrschaft ist beendet.")
            print(grund)

# --- Spiel starten ---
spiel = HammurabiSpiel()
print("Willkommen, großer Hammurabi!")

while not spiel.ende:
    spiel.spiele_eine_runde()

