Hong-Phuc Bui
2025-05-21 db76932935ad46e855f89fe00b914b234d5c250b
Vorlesung 20.5. und Tutorium 21.5.
1 files modified
4 files added
200 ■■■■■ changed files
04-schleife/canvas-bezier/blumen.py 23 ●●●●● patch | view | raw | blame | history
04-schleife/canvas-bezier/demo-canvas.py 36 ●●●●● patch | view | raw | blame | history
tictactoe/tictactoe.py 119 ●●●●● patch | view | raw | blame | history
tictactoe/tictactoe_test.py 14 ●●●●● patch | view | raw | blame | history
ub-3/tictactoe.py 8 ●●●● patch | view | raw | blame | history
04-schleife/canvas-bezier/blumen.py
New file
@@ -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()
04-schleife/canvas-bezier/demo-canvas.py
New file
@@ -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()
tictactoe/tictactoe.py
New file
@@ -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!")
tictactoe/tictactoe_test.py
New file
@@ -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
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}")