From a3f5f043b682601eb1e034013431a4ff2894de33 Mon Sep 17 00:00:00 2001 From: paulmart-n Date: Fri, 14 Jul 2023 10:09:15 +0200 Subject: [PATCH] fixed Out Of Range Error --- schiffe-versenken.py | 24 +++++++++++++++--------- 1 file changed, 15 insertions(+), 9 deletions(-) diff --git a/schiffe-versenken.py b/schiffe-versenken.py index ffd5a73..403bebc 100644 --- a/schiffe-versenken.py +++ b/schiffe-versenken.py @@ -1,5 +1,3 @@ -# TO DO: Benachritigung bei komplettem Schiff-Abschuss? - import random, time matrixgr = 7 # Größe des Spielfeldes (7x7) @@ -190,13 +188,22 @@ def fuellFeld (Feld, belegFeld): def schiffVersenkt (spielerFeld, belegFeld, treffer): gr = getFeld (belegFeld, treffer [0], treffer [1]) + if gr == 1: + for i in range (-1, 2, 2): + if 0 <= treffer [0] + i < matrixgr: + setFeld (spielerFeld, treffer [0]+i, treffer [1], 1) + for i in range (-1, 2, 2): + if 0 <= treffer [1] + i < matrixgr: + setFeld (spielerFeld, treffer [0], treffer [1]+i, 1) + return True + schiff = [treffer] for i in range (-1, 2, 2): if 0 <= treffer [0] + i < matrixgr: if getFeld(belegFeld, treffer [0] + i, treffer [1]) == gr: e = 1 - while getFeld (belegFeld, treffer [0] + e*i, treffer [1]) == gr: + while 0<= treffer [0] + e*i < matrixgr and getFeld (belegFeld, treffer [0] + e*i, treffer [1]) == gr: schiff += [[treffer[0]+e*i, treffer [1]]] e += 1 @@ -204,7 +211,7 @@ def schiffVersenkt (spielerFeld, belegFeld, treffer): if 0 <= treffer [1] + i < matrixgr: if getFeld(belegFeld, treffer [0], treffer [1] + i) == gr: e = 1 - while getFeld (belegFeld, treffer [0], treffer [1] + e*i) == gr: + while 0<= treffer [1] + e*i < matrixgr and getFeld (belegFeld, treffer [0], treffer [1] + e*i) == gr: schiff += [[treffer[0], treffer [1]+e*i]] e += 1 @@ -248,7 +255,7 @@ def feldWahl (spielerFeld, belegSpFeld): if wert == 1 or wert == 3: print ("Dieses Feld wurde schon abgeschossen! Bitte ein anderes wählen!") - feldWahl (spielerFeld) + feldWahl (spielerFeld, belegSpFeld) return 0 # Rückgabe, damit die Funktion nicht mit falschem Wert weiterläuft setFeld (spielerFeld, feld[0],feld[1], 5) # Treffer wird eingetragen @@ -270,8 +277,7 @@ def feldWahl (spielerFeld, belegSpFeld): print ("["+chr(feld[0]+65)+str(feld[1]+1)+"]","Leider kein Treffer! Der Bot zieht nun...") def Initialisiere (): # Erstellt die beiden Felder - global gegnerFeld, eigenFeld - global gegnerFeld, eigenFeld + global gegnerFeld, eigenFeld, belegEigFeld, belegGegFeld gegnerFeld= makeFeld () belegGegFeld = makeFeld () fuellFeld (gegnerFeld, belegGegFeld) @@ -334,7 +340,7 @@ def botwahl (spielerFeld, belegSpFeld, diff): printFelder () print ("["+chr(feld[0]+65)+str(feld[1]+1)+"]","Der Bot hat getroffen! Er darf noch ein Feld wählen!") time.sleep (1) - botwahl (spielerFeld, diff/10.25) + botwahl (spielerFeld, belegSpFeld, diff/10.25) else: print ("["+chr(feld[0]+65)+str(feld[1]+1)+"]","Der Bot hat nicht getroffen! Du bist nun dran!") @@ -358,7 +364,7 @@ def start (): print ("Das Spiel hat", int((time.time()-startzeit)//60), "Minuten", int(((time.time()-startzeit)%60)//1), "Sekunden gedauert.") w = str (input ("Noch eine Runde? [J: Ja/Irgendwas: Nein] ")) - if w == 'J': + if w.lower() == 'j': start () start () \ No newline at end of file -- 2.36.6