diff --git a/schiffe-versenken.py b/schiffe-versenken.py index dc83576..be8432f 100644 --- a/schiffe-versenken.py +++ b/schiffe-versenken.py @@ -1,6 +1,6 @@ -## TO DO: NUR DIE SCHON ABGESCHOSSENEN FELDER ANZEIGEN LASSEN +## TO DO: AUSGABE VERBESSERN -import random +import random, time matrixgr = 7 @@ -8,7 +8,9 @@ def makeFeld (): feld = [[[0] for i in range(matrixgr)] for e in range(matrixgr)] # Erzeugt ein mit Nullen befülltes Feld, was bedeutet, dass dort weder ein (zerstörtes) Schiff ist, noch ein fehlgeschlagener Angriff stattgefunden hat return feld + def printFeld (spielerFeld, modus): + print ("\n"+ spielerFeld [matrixgr]) print ("\n 1 2 3 4 5 6 7") NZeile = 'A' for i in spielerFeld: @@ -25,13 +27,21 @@ def printFeld (spielerFeld, modus): zeile+=' [ ] ' elif n==[3]: zeile+=' [ X ] ' # Das Schiff auf dem Feld wurde getroffen - print ('\n' + NZeile + ' ' + zeile) + + if ord(NZeile.lower())-97 < matrixgr: + print ('\n' + NZeile + ' ' + zeile) + else: + print ('\n' + ' ' + zeile) + NZeile = chr(ord(NZeile)+1) print ('\n') + def setFeld (spielerFeld, zeile, spalte, wert): #zeile = ord(zeile.lower())-97 # Weil die Zeilen traditionell nach Buchstaben benannt werden, muss erst der Buchstabe in seinen ASCII-Wert umgewandelt werden und dann um 97 verringer (ASCII 97 = 'a') #spielerFeld [zeile][spalte-1][0] = wert # Weil die Nummerierung der Spalten bei 1 anfangen soll hier -1 + if wert == 5: + wert = getFeld (spielerFeld, zeile, spalte) +1 # Um den Wert im Feld um eins zu erhöhen spielerFeld [zeile][spalte][0] = wert @@ -48,6 +58,15 @@ def summeFeld (spielerFeld): summe += n return summe + +def zweicheck (spielerFeld): #Super dumm, kann optimiert werden + for i in spielerFeld: + for e in i: + for n in e: + if n == 2: + return True + + def checkUmfeld (spielerFeld, zeile, spalte): if getFeld (spielerFeld, zeile, spalte) != 0: return False @@ -153,12 +172,15 @@ def fuellFeld (Feld): def feldWahl (spielerFeld): + printFeld (spielerFeld, 't') feld = str(input("Wähle das Feld, das abgeschossen werden soll! ")) - if len(feld) != 2: + feld.replace (" ", "") + if (len(feld) != 2 ) or (not feld[0].isalpha ()) or (not feld[1].isdigit()): print ("Fehlerhafte Eingabe! \n Ein Feld wird beispielsweise folgendermaßen angegeben:\n A1 [Enter]") feldWahl (spielerFeld) return 0 # Rückgabe, damit die Funktion nicht mit falschem Wert weiterläuft + feld = [ord(feld[0].lower())-97, int(feld[1])-1] # Weil die Zeilen traditionell nach Buchstaben benannt werden, muss erst der Buchstabe in seinen ASCII-Wert umgewandelt werden und dann um 97 verringert (ASCII 97 = 'a') if not (0 <= feld [0] <= matrixgr-1 and 0 <= feld [1] <= matrixgr-1): @@ -173,7 +195,7 @@ def feldWahl (spielerFeld): feldWahl (spielerFeld) return 0 # Rückgabe, damit die Funktion nicht mit falschem Wert weiterläuft - setFeld (spielerFeld, feld[0],feld[1], wert + 1) # Treffer wird eingetragen + setFeld (spielerFeld, feld[0],feld[1], 5) # Treffer wird eingetragen printFeld (spielerFeld, 't') @@ -181,19 +203,17 @@ def feldWahl (spielerFeld): print ("TREFFER! \n Es darf direkt ein neues Feld gewählt werden!") feldWahl (spielerFeld) else: - print ("Der Bot zieht nun...") - + print ("Leider kein Treffer! Der Bot zieht nun...") def Initialisiere (): global gegnerFeld, eigenFeld - print ("Gegnerisches Feld wird generiert...\n\n") gegnerFeld= makeFeld () fuellFeld (gegnerFeld) while summeFeld (gegnerFeld) != 34: gegnerFeld= makeFeld () fuellFeld (gegnerFeld) - + gegnerFeld += ['Gegnerisches Feld:'] print ("Das gegnerische Feld wurde generiert!\nDieses wurde für dich zufällig generiert: ") akzeptiert = False eing = '' @@ -205,15 +225,60 @@ def Initialisiere (): while summeFeld (eigenFeld) != 34: eigenFeld= makeFeld () fuellFeld (eigenFeld) + eigenFeld += ['Eigenes Feld:'] printFeld (eigenFeld, 'a') eing = str(input("Ist dieses Feld akzeptabel? [J: Ja / Irgendwas: Nein, Neues!] ")) + +def SchwierigkeitsWahl (): + try: + diff = float(input("Bitte wähle die Schwierigkeit von 0-sehr einfach bis 10-sehr schwer! [0-10] ")) + except: + print ("Keine valide Eingabe!") + SchwierigkeitsWahl () + return 0 + if not (0<=diff<= 10): + print ("Der Schwierigkeitsgrad muss zwischen 0 und 10 sein!") + SchwierigkeitsWahl () + return 0 + + return diff + + +def botwahl (spielerFeld, diff): + diff *= 10 + wurf = random.randint (-5, 105) + feld = [random.randint (0, matrixgr-1), random.randint (0, matrixgr-1)] + treffer = False + if diff >= wurf: + while getFeld(spielerFeld, feld [0], feld [1]) != 2: + feld = [random.randint (0, matrixgr-1), random.randint (0, matrixgr-1)] + treffer = True + else: + while getFeld(spielerFeld, feld [0], feld [1]) != 0: + feld = [random.randint (0, matrixgr-1), random.randint (0, matrixgr-1)] + + setFeld (spielerFeld, feld[0], feld[1], 5) + printFeld (spielerFeld, 'a') + if treffer: + print ("Der Bot hat getroffen! Er darf noch ein Feld wählen!") + time.sleep (1) + botwahl (spielerFeld, diff/11) + else: + print ("Der Bot hat nicht getroffen! Du bist nun dran!") + + + + + def start (): - # SchwierigkeitsWahl () + level = SchwierigkeitsWahl () Initialisiere () - print ("So sieht das gegnerische Feld aus:") - printFeld (gegnerFeld, 't') - while True: + while zweicheck (eigenFeld) and zweicheck (gegnerFeld): feldWahl (gegnerFeld) + time.sleep (1) + botwahl (eigenFeld, level) + time.sleep (2) + start () \ No newline at end of file