Merge branch 'main' into fixSchiff
This commit is contained in:
@ -4,14 +4,16 @@ matrixgr = 7 # Größe des Spielfeldes (7x7)
|
|||||||
|
|
||||||
def makeFeld ():
|
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
|
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
|
return feld
|
||||||
|
|
||||||
|
|
||||||
|
# RAUS :
|
||||||
|
# noinspection PyTypeChecker
|
||||||
def printFelder():
|
def printFelder():
|
||||||
# Von Feld1 werden nur die abgeschossenen Felder gezeigt, von Feld2 alle.
|
# Von Feld1 werden nur die abgeschossenen Felder gezeigt, von Feld2 alle.
|
||||||
|
|
||||||
output = [[gegnerFeld [matrixgr]],[' ' + eigenFeld [matrixgr]]] # In die Liste Output werden die auszugebenden Elemente eingetragen, damit sie am Ende alle gleichzeitig nebeneinander ausgegeben werden können
|
output = [[gegnerFeld [matrixgr]],[' ' + eigenFeld [matrixgr]]] # In die Liste Output werden die auszugebenden Elemente eingetragen, damit sie am Ende alle gleichzeitig nebeneinander ausgegeben werden können
|
||||||
|
|
||||||
for i in output:
|
for i in output:
|
||||||
i+= [" 1 2 3 4 5 6 7 "]
|
i+= [" 1 2 3 4 5 6 7 "]
|
||||||
|
|
||||||
@ -27,7 +29,7 @@ def printFelder():
|
|||||||
elif f==0: # Zeige NUR TREFFER an, ~ um vom eigenen Feld zu differenzieren
|
elif f==0: # Zeige NUR TREFFER an, ~ um vom eigenen Feld zu differenzieren
|
||||||
zeile+=' [ ~ ] '
|
zeile+=' [ ~ ] '
|
||||||
elif n== [1]:
|
elif n== [1]:
|
||||||
zeile+=' [ . ] ' # Feld wurde abgeschossen
|
zeile+=' [ . ] ' # Feld wurde abgeschossen
|
||||||
elif n==[2]:
|
elif n==[2]:
|
||||||
if f == 1: # Zeige ALLE Felder an
|
if f == 1: # Zeige ALLE Felder an
|
||||||
zeile+=' [ ■ ] ' # Auf dem Feld ist ein ungetroffenes Schiff
|
zeile+=' [ ■ ] ' # Auf dem Feld ist ein ungetroffenes Schiff
|
||||||
@ -35,14 +37,14 @@ def printFelder():
|
|||||||
zeile+=' [ ~ ] '
|
zeile+=' [ ~ ] '
|
||||||
elif n==[3]:
|
elif n==[3]:
|
||||||
zeile+=' [ X ] ' # Das Schiff auf dem Feld wurde getroffen
|
zeile+=' [ X ] ' # Das Schiff auf dem Feld wurde getroffen
|
||||||
|
|
||||||
if ord(NZeile.lower())-97 < matrixgr:
|
if ord(NZeile.lower())-97 < matrixgr:
|
||||||
output [f] += [NZeile + ' ' + zeile]
|
output [f] += [NZeile + ' ' + zeile]
|
||||||
else:
|
else:
|
||||||
output [f] += [' ' + zeile]
|
output [f] += [' ' + zeile]
|
||||||
NZeile = chr(ord(NZeile)+1)
|
NZeile = chr(ord(NZeile)+1)
|
||||||
|
|
||||||
for i in range (0,len(output[0])):
|
for i in range (0, len(output[0])):
|
||||||
print (output [0][i], ' ' + output [1][i])
|
print (output [0][i], ' ' + output [1][i])
|
||||||
print ("")
|
print ("")
|
||||||
|
|
||||||
@ -50,62 +52,63 @@ def printFelder():
|
|||||||
def setFeld (spielerFeld, zeile, spalte, wert):
|
def setFeld (spielerFeld, zeile, spalte, wert):
|
||||||
#zeile = ord(zeile.lower())-97 # Weil die Zeilen traditionell nach Buchstaben benannt werden, muss erst der Buchstabe in seinen ASCII-Wert umgewandelt werden und dann um 97 verringer (ASCII 97 = 'a')
|
#zeile = ord(zeile.lower())-97 # Weil die Zeilen traditionell nach Buchstaben benannt werden, muss erst der Buchstabe in seinen ASCII-Wert umgewandelt werden und dann um 97 verringer (ASCII 97 = 'a')
|
||||||
#spielerFeld [zeile][spalte-1][0] = wert # Weil die Nummerierung der Spalten bei 1 anfangen soll hier -1
|
#spielerFeld [zeile][spalte-1][0] = wert # Weil die Nummerierung der Spalten bei 1 anfangen soll hier -1
|
||||||
if wert == 5:
|
if wert == 5:
|
||||||
wert = getFeld (spielerFeld, zeile, spalte) +1 # Um den Wert im Feld um eins zu erhöhen
|
wert = getFeld (spielerFeld, zeile, spalte) +1 # Um den Wert im Feld um eins zu erhöhen
|
||||||
spielerFeld [zeile][spalte][0] = wert
|
spielerFeld [zeile][spalte][0] = wert
|
||||||
|
|
||||||
|
|
||||||
def getFeld (spielerFeld, zeile, spalte):
|
def getFeld (spielerFeld, zeile, spalte):
|
||||||
#zeile = ord(zeile.lower())-97
|
#zeile = ord(zeile.lower())-97
|
||||||
#return spielerFeld [zeile][spalte-1][0]
|
#return spielerFeld [zeile][spalte-1][0]
|
||||||
return spielerFeld [zeile][spalte][0]
|
return spielerFeld [zeile][spalte][0]
|
||||||
|
|
||||||
|
|
||||||
def summeFeld (spielerFeld):
|
def summeFeld (spielerFeld):
|
||||||
summe = 0
|
summe = 0
|
||||||
for i in spielerFeld:
|
for i in spielerFeld:
|
||||||
for e in i:
|
for e in i:
|
||||||
for n in e:
|
for n in e:
|
||||||
summe += n
|
summe += n
|
||||||
return summe
|
return summe
|
||||||
|
|
||||||
|
|
||||||
def zweicheck (spielerFeld):
|
def zweicheck (spielerFeld):
|
||||||
for i in spielerFeld:
|
for i in spielerFeld:
|
||||||
for e in i:
|
for e in i:
|
||||||
for n in e:
|
for n in e:
|
||||||
if n == 2:
|
if n == 2:
|
||||||
return True
|
return True
|
||||||
|
|
||||||
|
|
||||||
def checkUmfeld (spielerFeld, zeile, spalte):
|
def checkUmfeld (spielerFeld, zeile, spalte):
|
||||||
if getFeld (spielerFeld, zeile, spalte) == 2: # Wenn auf dem Feld schon ein Schiff ist, kann der Check direkt abgebrochen werden
|
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 matrixgr > zeile >= 0 and matrixgr > spalte >= 0:
|
||||||
if zeile+1 < matrixgr:
|
if zeile+1 < matrixgr:
|
||||||
if getFeld (spielerFeld, zeile+1, spalte) != 2:
|
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) !=2:
|
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) !=2:
|
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) !=2:
|
if getFeld (spielerFeld, zeile, spalte-1) !=2:
|
||||||
summe += 1
|
summe += 1
|
||||||
else:
|
else:
|
||||||
summe+= 1
|
summe+= 1
|
||||||
|
|
||||||
if summe < 4:
|
if summe < 4:
|
||||||
return False
|
return False
|
||||||
else:
|
else:
|
||||||
@ -129,20 +132,20 @@ def setSchiff (spielerFeld, groesse, belegFeld):
|
|||||||
orientierung = random.randint (0,1) #0: horizontal, 1: vertikal
|
orientierung = random.randint (0,1) #0: horizontal, 1: vertikal
|
||||||
if orientierung == 0:
|
if orientierung == 0:
|
||||||
orig = spitze [1]
|
orig = spitze [1]
|
||||||
spitze [1] = counter
|
spitze [1] = counter
|
||||||
counterind = 1 #damit der Counter noch bearbeitet werden kann
|
counterind = 1 #damit der Counter noch bearbeitet werden kann
|
||||||
else:
|
else:
|
||||||
orig = spitze [0]
|
orig = spitze [0]
|
||||||
spitze [0] = counter
|
spitze [0] = counter
|
||||||
counterind = 0
|
counterind = 0
|
||||||
|
|
||||||
while spitze [counterind] < matrixgr: #Ab jetzt wird überprüft, ob in der ausgewählten Reihe überhaupt das Schiff hinpasst.
|
while spitze [counterind] < matrixgr: #Ab jetzt wird überprüft, ob in der ausgewählten Reihe überhaupt das Schiff hinpasst.
|
||||||
if checkUmfeld(spielerFeld, spitze[0], spitze[1]):
|
if checkUmfeld(spielerFeld, spitze[0], spitze[1]):
|
||||||
reihe += [spitze[counterind]]
|
reihe += [spitze[counterind]]
|
||||||
else:
|
else:
|
||||||
reihe = []
|
reihe = []
|
||||||
summe = 0
|
summe = 0
|
||||||
if len(reihe) >= groesse and reihe.count(orig)==1: #.count zählt, wie oft die mitgegebene Zahl in der Liste vorkommt. Wenn sie vorkommt und die Liste
|
if len(reihe) >= groesse and reihe.count(orig)==1: #.count zählt, wie oft die mitgegebene Zahl in der Liste vorkommt. Wenn sie vorkommt und die Liste
|
||||||
for i in range (len(reihe)-1, len(reihe)-groesse-1,-1): #mindestens so lang ist wie das Schiff sein soll, kann weitergemacht werden.
|
for i in range (len(reihe)-1, len(reihe)-groesse-1,-1): #mindestens so lang ist wie das Schiff sein soll, kann weitergemacht werden.
|
||||||
if orientierung == 0:
|
if orientierung == 0:
|
||||||
if checkUmfeld (spielerFeld, spitze[0], i):
|
if checkUmfeld (spielerFeld, spitze[0], i):
|
||||||
@ -162,27 +165,27 @@ def setSchiff (spielerFeld, groesse, belegFeld):
|
|||||||
if summe != groesse:
|
if summe != groesse:
|
||||||
spitze [counterind] += 1
|
spitze [counterind] += 1
|
||||||
versuch += 1
|
versuch += 1
|
||||||
else:
|
else:
|
||||||
spielerFeld = makeFeld ()
|
spielerFeld = makeFeld ()
|
||||||
versuch = 0
|
versuch = 0
|
||||||
|
|
||||||
if summeFeld(spielerFeld) != feldsumme + groesse*2 :
|
if summeFeld(spielerFeld) != feldsumme + groesse*2 :
|
||||||
spielerFeld = makeFeld ()
|
spielerFeld = makeFeld ()
|
||||||
setSchiff (spielerFeld, groesse)
|
setSchiff (spielerFeld, groesse)
|
||||||
|
|
||||||
|
|
||||||
def fuellFeld (Feld, belegFeld):
|
def fuellFeld (Feld, belegFeld):
|
||||||
for i in range (1):
|
for i in range (1):
|
||||||
setSchiff (Feld, 4, belegFeld)
|
setSchiff (Feld, 4, belegFeld)
|
||||||
|
|
||||||
for i in range (2):
|
for i in range (2):
|
||||||
setSchiff (Feld, 3, belegFeld)
|
setSchiff (Feld, 3, belegFeld)
|
||||||
|
|
||||||
for i in range (2):
|
for i in range (2):
|
||||||
setSchiff (Feld, 2, belegFeld)
|
setSchiff (Feld, 2, belegFeld)
|
||||||
|
|
||||||
for i in range (3):
|
for i in range (3):
|
||||||
setSchiff (Feld, 1, belegFeld)
|
setSchiff (Feld, 1, belegFeld)
|
||||||
|
|
||||||
|
|
||||||
def schiffVersenkt (spielerFeld, belegFeld, treffer):
|
def schiffVersenkt (spielerFeld, belegFeld, treffer):
|
||||||
@ -206,7 +209,7 @@ def schiffVersenkt (spielerFeld, belegFeld, treffer):
|
|||||||
while 0<= treffer [0] + e*i < matrixgr and 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]]]
|
schiff += [[treffer[0]+e*i, treffer [1]]]
|
||||||
e += 1
|
e += 1
|
||||||
|
|
||||||
for i in range (-1, 2, 2):
|
for i in range (-1, 2, 2):
|
||||||
if 0 <= treffer [1] + i < matrixgr:
|
if 0 <= treffer [1] + i < matrixgr:
|
||||||
if getFeld(belegFeld, treffer [0], treffer [1] + i) == gr:
|
if getFeld(belegFeld, treffer [0], treffer [1] + i) == gr:
|
||||||
@ -218,21 +221,21 @@ def schiffVersenkt (spielerFeld, belegFeld, treffer):
|
|||||||
for i in schiff:
|
for i in schiff:
|
||||||
if getFeld (spielerFeld, i[0], i[1]) == 2:
|
if getFeld (spielerFeld, i[0], i[1]) == 2:
|
||||||
return False
|
return False
|
||||||
|
|
||||||
for i in schiff:
|
for i in schiff:
|
||||||
for e in range (-1,2,2):
|
for e in range (-1,2,2):
|
||||||
if 0 <= i[0] + e < matrixgr:
|
if 0 <= i[0] + e < matrixgr:
|
||||||
if getFeld (spielerFeld, i[0]+e, i[1]) != 3:
|
if getFeld (spielerFeld, i[0]+e, i[1]) != 3:
|
||||||
setFeld (spielerFeld, i[0]+e, i[1], 1)
|
setFeld (spielerFeld, i[0]+e, i[1], 1)
|
||||||
|
|
||||||
for e in range (-1,2,2):
|
for e in range (-1,2,2):
|
||||||
if 0 <= i[1] + e < matrixgr:
|
if 0 <= i[1] + e < matrixgr:
|
||||||
if getFeld (spielerFeld, i[0], i[1]+e) != 3:
|
if getFeld (spielerFeld, i[0], i[1]+e) != 3:
|
||||||
setFeld (spielerFeld, i[0], i[1]+e, 1)
|
setFeld (spielerFeld, i[0], i[1]+e, 1)
|
||||||
|
|
||||||
return True
|
return True
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
def feldWahl (spielerFeld, belegSpFeld):
|
def feldWahl (spielerFeld, belegSpFeld):
|
||||||
@ -242,10 +245,10 @@ def feldWahl (spielerFeld, belegSpFeld):
|
|||||||
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, belegSpFeld)
|
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
|
||||||
|
|
||||||
|
|
||||||
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')
|
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):
|
if not (0 <= feld [0] <= matrixgr-1 and 0 <= feld [1] <= matrixgr-1):
|
||||||
print ("Dieses Feld existiert nicht! Bitte ein anderes wählen!")
|
print ("Dieses Feld existiert nicht! Bitte ein anderes wählen!")
|
||||||
feldWahl (spielerFeld)
|
feldWahl (spielerFeld)
|
||||||
@ -257,11 +260,11 @@ def feldWahl (spielerFeld, belegSpFeld):
|
|||||||
print ("Dieses Feld wurde schon abgeschossen! Bitte ein anderes wählen!")
|
print ("Dieses Feld wurde schon abgeschossen! Bitte ein anderes wählen!")
|
||||||
feldWahl (spielerFeld, belegSpFeld)
|
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
|
||||||
|
|
||||||
setFeld (spielerFeld, feld[0],feld[1], 5) # Treffer wird eingetragen
|
setFeld (spielerFeld, feld[0],feld[1], 5) # Treffer wird eingetragen
|
||||||
printFelder()
|
printFelder()
|
||||||
|
|
||||||
|
|
||||||
if wert+1 == 3:
|
if wert+1 == 3:
|
||||||
if not zweicheck (spielerFeld):
|
if not zweicheck (spielerFeld):
|
||||||
print ("GRATULATION! Du hast gewonnen!!!")
|
print ("GRATULATION! Du hast gewonnen!!!")
|
||||||
@ -282,7 +285,7 @@ def Initialisiere (): # Erstellt die beiden Felder
|
|||||||
belegGegFeld = makeFeld ()
|
belegGegFeld = makeFeld ()
|
||||||
fuellFeld (gegnerFeld, belegGegFeld)
|
fuellFeld (gegnerFeld, belegGegFeld)
|
||||||
while summeFeld (gegnerFeld) != 34:
|
while summeFeld (gegnerFeld) != 34:
|
||||||
gegnerFeld= makeFeld ()
|
gegnerFeld= makeFeld ()
|
||||||
fuellFeld (gegnerFeld, belegGegFeld)
|
fuellFeld (gegnerFeld, belegGegFeld)
|
||||||
gegnerFeld += ['Gegnerisches Feld:']
|
gegnerFeld += ['Gegnerisches Feld:']
|
||||||
print ("Das gegnerische Feld wurde generiert!")
|
print ("Das gegnerische Feld wurde generiert!")
|
||||||
@ -293,7 +296,7 @@ def Initialisiere (): # Erstellt die beiden Felder
|
|||||||
fuellFeld (eigenFeld, belegEigFeld)
|
fuellFeld (eigenFeld, belegEigFeld)
|
||||||
while summeFeld (eigenFeld) != 34:
|
while summeFeld (eigenFeld) != 34:
|
||||||
belegEigFeld = makeFeld ()
|
belegEigFeld = makeFeld ()
|
||||||
eigenFeld= makeFeld ()
|
eigenFeld= makeFeld ()
|
||||||
fuellFeld (eigenFeld, belegEigFeld)
|
fuellFeld (eigenFeld, belegEigFeld)
|
||||||
eigenFeld += ['Eigenes Feld:']
|
eigenFeld += ['Eigenes Feld:']
|
||||||
printFelder()
|
printFelder()
|
||||||
@ -312,7 +315,7 @@ def SchwierigkeitsWahl ():
|
|||||||
print ("Der Schwierigkeitsgrad muss zwischen 0 und 10 sein!")
|
print ("Der Schwierigkeitsgrad muss zwischen 0 und 10 sein!")
|
||||||
SchwierigkeitsWahl ()
|
SchwierigkeitsWahl ()
|
||||||
return 0
|
return 0
|
||||||
|
|
||||||
return diff
|
return diff
|
||||||
|
|
||||||
|
|
||||||
@ -328,7 +331,7 @@ def botwahl (spielerFeld, belegSpFeld, diff):
|
|||||||
else:
|
else:
|
||||||
while getFeld(spielerFeld, feld [0], feld [1]) != 0:
|
while getFeld(spielerFeld, feld [0], feld [1]) != 0:
|
||||||
feld = [random.randint (0, matrixgr-1), random.randint (0, matrixgr-1)]
|
feld = [random.randint (0, matrixgr-1), random.randint (0, matrixgr-1)]
|
||||||
|
|
||||||
setFeld (spielerFeld, feld[0], feld[1], 5)
|
setFeld (spielerFeld, feld[0], feld[1], 5)
|
||||||
printFelder()
|
printFelder()
|
||||||
if treffer:
|
if treffer:
|
||||||
@ -345,7 +348,7 @@ def botwahl (spielerFeld, belegSpFeld, diff):
|
|||||||
print ("["+chr(feld[0]+65)+str(feld[1]+1)+"]","Der Bot hat nicht getroffen! Du bist nun dran!")
|
print ("["+chr(feld[0]+65)+str(feld[1]+1)+"]","Der Bot hat nicht getroffen! Du bist nun dran!")
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
def start ():
|
def start ():
|
||||||
@ -361,10 +364,8 @@ def start ():
|
|||||||
botwahl (eigenFeld, belegEigFeld, level)
|
botwahl (eigenFeld, belegEigFeld, level)
|
||||||
if not zweicheck (eigenFeld):
|
if not zweicheck (eigenFeld):
|
||||||
break
|
break
|
||||||
|
|
||||||
print ("Das Spiel hat", int((time.time()-startzeit)//60), "Minuten", int(((time.time()-startzeit)%60)//1), "Sekunden gedauert.")
|
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] "))
|
w = str (input ("Noch eine Runde? [J: Ja/Irgendwas: Nein] "))
|
||||||
if w.lower() == 'j':
|
if w.lower() == 'j':
|
||||||
start ()
|
start ()
|
||||||
|
|
||||||
start ()
|
|
||||||
Reference in New Issue
Block a user