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):
|
||||
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
|
||||
@ -114,7 +114,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 :
|
||||
@ -123,6 +123,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
|
||||
@ -155,8 +156,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
|
||||
@ -169,26 +173,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
|
||||
|
||||
|
||||
@ -214,28 +259,36 @@ 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 (): # Erstellt die beiden Felder
|
||||
global gegnerFeld, eigenFeld
|
||||
global gegnerFeld, eigenFeld
|
||||
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!")
|
||||
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!] "))
|
||||
@ -257,7 +310,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)]
|
||||
@ -276,6 +329,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)
|
||||
@ -292,11 +348,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
|
||||
|
||||
|
||||
Reference in New Issue
Block a user