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-SNAPSHOT