CoderDojo Workshop
Computer-Gegner in Mario Kart, Minecraft Mobs
Schach-Computer, die besser spielen als Menschen!
Computer kann deine nächsten Züge voraussehen
X gewinnt! 🎉
Wir brauchen eine Sprache, um mit dem Computer zu sprechen!
Das nennt man Programmierung
Es gibt viele verschiedene Programmiersprachen
Alle machen dasselbe - nur anders geschrieben!
name = "Max"
print("Hallo " + name)
String name = "Max";
System.out.println("Hallo " + name);
let name = "Max";
console.log("Hallo " + name);
name = "Max"
puts "Hallo #{name}"
Ausgabe ist immer: Hallo Max 👋
Wir programmieren mit Python und Turtle Graphics!
Das 3x3 Gitter mit Linien
Symbole in den Feldern anzeigen
Hat jemand 3 in einer Reihe?
Minimax findet den besten Zug
🎯 Heute werdet ihr: Den Code lesen, verstehen und anpassen!
Das Spiel Schritt für Schritt
# Erstelle ein leeres Board
board = [None, None, None,
None, None, None,
None, None, None]
# Zeichne das Spielfeld
drawBoard("black")
# Spieler klickt auf Position 4
board[4] = 'X'
# Zeichne X an Position 4
drawX("blue")
def check_winner(board):
# Prüfe alle Gewinnmöglichkeiten
lines = [[0,1,2], [3,4,5], [6,7,8],
[0,3,6], [1,4,7], [2,5,8],
[0,4,8], [2,4,6]]
for line in lines:
if board[line[0]] == board[line[1]] == board[line[2]]:
return board[line[0]] # Gewinner!
return None # Noch kein Gewinner
# KI findet besten Zug mit Minimax
best_move = get_ai_move()
# Setze O an bester Position
board[best_move] = 'O'
# Zeichne O
drawO("red")
# Immer wieder:
while not game_over:
# Spieler → KI → Prüfen → Weiter
if check_winner(board):
print("Gewonnen!")
game_over = True
Ändere die Farben mit Hex-Codes!
💡 Tipp: Hex-Codes sind Farben in der Programmierung!
Beispiele: #FF0000 (Rot), #00FF00 (Grün), #0000FF (Blau)
Farben mit Variablen speichern
Eine Variable ist wie eine Box mit einem Namen,
in der wir etwas speichern können!
# Variablen erstellen und Farben speichern
x_farbe = "blue"
o_farbe = "red"
board_farbe = "black"
# Variablen verwenden
def drawX(row, col):
pen.color(x_farbe) # ← Verwendet die Variable!
# ... zeichnet X
def drawO(row, col):
pen.color(o_farbe) # ← Verwendet die Variable!
# ... zeichnet O
def drawBoard():
pen.color(board_farbe) # ← Verwendet die Variable!
# ... zeichnet das Spielfeld
# Nur eine Zeile ändern:
x_farbe = "purple" # Jetzt sind alle X lila! 💜
⏱️ 10 Minuten - Jetzt bist du dran!
Ändere die Farben im Code und mache das Spiel zu deinem eigenen!
x_farbe = "blue"
o_farbe = "red"
board_farbe = "black"
Wähle deine Lieblingsfarben:
"purple", "orange", "pink""#FF5733", "#33FF57"Führe den Code aus und sieh dir deine neuen Farben an! 🎨
Ändere auch die Hintergrundfarbe des Bildschirms:
screen.bgcolor("lightblue")
Lass uns einen Bug finden!
🐛 Beide Züge sind X!
✅ Spieler: X, KI: O
Das Problem: Der Code zeichnet IMMER X, egal wer dran ist!
Entscheidungen im Code treffen
if ampel == "grün":
fahren()
else:
stehenbleiben()
if wetter == "Regen":
regenschirm_nehmen()
else:
sonnenbrille_nehmen()
if BEDINGUNG:
Code wenn WAHR
else:
Code wenn FALSCH
if-else für unser Spiel
board[pos] = 'X' # oder 'O'
draw_x(row, col) # ← IMMER X! BUG!
board[pos] = 'X' # oder 'O'
if board[pos] == 'X':
draw_x(row, col) # Zeichne X
else:
draw_o(row, col) # Zeichne O
🎯 Jetzt wird geprüft: Was steht wirklich im Board?
⏱️ 15 Minuten
challenge2_symbole.py# TODO Kommentarendraw_x() aufruftif-else um zu prüfen: X oder O?💡 Tipp: Es gibt ZWEI Stellen - Spielerzug UND KI-Zug!
Animationen machen Spiele spannend
Bunte Linien in alle Richtungen!
Zeichne goldene Sterne!
Ändere den Hintergrund!
Idee: Kombiniere mehrere Effekte für eine coole Gewinn-Animation!
Wie man Feuerwerk zeichnet
for-Schleife wiederholt Code mehrmals:def draw_firework(x, y):
colors = ["red", "yellow", "blue", "green", "purple"]
for i in range(36): # Wiederhole 36 mal
pen.color(random.choice(colors)) # Zufällige Farbe
pen.goto(x, y) # Zurück zum Zentrum
pen.forward(50) # Linie zeichnen
pen.right(10) # Drehe 10 Grad
⏱️ 15 Minuten
challenge3_animation.pycelebrate_win() Funktiondraw_firework()draw_star()💡 Bonus: Erfinde deine eigene Animation!
Was passiert beim Neustart?
Gewinner: X!
Alles leer - neues Spiel!
reset_game() Funktion macht:Wiederverwendbarer Code
def reset_game():
board = [None] * 9
pen.clear()
text_pen.clear()
draw_board()
show_message("Neues Spiel!")
1. Definition: def erstellt die Funktion
2. Name: reset_game beschreibt was sie tut
3. Code: Die Schritte die ausgeführt werden
4. Aufruf: reset_game() führt alles aus!
💡 Vorteil: Einmal schreiben, beliebig oft verwenden!
⏱️ 15 Minuten
challenge4_neustart.pyreset_game() Funktiongames_played - Spiele gespieltplayer_wins - Spieler-Siegeai_wins - KI-Siege💡 Tipp: Suche nach # TODO BONUS im Code!
Das Spielfeld digital verstehen
board = [
'X', # Position 0
'O', # Position 1
None, # Position 2 (leer)
None, # Position 3 (leer)
'X', # Position 4
None, # Position 5 (leer)
'O', # Position 6
None, # Position 7 (leer)
None # Position 8 (leer)
]
Wichtige Code-Teile zum Verstehen
def draw_x(row, col):
pen.color("blue") # ← Hier ändern!
pen.pensize(4)
# ... X zeichnen
def draw_o(row, col):
pen.color("red") # ← Hier ändern!
pen.pensize(4)
# ... O zeichnen
def check_winner(b): # b = board (Spielfeld)
lines = [
[0,1,2], [3,4,5], [6,7,8], # Reihen
[0,3,6], [1,4,7], [2,5,8], # Spalten
[0,4,8], [2,4,6] # Diagonal
]
for line in lines:
if b[line[0]] == b[line[1]] == b[line[2]]:
return b[line[0]] # Gewinner!
def minimax(b, is_maximizing): # b = board
winner = check_winner(b)
if winner == 'O':
return 10 # KI gewinnt
if winner == 'X':
return -10 # Mensch gewinnt
# Probiere alle Züge aus...
# Wähle den besten!
💻 Auf Trinket.io programmieren:
Der komplette Code ist auf Trinket verfügbar!
Computer probiert jeden möglichen Zug aus
Was passiert nach diesem Zug? Und danach?
Wählt den Zug mit der höchsten Gewinnchance
Der Computer denkt wie ein Schachspieler:
"Wenn ich das mache, dann machst du das, dann kann ich..."
Teamwork - 20 Minuten
Welches Feld ist am wichtigsten?
(Ecke? Mitte? Kante?)
Wann musst du blockieren?
(Gegner hat 2 in einer Reihe?)
Wann greifst du an?
(Zwei Gewinnmöglichkeiten schaffen?)
Wie viele Züge voraus denkst du?
(1, 2, 3... alle?)
15 Minuten
Spielt mit eurer Strategie gegen andere Teams
"Ich spiele hier, weil..."
Was machen die anderen besser?
Schafft ihr es, gegen Minimax zu gewinnen?
...sondern darum:
Kann jemand den Minimax-Algorithmus besiegen? 🤔
(Spoiler: Nicht wirklich... aber ein Unentschieden ist möglich! 😊)
Jede:r Programmierer:in hat mal als Anfänger:in angefangen!
Danke fürs Mitmachen! 🎉