Kommentar-Kill + Doku

This commit is contained in:
2023-09-10 19:16:45 +02:00
parent 70d9f2aab3
commit 107b4c6ad3
2 changed files with 512 additions and 64 deletions

View File

@ -1,52 +1,42 @@
import random, time
matrixgr = 7 # Größe des Spielfeldes (7x7)
matrixgr = 7
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
matrixgr)]
return feld
# RAUS :
# noinspection PyTypeChecker
def printFelder():
# 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
for i in output:
i += [" 1 2 3 4 5 6 7 "]
felder = [gegnerFeld, eigenFeld]
for f in range(2): # f als erstes 0, dann 1
NZeile = 'A' # Bezeichner für die Zeile
for f in range(2):
NZeile = 'A'
for i in felder[f]:
zeile = ''
for n in i:
if n == [0]:
if f == 1: # Zeige ALLE Felder an
zeile += ' [ ] ' # Feld ist leer
if f == 1:
zeile += ' [ ] '
elif f == 0:
zeile += ' [ ~ ] '
# Zeige NUR TREFFER an, ~ um vom eigenen Feld zu differenzieren
elif n == [1]:
zeile += ' [ . ] ' # Feld wurde abgeschossen
zeile += ' [ . ] '
elif n == [2]:
if f == 1: # Zeige ALLE Felder an
if f == 1:
zeile += ' [ ■ ] '
# Auf dem Feld ist ein ungetroffenes Schiff
elif f == 0: # Zeige NUR TREFFER an
elif f == 0:
zeile += ' [ ~ ] '
elif n == [3]:
zeile += ' [ X ] '
# Das Schiff auf dem Feld wurde getroffen
if ord(NZeile.lower()) - 97 < matrixgr:
output[f] += [NZeile + ' ' + zeile]
@ -62,13 +52,11 @@ def printFelder():
def setFeld(spielerFeld, zeile, spalte, wert):
if wert == 5:
wert = getFeld(spielerFeld, zeile,
spalte) + 1 # Um den Wert im Feld um eins zu erhöhen
spalte) + 1
spielerFeld[zeile][spalte][0] = wert
def getFeld(spielerFeld, zeile, spalte):
# zeile = ord(zeile.lower())-97
# return spielerFeld [zeile][spalte-1][0]
return spielerFeld[zeile][spalte][0]
@ -92,8 +80,6 @@ def zweicheck(spielerFeld):
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
return False
summe = 0
if matrixgr > zeile >= 0 and matrixgr > spalte >= 0:
@ -135,24 +121,17 @@ def setSchiff(spielerFeld, groesse, belegFeld):
spitze = [random.randint(0, matrixgr - 1),
random.randint(0, matrixgr - 1)]
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
# Jetzt wird entschieden, ob das Schiff vertikal oder
# horizontal ausgerichtet sein soll.
orientierung = random.randint(0, 1)
# 0: horizontal, 1: vertikal
if orientierung == 0:
orig = spitze[1]
spitze[1] = counter
counterind = 1
# damit der Counter noch bearbeitet werden kann
else:
orig = spitze[0]
spitze[0] = counter
@ -160,8 +139,6 @@ def setSchiff(spielerFeld, groesse, belegFeld):
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]):
reihe += [spitze[counterind]]
else:
@ -169,9 +146,6 @@ def setSchiff(spielerFeld, groesse, belegFeld):
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 mindestens so lang ist wie das Schiff sein
# soll, kann weitergemacht werden
for i in range(len(reihe) - 1,
len(reihe) - groesse - 1,
-1):
@ -188,7 +162,6 @@ def setSchiff(spielerFeld, groesse, belegFeld):
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],
@ -201,9 +174,6 @@ def setSchiff(spielerFeld, groesse, belegFeld):
spielerFeld = makeFeld()
versuch = 0
if summeFeld(spielerFeld) != feldsumme + groesse * 2:
spielerFeld = makeFeld()
setSchiff(spielerFeld, groesse)
def fuellFeld(Feld, belegFeld):
@ -246,16 +216,17 @@ def schiffVersenkt(spielerFeld, belegFeld, treffer):
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 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
if len(schiff) == 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 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
for i in schiff:
if getFeld(spielerFeld, i[0], i[1]) == 2:
@ -276,36 +247,29 @@ def schiffVersenkt(spielerFeld, belegFeld, treffer):
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! ")).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, belegSpFeld)
return 0 # Rückgabe, damit die Funktion nicht
# mit falschem Wert weiterläuft
return 0
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):
print("Dieses Feld existiert nicht! Bitte ein anderes wählen!")
feldWahl(spielerFeld)
return 0 # Rückgabe, damit die Funktion nicht
# mit falschem Wert weiterläuft
return 0
wert = getFeld(spielerFeld, feld[0], feld[1])
if wert == 1 or wert == 3:
print("Dieses Feld wurde schon abgeschossen! Bitte ein anderes wählen!")
feldWahl(spielerFeld, belegSpFeld)
return 0 # Rückgabe, damit die Funktion nicht mit falschem Wert
# weiterläuft
return 0
setFeld(spielerFeld, feld[0], feld[1], 5) # Treffer wird eingetragen
setFeld(spielerFeld, feld[0], feld[1], 5)
printFelder()
if wert + 1 == 3:
@ -325,7 +289,7 @@ def feldWahl(spielerFeld, belegSpFeld):
"Leider kein Treffer! Der Bot zieht nun...")
def Initialisiere(): # Erstellt die beiden Felder
def Initialisiere():
global gegnerFeld, eigenFeld, belegEigFeld, belegGegFeld
gegnerFeld = makeFeld()
belegGegFeld = makeFeld()
@ -422,4 +386,4 @@ def start():
start()
start()
start()