Last active
July 4, 2025 08:58
-
-
Save horstjens/a98d6fce5e22790b4c103457fb25003b to your computer and use it in GitHub Desktop.
vier_gewinnt
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# 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