Merge branch 'main' of https://git.paulmartin.cloud/paul/SchiffeVersenken
This commit is contained in:
@ -80,30 +80,30 @@ def zweicheck (spielerFeld):
|
|||||||
|
|
||||||
|
|
||||||
def checkUmfeld (spielerFeld, zeile, spalte):
|
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
|
return False
|
||||||
summe = 0
|
summe = 0
|
||||||
if zeile < matrixgr and spalte <matrixgr and zeile >= 0 and spalte >= 0:
|
if zeile < matrixgr and spalte <matrixgr and zeile >= 0 and spalte >= 0:
|
||||||
if zeile+1 < matrixgr:
|
if zeile+1 < matrixgr:
|
||||||
if getFeld (spielerFeld, zeile+1, spalte) == 0:
|
if getFeld (spielerFeld, zeile+1, spalte) != 2:
|
||||||
summe += 1
|
summe += 1
|
||||||
else:
|
else:
|
||||||
summe+= 1
|
summe+= 1
|
||||||
|
|
||||||
if spalte+1 < matrixgr:
|
if spalte+1 < matrixgr:
|
||||||
if getFeld (spielerFeld, zeile, spalte+1) == 0:
|
if getFeld (spielerFeld, zeile, spalte+1) !=2:
|
||||||
summe += 1
|
summe += 1
|
||||||
else:
|
else:
|
||||||
summe+= 1
|
summe+= 1
|
||||||
|
|
||||||
if zeile-1 >= 0:
|
if zeile-1 >= 0:
|
||||||
if getFeld (spielerFeld, zeile-1, spalte) == 0:
|
if getFeld (spielerFeld, zeile-1, spalte) !=2:
|
||||||
summe += 1
|
summe += 1
|
||||||
else:
|
else:
|
||||||
summe+= 1
|
summe+= 1
|
||||||
|
|
||||||
if spalte-1 >= 0:
|
if spalte-1 >= 0:
|
||||||
if getFeld (spielerFeld, zeile, spalte-1) == 0:
|
if getFeld (spielerFeld, zeile, spalte-1) !=2:
|
||||||
summe += 1
|
summe += 1
|
||||||
else:
|
else:
|
||||||
summe+= 1
|
summe+= 1
|
||||||
@ -114,7 +114,7 @@ def checkUmfeld (spielerFeld, zeile, spalte):
|
|||||||
return True
|
return True
|
||||||
|
|
||||||
|
|
||||||
def setSchiff (spielerFeld, groesse):
|
def setSchiff (spielerFeld, groesse, belegFeld):
|
||||||
feldsumme = summeFeld(spielerFeld)
|
feldsumme = summeFeld(spielerFeld)
|
||||||
versuch = 0
|
versuch = 0
|
||||||
while summeFeld(spielerFeld) != feldsumme + groesse*2 :
|
while summeFeld(spielerFeld) != feldsumme + groesse*2 :
|
||||||
@ -123,6 +123,7 @@ def setSchiff (spielerFeld, groesse):
|
|||||||
if checkUmfeld(spielerFeld, spitze[0], spitze[1]): #spitze[0] ZEILE, spitze[1] SPALTE
|
if checkUmfeld(spielerFeld, spitze[0], spitze[1]): #spitze[0] ZEILE, spitze[1] SPALTE
|
||||||
if groesse == 1:
|
if groesse == 1:
|
||||||
setFeld (spielerFeld, spitze[0], spitze[1], 2)
|
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:
|
else:
|
||||||
reihe = []
|
reihe = []
|
||||||
counter = 0
|
counter = 0
|
||||||
@ -155,8 +156,11 @@ def setSchiff (spielerFeld, groesse):
|
|||||||
for i in range (len(reihe)-1, len(reihe)-groesse-1,-1):
|
for i in range (len(reihe)-1, len(reihe)-groesse-1,-1):
|
||||||
if orientierung == 0:
|
if orientierung == 0:
|
||||||
setFeld (spielerFeld, spitze[0], i, 2)
|
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:
|
else:
|
||||||
setFeld (spielerFeld, i, spitze[1], 2)
|
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:
|
if summe != groesse:
|
||||||
spitze [counterind] += 1
|
spitze [counterind] += 1
|
||||||
versuch += 1
|
versuch += 1
|
||||||
@ -169,26 +173,67 @@ def setSchiff (spielerFeld, groesse):
|
|||||||
setSchiff (spielerFeld, groesse)
|
setSchiff (spielerFeld, groesse)
|
||||||
|
|
||||||
|
|
||||||
def fuellFeld (Feld):
|
def fuellFeld (Feld, belegFeld):
|
||||||
for i in range (1):
|
for i in range (1):
|
||||||
setSchiff (Feld, 4)
|
setSchiff (Feld, 4, belegFeld)
|
||||||
|
|
||||||
for i in range (2):
|
for i in range (2):
|
||||||
setSchiff (Feld, 3)
|
setSchiff (Feld, 3, belegFeld)
|
||||||
|
|
||||||
for i in range (2):
|
for i in range (2):
|
||||||
setSchiff (Feld, 2)
|
setSchiff (Feld, 2, belegFeld)
|
||||||
|
|
||||||
for i in range (3):
|
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 = str(input("Wähle das Feld, das abgeschossen werden soll! "))
|
||||||
feld.replace (" ", "")
|
feld.replace (" ", "")
|
||||||
if (len(feld) != 2 ) or (not feld[0].isalpha ()) or (not feld[1].isdigit()):
|
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]")
|
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
|
return 0 # Rückgabe, damit die Funktion nicht mit falschem Wert weiterläuft
|
||||||
|
|
||||||
|
|
||||||
@ -214,28 +259,36 @@ def feldWahl (spielerFeld):
|
|||||||
if not zweicheck (spielerFeld):
|
if not zweicheck (spielerFeld):
|
||||||
print ("GRATULATION! Du hast gewonnen!!!")
|
print ("GRATULATION! Du hast gewonnen!!!")
|
||||||
return 0
|
return 0
|
||||||
print ("["+chr(feld[0]+65)+str(feld[1]+1)+"]","TREFFER!\nEs darf direkt ein neues Feld gewählt werden!")
|
vers = ''
|
||||||
feldWahl (spielerFeld)
|
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:
|
else:
|
||||||
print ("["+chr(feld[0]+65)+str(feld[1]+1)+"]","Leider kein Treffer! Der Bot zieht nun...")
|
print ("["+chr(feld[0]+65)+str(feld[1]+1)+"]","Leider kein Treffer! Der Bot zieht nun...")
|
||||||
|
|
||||||
|
|
||||||
def Initialisiere (): # Erstellt die beiden Felder
|
def Initialisiere (): # Erstellt die beiden Felder
|
||||||
|
global gegnerFeld, eigenFeld
|
||||||
global gegnerFeld, eigenFeld
|
global gegnerFeld, eigenFeld
|
||||||
gegnerFeld= makeFeld ()
|
gegnerFeld= makeFeld ()
|
||||||
fuellFeld (gegnerFeld)
|
belegGegFeld = makeFeld ()
|
||||||
|
fuellFeld (gegnerFeld, belegGegFeld)
|
||||||
while summeFeld (gegnerFeld) != 34:
|
while summeFeld (gegnerFeld) != 34:
|
||||||
gegnerFeld= makeFeld ()
|
gegnerFeld= makeFeld ()
|
||||||
fuellFeld (gegnerFeld)
|
fuellFeld (gegnerFeld, belegGegFeld)
|
||||||
gegnerFeld += ['Gegnerisches Feld:']
|
gegnerFeld += ['Gegnerisches Feld:']
|
||||||
print ("Das gegnerische Feld wurde generiert!")
|
print ("Das gegnerische Feld wurde generiert!")
|
||||||
eing = ''
|
eing = ''
|
||||||
while eing != ('J' or 'j'):
|
while eing.lower () != ('j'):
|
||||||
eigenFeld = makeFeld ()
|
eigenFeld = makeFeld ()
|
||||||
fuellFeld (eigenFeld)
|
belegEigFeld = makeFeld ()
|
||||||
|
fuellFeld (eigenFeld, belegEigFeld)
|
||||||
while summeFeld (eigenFeld) != 34:
|
while summeFeld (eigenFeld) != 34:
|
||||||
|
belegEigFeld = makeFeld ()
|
||||||
eigenFeld= makeFeld ()
|
eigenFeld= makeFeld ()
|
||||||
fuellFeld (eigenFeld)
|
fuellFeld (eigenFeld, belegEigFeld)
|
||||||
eigenFeld += ['Eigenes Feld:']
|
eigenFeld += ['Eigenes Feld:']
|
||||||
printFelder()
|
printFelder()
|
||||||
eing = str(input("Ist dieses Feld akzeptabel? [J: Ja / Irgendwas: Nein, Neues!] "))
|
eing = str(input("Ist dieses Feld akzeptabel? [J: Ja / Irgendwas: Nein, Neues!] "))
|
||||||
@ -257,7 +310,7 @@ def SchwierigkeitsWahl ():
|
|||||||
return diff
|
return diff
|
||||||
|
|
||||||
|
|
||||||
def botwahl (spielerFeld, diff):
|
def botwahl (spielerFeld, belegSpFeld, diff):
|
||||||
diff *= 10
|
diff *= 10
|
||||||
wurf = random.randint (-5, 105)
|
wurf = random.randint (-5, 105)
|
||||||
feld = [random.randint (0, matrixgr-1), random.randint (0, matrixgr-1)]
|
feld = [random.randint (0, matrixgr-1), random.randint (0, matrixgr-1)]
|
||||||
@ -276,6 +329,9 @@ def botwahl (spielerFeld, diff):
|
|||||||
if not zweicheck (spielerFeld):
|
if not zweicheck (spielerFeld):
|
||||||
print ("Schade! Der Bot hat gewonnen!")
|
print ("Schade! Der Bot hat gewonnen!")
|
||||||
return 0
|
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!")
|
print ("["+chr(feld[0]+65)+str(feld[1]+1)+"]","Der Bot hat getroffen! Er darf noch ein Feld wählen!")
|
||||||
time.sleep (1)
|
time.sleep (1)
|
||||||
botwahl (spielerFeld, diff/10.25)
|
botwahl (spielerFeld, diff/10.25)
|
||||||
@ -292,11 +348,11 @@ def start ():
|
|||||||
Initialisiere ()
|
Initialisiere ()
|
||||||
printFelder ()
|
printFelder ()
|
||||||
while True:
|
while True:
|
||||||
feldWahl (gegnerFeld)
|
feldWahl (gegnerFeld, belegGegFeld)
|
||||||
if not zweicheck (gegnerFeld):
|
if not zweicheck (gegnerFeld):
|
||||||
break
|
break
|
||||||
time.sleep (1)
|
time.sleep (1)
|
||||||
botwahl (eigenFeld, level)
|
botwahl (eigenFeld, belegEigFeld, level)
|
||||||
if not zweicheck (eigenFeld):
|
if not zweicheck (eigenFeld):
|
||||||
break
|
break
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user