Abschuss-Sperre

This commit is contained in:
2023-07-07 12:08:58 +02:00
parent e1827ac7c6
commit a56a8d6c98

View File

@ -84,30 +84,30 @@ def zweicheck (spielerFeld): #Super dumm, kann optimiert werden
def checkUmfeld (spielerFeld, zeile, spalte):
if getFeld (spielerFeld, zeile, spalte) != 0:
if getFeld (spielerFeld, zeile, spalte) == 2: # Wenn auf dem Feld schon ein Schiff ist, kann der Check direkt abgebrochen werden
return False
summe = 0
if zeile < matrixgr and spalte <matrixgr and zeile >= 0 and spalte >= 0:
if zeile+1 < matrixgr:
if getFeld (spielerFeld, zeile+1, spalte) == 0:
if getFeld (spielerFeld, zeile+1, spalte) != 2:
summe += 1
else:
summe+= 1
if spalte+1 < matrixgr:
if getFeld (spielerFeld, zeile, spalte+1) == 0:
if getFeld (spielerFeld, zeile, spalte+1) !=2:
summe += 1
else:
summe+= 1
if zeile-1 >= 0:
if getFeld (spielerFeld, zeile-1, spalte) == 0:
if getFeld (spielerFeld, zeile-1, spalte) !=2:
summe += 1
else:
summe+= 1
if spalte-1 >= 0:
if getFeld (spielerFeld, zeile, spalte-1) == 0:
if getFeld (spielerFeld, zeile, spalte-1) !=2:
summe += 1
else:
summe+= 1
@ -118,7 +118,7 @@ def checkUmfeld (spielerFeld, zeile, spalte):
return True
def setSchiff (spielerFeld, groesse):
def setSchiff (spielerFeld, groesse, belegFeld):
feldsumme = summeFeld(spielerFeld)
versuch = 0
while summeFeld(spielerFeld) != feldsumme + groesse*2 :
@ -127,6 +127,7 @@ def setSchiff (spielerFeld, groesse):
if checkUmfeld(spielerFeld, spitze[0], spitze[1]): #spitze[0] ZEILE, spitze[1] SPALTE
if groesse == 1:
setFeld (spielerFeld, spitze[0], spitze[1], 2)
setFeld (belegFeld, spitze [0], spitze [1], 1) # Damit später abgerufen werden kann, wie groß das Schiff auf dem Feld ist.
else:
reihe = []
counter = 0
@ -159,8 +160,11 @@ def setSchiff (spielerFeld, groesse):
for i in range (len(reihe)-1, len(reihe)-groesse-1,-1):
if orientierung == 0:
setFeld (spielerFeld, spitze[0], i, 2)
setFeld (belegFeld, spitze[0], i, groesse) # Damit später abgerufen werden kann, wie groß das Schiff auf dem Feld ist.
else:
setFeld (spielerFeld, i, spitze[1], 2)
setFeld (belegFeld, i, spitze[1], groesse) # Damit später abgerufen werden kann, wie groß das Schiff auf dem Feld ist.
if summe != groesse:
spitze [counterind] += 1
versuch += 1
@ -173,26 +177,67 @@ def setSchiff (spielerFeld, groesse):
setSchiff (spielerFeld, groesse)
def fuellFeld (Feld):
def fuellFeld (Feld, belegFeld):
for i in range (1):
setSchiff (Feld, 4)
setSchiff (Feld, 4, belegFeld)
for i in range (2):
setSchiff (Feld, 3)
setSchiff (Feld, 3, belegFeld)
for i in range (2):
setSchiff (Feld, 2)
setSchiff (Feld, 2, belegFeld)
for i in range (3):
setSchiff (Feld, 1)
setSchiff (Feld, 1, belegFeld)
def feldWahl (spielerFeld):
def schiffVersenkt (spielerFeld, belegFeld, treffer):
gr = getFeld (belegFeld, treffer [0], treffer [1])
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:
schiff += [[treffer[0]+e*i, treffer [1]]]
e += 1
for i in range (-1, 2, 2):
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:
schiff += [[treffer[0], treffer [1]+e*i]]
e += 1
for i in schiff:
if getFeld (spielerFeld, i[0], i[1]) == 2:
return False
for i in schiff:
for e in range (-1,2,2):
if 0 <= i[0] + e < matrixgr:
if getFeld (spielerFeld, i[0]+e, i[1]) != 3:
setFeld (spielerFeld, i[0]+e, i[1], 1)
for e in range (-1,2,2):
if 0 <= i[1] + e < matrixgr:
if getFeld (spielerFeld, i[0], i[1]+e) != 3:
setFeld (spielerFeld, i[0], i[1]+e, 1)
return True
def feldWahl (spielerFeld, belegSpFeld):
feld = str(input("Wähle das Feld, das abgeschossen werden soll! "))
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)
feldWahl (spielerFeld, belegSpFeld)
return 0 # Rückgabe, damit die Funktion nicht mit falschem Wert weiterläuft
@ -218,29 +263,37 @@ def feldWahl (spielerFeld):
if not zweicheck (spielerFeld):
print ("GRATULATION! Du hast gewonnen!!!")
return 0
print ("["+chr(feld[0]+65)+str(feld[1]+1)+"]","TREFFER!\nEs darf direkt ein neues Feld gewählt werden!")
feldWahl (spielerFeld)
vers = ''
if schiffVersenkt (spielerFeld, belegSpFeld, feld):
print ("\n\n\n")
printFelder()
vers = "Das ganze Schiffe wurde versenkt!"
print ("["+chr(feld[0]+65)+str(feld[1]+1)+"]","TREFFER!", vers, "\nEs darf direkt ein neues Feld gewählt werden!")
feldWahl (spielerFeld, belegSpFeld)
else:
print ("["+chr(feld[0]+65)+str(feld[1]+1)+"]","Leider kein Treffer! Der Bot zieht nun...")
def Initialisiere ():
global gegnerFeld, eigenFeld
global gegnerFeld, eigenFeld, belegGegFeld, belegEigFeld
gegnerFeld= makeFeld ()
fuellFeld (gegnerFeld)
belegGegFeld = makeFeld ()
fuellFeld (gegnerFeld, belegGegFeld)
while summeFeld (gegnerFeld) != 34:
gegnerFeld= makeFeld ()
fuellFeld (gegnerFeld)
fuellFeld (gegnerFeld, belegGegFeld)
gegnerFeld += ['Gegnerisches Feld:']
print ("Das gegnerische Feld wurde generiert!")
akzeptiert = False
eing = ''
while eing != ('J' or 'j'):
while eing.lower () != ('j'):
eigenFeld = makeFeld ()
fuellFeld (eigenFeld)
belegEigFeld = makeFeld ()
fuellFeld (eigenFeld, belegEigFeld)
while summeFeld (eigenFeld) != 34:
belegEigFeld = makeFeld ()
eigenFeld= makeFeld ()
fuellFeld (eigenFeld)
fuellFeld (eigenFeld, belegEigFeld)
eigenFeld += ['Eigenes Feld:']
printFelder()
eing = str(input("Ist dieses Feld akzeptabel? [J: Ja / Irgendwas: Nein, Neues!] "))
@ -262,7 +315,7 @@ def SchwierigkeitsWahl ():
return diff
def botwahl (spielerFeld, diff):
def botwahl (spielerFeld, belegSpFeld, diff):
diff *= 10
wurf = random.randint (-5, 105)
feld = [random.randint (0, matrixgr-1), random.randint (0, matrixgr-1)]
@ -281,6 +334,9 @@ def botwahl (spielerFeld, diff):
if not zweicheck (spielerFeld):
print ("Schade! Der Bot hat gewonnen!")
return 0
if schiffVersenkt (spielerFeld, belegSpFeld, feld):
print ("\n\n\n")
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)
@ -297,11 +353,11 @@ def start ():
Initialisiere ()
printFelder ()
while True:
feldWahl (gegnerFeld)
feldWahl (gegnerFeld, belegGegFeld)
if not zweicheck (gegnerFeld):
break
time.sleep (1)
botwahl (eigenFeld, level)
botwahl (eigenFeld, belegEigFeld, level)
if not zweicheck (eigenFeld):
break