diff --git a/schiffe-versenken.py b/schiffe-versenken.py index 52132b7..dc83576 100644 --- a/schiffe-versenken.py +++ b/schiffe-versenken.py @@ -1,8 +1,4 @@ - ## TO DO: NUR DIE SCHON ABGESCHOSSENEN FELDER ANZEIGEN LASSEN -## TO DO: DIE SCHIFFE AUCH VERTIKAL PLATZIEREN --> FIXEN -## TO DO: CHECKUMFELD FIXEN - import random @@ -12,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): +def printFeld (spielerFeld, modus): + print ("\n 1 2 3 4 5 6 7") + NZeile = 'A' for i in spielerFeld: zeile = '' for n in i: @@ -21,10 +19,14 @@ def printFeld (spielerFeld): elif n== [1]: zeile+=' [ . ] ' # Feld wurde abgeschossen elif n==[2]: - zeile+=' [ ■ ] ' # Auf dem Feld ist ein ungetroffenes Schiff + if modus == 'a': # Zeige ALLE Felder an + zeile+=' [ ■ ] ' # Auf dem Feld ist ein ungetroffenes Schiff + elif modus == 't': # Zeige NUR TREFFER an + zeile+=' [ ] ' elif n==[3]: zeile+=' [ X ] ' # Das Schiff auf dem Feld wurde getroffen - print ('\n'+zeile) + print ('\n' + NZeile + ' ' + zeile) + NZeile = chr(ord(NZeile)+1) print ('\n') def setFeld (spielerFeld, zeile, spalte, wert): @@ -150,24 +152,68 @@ def fuellFeld (Feld): setSchiff (Feld, 1) -print ("Gegnerisches Feld wird generiert...\n\n") +def feldWahl (spielerFeld): + feld = str(input("Wähle das Feld, das abgeschossen werden soll! ")) + if len(feld) != 2: + 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): + print ("Dieses Feld existiert nicht! Bitte ein anderes wählen!") + feldWahl (spielerFeld) + return 0 # Rückgabe, damit die Funktion nicht mit falschem Wert weiterläuft -gegnerFeld= makeFeld () -fuellFeld (gegnerFeld) -while summeFeld (gegnerFeld) != 34: + wert = getFeld (spielerFeld,feld[0],feld[1]) + + if wert == 1 or wert == 3: + print ("Dieses Feld wurde schon abgeschossen! Bitte ein anderes wählen!") + 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 + printFeld (spielerFeld, 't') + + + if wert+1 == 3: + print ("TREFFER! \n Es darf direkt ein neues Feld gewählt werden!") + feldWahl (spielerFeld) + else: + print ("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) -print ("Das gegnerische Feld wurde generiert!\nDieses wurde für dich zufällig generiert: \n") -akzeptiert = False -eing = '' -while eing != ('J' or 'j'): - if eing != '': - print ("Neues Feld wird generiert. Das kann etwas dauern...") - eigenFeld = makeFeld () - fuellFeld (eigenFeld) - while summeFeld (eigenFeld) != 34: - eigenFeld= makeFeld () + print ("Das gegnerische Feld wurde generiert!\nDieses wurde für dich zufällig generiert: ") + akzeptiert = False + eing = '' + while eing != ('J' or 'j'): + if eing != '': + print ("Neues Feld wird generiert. Das kann etwas dauern...") + eigenFeld = makeFeld () fuellFeld (eigenFeld) - printFeld (eigenFeld) - eing = str(input("Ist dieses Feld akzeptabel? [J: Ja / Irgendwas: Nein, Neues!] ")) \ No newline at end of file + while summeFeld (eigenFeld) != 34: + eigenFeld= makeFeld () + fuellFeld (eigenFeld) + printFeld (eigenFeld, 'a') + eing = str(input("Ist dieses Feld akzeptabel? [J: Ja / Irgendwas: Nein, Neues!] ")) + +def start (): + # SchwierigkeitsWahl () + Initialisiere () + print ("So sieht das gegnerische Feld aus:") + printFeld (gegnerFeld, 't') + while True: + feldWahl (gegnerFeld) + +start () \ No newline at end of file