Skip to content

Instantly share code, notes, and snippets.

@horstjens
Last active December 23, 2023 09:43
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save horstjens/7caf657d0a2b206190b744415a69cce3 to your computer and use it in GitHub Desktop.
Save horstjens/7caf657d0a2b206190b744415a69cce3 to your computer and use it in GitHub Desktop.
viergewinnt pysimplegui
import random
import PySimpleGUI as sg
spieler = 1
summe = 0
rows = 6 # max. 26
cols = 7 # max. 26
gewinnt = 4
spielzug = 1
alphabet = [chr(c) for c in range(65,91)]
feld = [[0 for x in range(cols)] for y in range(rows)]
symbols = ["\u2694", "\u26a1" ]
farben = [("#FFF000","#000000"), ("#FF00FF","#000000")]
layout = [
[sg.Button("." , key=str(y)+"_"+str(x), disabled=True, size=(4,2))
for x in range(cols)] for y in range(rows)
]
layout.append([sg.Button(x, key=str(i), size=(4,2)) for i,x in enumerate(alphabet[:cols])])
layout.append([sg.Text(f"Turn 1 Player 1: {symbols[0]}", key="message")])
window = sg.Window("vier gewinnt", layout,
font="System 22", )
game_over = False
winner = 0
animation_duration = 0
while spielzug < (rows*cols):
event, values = window.read(timeout=100)
if winner != 0:
animation_duration += 100
print(animation_duration)
if animation_duration < 2000:
sg.PopupAnimated(image_source="penguins.gif")
else:
sg.PopupAnimated(None)
sg.PopupOK(f"Winner is Player {winner}")
break
if event == sg.WIN_CLOSED:
break
if event in [str(i) for i in range(cols)]:
spalte = int(event)
for zeile in range(rows-1,-1,-1):
if feld[zeile][spalte] == 0:
feld[zeile][spalte] = spieler
break
else:
sg.PopupError("Spalte war schon voll")
continue
# update button
window[f"{zeile}_{spalte}"].update(symbols[spieler-1])
window[f"{zeile}_{spalte}"].update(disabled_button_color=farben[spieler-1])
window[f"{zeile}_{spalte}"].update(button_color=farben[spieler-1])
# gewonnen?
for richtung in ((1,0), (0,1), (1,1), (-1,1)):
#(-1,0),(0,-1),(-1,-1),(1,-1)):
# in Richtung
x, y = spalte, zeile
summe = 1
while True:
x += richtung[0]
y += richtung[1]
if not (0 <= x < cols):
break
if not (0 <= y < rows):
break
if feld[y][x] != spieler:
break
summe += 1
# in Gegenrichtung
x, y = spalte, zeile
while True:
x -= richtung[0]
y -= richtung[1]
if not (0 <= x < cols):
break
if not (0 <= y < rows):
break
if feld[y][x] != spieler:
break
summe += 1
#print("summe for (",richtung,") is:", summe)
if summe >= gewinnt:
winner = spieler
#sg.PopupOK(f"Spieler {spieler} hat gewonnen!",
# image="penguins.gif", )
#sg.PopupAnimated(image_source="penguins.gif")
#game_over = True
break
if game_over:
break
# change spieler
spieler = 2 if spieler == 1 else 1
spielzug += 1
# update message
window["message"].update(f"Turn {spielzug} Player {spieler}: {symbols[spieler-1]}")
#print(event)
window.close()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment