import random, time matrixgr = 7 def makeFeld(): feld = [[[0] for i in range(matrixgr)] for e in range( matrixgr)] return feld def printFelder(): output = [[gegnerFeld[matrixgr]], [ ' ' + eigenFeld[matrixgr]]] for i in output: i += [" 1 2 3 4 5 6 7 "] felder = [gegnerFeld, eigenFeld] for f in range(2): NZeile = 'A' for i in felder[f]: zeile = '' for n in i: if n == [0]: if f == 1: zeile += ' [ ] ' elif f == 0: zeile += ' [ ~ ] ' elif n == [1]: zeile += ' [ . ] ' elif n == [2]: if f == 1: zeile += ' [ ■ ] ' elif f == 0: zeile += ' [ ~ ] ' elif n == [3]: zeile += ' [ X ] ' if ord(NZeile.lower()) - 97 < matrixgr: output[f] += [NZeile + ' ' + zeile] else: output[f] += [' ' + zeile] NZeile = chr(ord(NZeile) + 1) for i in range(0, len(output[0])): print(output[0][i], ' ' + output[1][i]) print("") def setFeld(spielerFeld, zeile, spalte, wert): if wert == 5: wert = getFeld(spielerFeld, zeile, spalte) + 1 spielerFeld[zeile][spalte][0] = wert def getFeld(spielerFeld, zeile, spalte): return spielerFeld[zeile][spalte][0] def summeFeld(spielerFeld): summe = 0 for i in spielerFeld: for e in i: for n in e: summe += n return summe def zweicheck(spielerFeld): for i in spielerFeld: for e in i: for n in e: if n == 2: return True def checkUmfeld(spielerFeld, zeile, spalte): if getFeld(spielerFeld, zeile, spalte) == 2: return False summe = 0 if matrixgr > zeile >= 0 and matrixgr > spalte >= 0: if zeile + 1 < matrixgr: if getFeld(spielerFeld, zeile + 1, spalte) != 2: summe += 1 else: summe += 1 if spalte + 1 < matrixgr: if getFeld(spielerFeld, zeile, spalte + 1) != 2: summe += 1 else: summe += 1 if zeile - 1 >= 0: if getFeld(spielerFeld, zeile - 1, spalte) != 2: summe += 1 else: summe += 1 if spalte - 1 >= 0: if getFeld(spielerFeld, zeile, spalte - 1) != 2: summe += 1 else: summe += 1 if summe < 4: return False else: return True def setSchiff(spielerFeld, groesse, belegFeld): feldsumme = summeFeld(spielerFeld) versuch = 0 while summeFeld(spielerFeld) != feldsumme + groesse * 2: if versuch < 25: spitze = [random.randint(0, matrixgr - 1), random.randint(0, matrixgr - 1)] if checkUmfeld(spielerFeld, spitze[0], spitze[1]): if groesse == 1: setFeld(spielerFeld, spitze[0], spitze[1], 2) setFeld(belegFeld, spitze[0], spitze[1], 1) else: reihe = [] counter = 0 orientierung = random.randint(0, 1) if orientierung == 0: orig = spitze[1] spitze[1] = counter counterind = 1 else: orig = spitze[0] spitze[0] = counter counterind = 0 while spitze[ counterind] < matrixgr: if checkUmfeld(spielerFeld, spitze[0], spitze[1]): reihe += [spitze[counterind]] else: reihe = [] summe = 0 if len(reihe) >= groesse and reihe.count( orig) == 1: for i in range(len(reihe) - 1, len(reihe) - groesse - 1, -1): if orientierung == 0: if checkUmfeld(spielerFeld, spitze[0], i): summe += 1 else: if checkUmfeld(spielerFeld, i, spitze[1]): summe += 1 if summe == 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) else: setFeld(spielerFeld, i, spitze[1], 2) setFeld(belegFeld, i, spitze[1], groesse) if summe != groesse: spitze[counterind] += 1 versuch += 1 else: spielerFeld = makeFeld() versuch = 0 def fuellFeld(Feld, belegFeld): for i in range(1): setSchiff(Feld, 4, belegFeld) for i in range(2): setSchiff(Feld, 3, belegFeld) for i in range(2): setSchiff(Feld, 2, belegFeld) for i in range(3): setSchiff(Feld, 1, belegFeld) def schiffVersenkt(spielerFeld, belegFeld, treffer): gr = getFeld(belegFeld, treffer[0], treffer[1]) if gr == 1: for i in range(-1, 2, 2): if 0 <= treffer[0] + i < matrixgr: setFeld(spielerFeld, treffer[0] + i, treffer[1], 1) for i in range(-1, 2, 2): if 0 <= treffer[1] + i < matrixgr: setFeld(spielerFeld, treffer[0], treffer[1] + i, 1) return True 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 0 <= treffer[0]+e*i= wurf: while getFeld(spielerFeld, feld[0], feld[1]) != 2: feld = [random.randint(0, matrixgr - 1), random.randint(0, matrixgr - 1)] treffer = True else: while getFeld(spielerFeld, feld[0], feld[1]) != 0: feld = [random.randint(0, matrixgr - 1), random.randint(0, matrixgr - 1)] setFeld(spielerFeld, feld[0], feld[1], 5) printFelder() if treffer: 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, belegSpFeld, diff / 10.25) else: print("[" + chr(feld[0] + 65) + str(feld[1] + 1) + "]", "Der Bot hat nicht getroffen! Du bist nun dran!") def start(): startzeit = time.time() level = SchwierigkeitsWahl() Initialisiere() printFelder() while True: feldWahl(gegnerFeld, belegGegFeld) if not zweicheck(gegnerFeld): break time.sleep(1) botwahl(eigenFeld, belegEigFeld, level) if not zweicheck(eigenFeld): break 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] ")) if w.lower() == 'j': start() start()