From db76932935ad46e855f89fe00b914b234d5c250b Mon Sep 17 00:00:00 2001
From: Hong-Phuc Bui <hong-phuc.bui@htwsaar.de>
Date: Wed, 21 May 2025 10:22:02 +0200
Subject: [PATCH] Vorlesung 20.5. und Tutorium 21.5.
---
04-schleife/canvas-bezier/demo-canvas.py | 36 +++++++++
ub-3/tictactoe.py | 8 +-
04-schleife/canvas-bezier/blumen.py | 23 +++++
tictactoe/tictactoe_test.py | 14 +++
tictactoe/tictactoe.py | 119 +++++++++++++++++++++++++++++
5 files changed, 196 insertions(+), 4 deletions(-)
diff --git a/04-schleife/canvas-bezier/blumen.py b/04-schleife/canvas-bezier/blumen.py
new file mode 100644
index 0000000..1641f3c
--- /dev/null
+++ b/04-schleife/canvas-bezier/blumen.py
@@ -0,0 +1,23 @@
+import turtle
+
+fenster_breite = 800
+fenster_hoehe = 800
+
+screen = turtle.Screen()
+
+screen.setup(fenster_breite, fenster_hoehe)
+
+anna = turtle.Turtle()
+
+b = 100
+h = 100
+
+pental = 5
+winkel = 360/pental
+
+for i in range(0,pental):
+ anna.circle(b)
+ anna.left(winkel)
+
+turtle.done()
+
diff --git a/04-schleife/canvas-bezier/demo-canvas.py b/04-schleife/canvas-bezier/demo-canvas.py
new file mode 100644
index 0000000..981d2a0
--- /dev/null
+++ b/04-schleife/canvas-bezier/demo-canvas.py
@@ -0,0 +1,36 @@
+import turtle
+
+fenster_breite = 800
+fenster_hoehe = 800
+
+screen = turtle.Screen()
+
+screen.setup(fenster_breite, fenster_hoehe)
+
+anna = turtle.Turtle()
+
+b = 100
+h = 100
+
+stufe = 2
+
+anna.penup()
+anna.goto(-fenster_breite/2,0)
+anna.pendown()
+
+for i in range(0, stufe):
+ anna.fd(b)
+ anna.left(90)
+ anna.fd(h)
+ anna.right(90)
+
+for i in range(0, stufe):
+ anna.fd(b)
+ anna.right(90)
+ anna.fd(h)
+ anna.left(90)
+
+anna.fd(b)
+
+turtle.done()
+
diff --git a/tictactoe/tictactoe.py b/tictactoe/tictactoe.py
new file mode 100644
index 0000000..922a720
--- /dev/null
+++ b/tictactoe/tictactoe.py
@@ -0,0 +1,119 @@
+EMPTY = 0
+PL1 = 1
+PL2 = 2
+
+tafel = [
+ [EMPTY, EMPTY, EMPTY],
+ [EMPTY, EMPTY, EMPTY],
+ [EMPTY, EMPTY, EMPTY],
+]
+
+COLUMNS = 3
+ROWS = 3
+
+
+def print_tafel(board):
+ symbols = ("*", "X", "O")
+ for zeile in board:
+ for c in zeile:
+ print(f"{symbols[c]} ", end="")
+ print()
+
+
+def input_ok(tafel, r, c):
+ is_in_tafel = (ROWS > r >= 0) and (COLUMNS > c >= 0)
+ if is_in_tafel:
+ beleg = tafel[r][c]
+ return beleg == EMPTY
+ else:
+ return False
+
+
+def user_input(user, tafel):
+ print(f"Spieler {user} ist dran")
+ print("Geben Sie die Zeile und Spalten ein")
+ user_input_ok = False
+ while not user_input_ok:
+ r = int(input("Zeile: ")) - 1
+ c = int(input("Spalte: ")) - 1
+ user_input_ok = input_ok(tafel, r, c)
+ if user_input_ok:
+ tafel[r][c] = user
+ else:
+ print("Eingabe nicht in Ordnung")
+
+
+def pruefe_combination(p, board):
+ r = p[0]
+ c = p[1]
+ combination = p[2]
+ player = board[r][c]
+ if combination == "hvd":
+ h = (board[r][0] == player) and (board[r][1] == player) and (board[r][2] == player)
+ v = (board[0][c] == player) and (board[1][c] == player) and (board[2][c] == player)
+ d = (board[0][0] == player) and (board[1][1] == player) and (board[2][2] == player)
+ return h or v or d
+ elif combination == "v":
+ return (board[0][c] == player) and (board[1][c] == player) and (board[2][c] == player)
+ elif combination == "vd":
+ v = (board[0][c] == player) and (board[1][c] == player) and (board[2][c] == player)
+ d = (board[0][0] == player) and (board[1][1] == player) and (board[2][2] == player)
+ return v or d
+ elif combination == "h":
+ return (board[r][0] == player) and (board[r][1] == player) and (board[r][2] == player)
+ else:
+ raise Exception(f"combination {combination} ungültig")
+
+
+def has_spieler_gewonnen(player, board):
+ position = [
+ (0, 0, "hvd"), (0, 1, "v"), (0, 2, "vd"), (1, 0, "h"), (2, 0, "h")
+ ]
+ for p in position:
+ r = p[0]
+ c = p[1]
+ print(p, player)
+ if board[r][c] == player:
+ return pruefe_combination(p, board)
+ else:
+ return False
+
+
+def spiel_bewerten(tafel):
+ """
+ return: Ein Tupel
+ 1. Element: True = Spiel beendet
+ False = Spiel geht weiter
+ 2. Element: 0 = unentschieden
+ 1 = 1. Spieler gewonnen
+ 2 = 2. Spieler gewonnen
+ """
+ if has_spieler_gewonnen(PL1, tafel):
+ return (True, PL1)
+ elif has_spieler_gewonnen(PL2, tafel):
+ return (True, PL2)
+
+ empty_cells = ROWS * COLUMNS
+ for row in tafel:
+ for colum in row:
+ if colum != EMPTY:
+ empty_cells = empty_cells - 1
+ return (empty_cells == 0, 0)
+
+
+if __name__ == "__main__":
+ print_tafel(tafel)
+ aktuelle_spieler = 1
+
+ (spiel_ende, gewinner) = (False, 0)
+
+ while not spiel_ende:
+ user_input(aktuelle_spieler, tafel)
+ print_tafel(tafel)
+ (spiel_ende, gewinner) = spiel_bewerten(tafel)
+ if aktuelle_spieler == 1:
+ aktuelle_spieler = 2
+ else:
+ aktuelle_spieler = 1
+
+ print("Spiel beendet!")
diff --git a/tictactoe/tictactoe_test.py b/tictactoe/tictactoe_test.py
new file mode 100644
index 0000000..1de4079
--- /dev/null
+++ b/tictactoe/tictactoe_test.py
@@ -0,0 +1,14 @@
+from tictactoe import pruefe_combination, has_spieler_gewonnen, PL1, PL2, EMPTY
+
+
+def test_pruefe_combination_horizontal_hvd():
+ test_board = [
+ [PL1, PL1, PL1],
+ [EMPTY, PL2, EMPTY],
+ [EMPTY, PL2, EMPTY]
+ ]
+
+ result = pruefe_combination((0, 0, "hvd"), test_board)
+ assert result
+
+
diff --git a/ub-3/tictactoe.py b/ub-3/tictactoe.py
index 167ff15..bfb0ddd 100644
--- a/ub-3/tictactoe.py
+++ b/ub-3/tictactoe.py
@@ -108,16 +108,16 @@
(spiel_ende, gewinner) = (False, 0)
while not spiel_ende :
- (spiel_ende, gewinner) = spiel_bewerten(tafel)
user_input(aktuelle_spieler, tafel)
print_tafel(tafel)
+ (spiel_ende, gewinner) = spiel_bewerten(tafel)
if aktuelle_spieler == 1:
aktuelle_spieler = 2
else:
- aktuelle_spieler = 1
-
+ aktuelle_spieler = 1
+
print("Spiel beendet!")
-
+ print(f"Gewinner ist {gewinner}")
--
Gitblit v1.10.0