Skip to content

Instantly share code, notes, and snippets.

@horstjens
Last active July 4, 2025 08:58
Show Gist options
  • Save horstjens/a98d6fce5e22790b4c103457fb25003b to your computer and use it in GitHub Desktop.
Save horstjens/a98d6fce5e22790b4c103457fb25003b to your computer and use it in GitHub Desktop.
vier_gewinnt
# vier gewinnt
def frage_nach_spalte(erlaubte_spalten, erlaube_q=True):
"""
:param erlaubte_spalten: z.B. [0,1,2,4,6]
:param erlaube_q: True oder False
:return: None (für quit) oder index der gewünschten Spalte
"""
while True:
if erlaube_q:
print("Bitte q eingeben zum aufhören oder...")
print("Buchstabe der Spalte zum spielen:")
spalten_namen = "abcdefg"
# [0, 2,3,5,7]
hinweis = []
for nummer in erlaubte_spalten:
hinweis.append(spalten_namen[nummer])
antwort = input(f"({hinweis}) >>>").lower().strip()[0]
if erlaube_q and antwort == "q":
return None
if antwort not in hinweis:
print("ungültige Eingabe")
continue
return spalten_namen.find(antwort)
def spielbrett():
for line in felder:
print("|"+"|".join(line)+"|")
print("+-+-+-+-+-+-+-+")
print("|a|b|c|d|e|f|g|")
def gewonnen(zeile, spalte):
# senkrecht
if zeile <= 2:
if felder[zeile][spalte] == felder[zeile+1][spalte] == felder[zeile+2][spalte] == felder[zeile+3][spalte]:
return True
# waagrecht
for startspalte in range(spalte-3, spalte+1):
if (startspalte < 0) or (startspalte+3) > 6:
continue
if felder[zeile][startspalte] == felder[zeile][startspalte+1] == felder[zeile][startspalte+2] == felder[zeile][startspalte+3]:
return True
# schräg von links oben nach rechts unten (funktioniert)
for start in range(-3,1):
startspalte = spalte + start
startzeile = zeile + start
if (startspalte < 0) or (startzeile < 0):
continue
if (startspalte + 3 > 6) or (startzeile + 3 > 5):
continue
if felder[startzeile][startspalte] == felder[startzeile+1][startspalte+1] == felder[startzeile+2][startspalte+2]==felder[startzeile+3][startspalte+3]:
return True
# schräg von links unten nach rechts oben
for start in range(-3, 1):
startspalte = spalte + start
startzeile = zeile - start
if (startspalte < 0) or (startzeile - 3< 0):
continue
if (startspalte + 3 > 6) or (startzeile > 5):
continue
if felder[startzeile][startspalte] == felder[startzeile - 1][startspalte + 1] == felder[startzeile - 2][startspalte + 2] == felder[startzeile - 3][startspalte + 3]:
return True
return False
zeichen = ["x", "o"]
felder = [["." for _ in range(7)] for _ in range(6)]
erlaubte_spalten = [0,1,2,3,4,5,6]
spielbrett()
for spielzug in range(1, 43):
spieler = zeichen[spielzug%2] # x oder o
print(f"spieler {spieler}, spielzug {spielzug}")
spalte = frage_nach_spalte(erlaubte_spalten)
if spalte is None:
break # spieler will nicht mehr spielen
for zeile in range(5,-1,-1):
if felder[zeile][spalte] == ".":
felder[zeile][spalte] = spieler
if zeile == 0:
erlaubte_spalten.remove(spalte)
break
spielbrett()
if gewonnen(zeile, spalte):
print("gewonnen!")
break
print("Bye-Bye")
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment