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