add neue Spiel code

This commit is contained in:
Elise Angela Bwemba 2025-11-19 15:00:14 +00:00
parent 07be19be7c
commit 32351334d9

View File

@ -10,22 +10,31 @@ import threading
touch_x, touch_y = None, None
clap_trigger = False
def osc_touch(address, x, y):
"""Wird aufgerufen, wenn /touch x y über OSC empfangen wird."""
global touch_x, touch_y
touch_x, touch_y = x, y
def osc_clap(address):
def osc_clap(address, *args):
"""Wird aufgerufen, wenn /clap empfangen wird."""
global clap_trigger
clap_trigger = True
def start_osc_server():
disp = dispatcher.Dispatcher()
disp.map("/touch", osc_touch)
disp.map("/clap", osc_clap)
server = osc_server.ThreadingOSCUDPServer(("127.0.0.1", 8000), disp)
print("🔊 OSC server läuft auf Port 8000")
# ⚠ Port an deine Gesture-App anpassen:
# Dein gesture_input_osc sendet an 127.0.0.1:5005 → hier auch 5005
server = osc_server.ThreadingOSCUDPServer(("127.0.0.1", 5005), disp)
print("🔊 OSC server läuft auf Port 5005")
server.serve_forever()
# Starte den OSC Listener im Hintergrund
threading.Thread(target=start_osc_server, daemon=True).start()
@ -50,9 +59,6 @@ BASE_DIR = os.path.dirname(os.path.abspath(__file__))
BACKGROUND_FILE = os.path.join(BASE_DIR, "GlobalHintergrund.png")
# -------------------------------
# Helper: Card Back (Logo)
# -------------------------------
def build_card_back(image_path, size):
"""Load and scale a logo image to fill card backs."""
w, h = size
@ -71,9 +77,6 @@ def build_card_back(image_path, size):
return surf
# -------------------------------
# Memory Game Class
# -------------------------------
class MemoryGame:
def __init__(self):
# Game Data
@ -184,7 +187,7 @@ class MemoryGame:
self.card_rects.append(pygame.Rect(x, y, card_width, card_height))
# -------------------------------
# Drawing Functions
# Drawing
# -------------------------------
def draw_menu(self, screen, title, options):
screen.fill(BG_COLOR)
@ -268,7 +271,8 @@ class MemoryGame:
if option == "Americas":
self.state = "americas"
elif option == "All Continents":
self.selected_continents = ["Europe", "Asia", "Africa", "Oceania", "North-America", "South-America"]
self.selected_continents = ["Europe", "Asia", "Africa",
"Oceania", "North-America", "South-America"]
self.state = "difficulty"
else:
self.selected_continents = [option]
@ -307,6 +311,26 @@ class MemoryGame:
self.selected.append(i)
return
# -------------------------------
# OSC Input Processing
# -------------------------------
def process_osc_input(self):
"""Verarbeite die aktuellen OSC-Eingaben (Touch & Clap)."""
global touch_x, touch_y, clap_trigger
# TOUCH: als Klick ins Spiel
if touch_x is not None and touch_y is not None:
pos = (int(touch_x), int(touch_y))
self.handle_click(pos)
# Reset, damit es nicht mehrfach feuert
touch_x, touch_y = None, None
# CLAP: bestätige "Yes", wenn wir gerade fragen
if clap_trigger:
if self.awaiting_confirmation and self.confirmation_result is None:
self.confirmation_result = "yes"
clap_trigger = False
# -------------------------------
# Game Logic
# -------------------------------
@ -370,7 +394,8 @@ class MemoryGame:
else:
text = "🤝 Draw!"
win_text = self.font.render(text, True, (255, 255, 0))
screen.blit(win_text, win_text.get_rect(center=(SCREEN_WIDTH // 2, SCREEN_HEIGHT // 2)))
rect = win_text.get_rect(center=(SCREEN_WIDTH // 2, SCREEN_HEIGHT // 2))
screen.blit(win_text, rect)
pygame.display.flip()
# -------------------------------
@ -384,31 +409,23 @@ class MemoryGame:
self.font = pygame.font.SysFont(None, 32)
self.small_font = pygame.font.SysFont(None, 22)
global touch_x, touch_y, clap_trigger
while self.running:
for event in pygame.event.get():
if event.type == pygame.QUIT:
self.running = False
elif event.type == pygame.MOUSEBUTTONDOWN:
# Maus bleibt optional als Eingabe
self.handle_click(event.pos)
# 👇 OSC-Eingaben integrieren
if touch_x is not None:
self.handle_click((touch_x, touch_y))
touch_x, touch_y = None, None
if clap_trigger:
if self.awaiting_confirmation:
self.confirmation_result = "yes"
clap_trigger = False
# Menü- und Spiel-Rendering
# 💡 HIER werden jetzt *jeden Frame* die OSC-Eingaben verarbeitet
self.process_osc_input()
# Menü + Spiel zeichnen
if self.state == "mode":
self.draw_menu(screen, "Select Player Mode", ["1 Player", "2 Players"])
elif self.state == "continent":
self.draw_menu(screen, "Select Continent", ["Europe", "Americas", "Asia", "Africa", "Oceania", "All Continents"])
self.draw_menu(screen, "Select Continent",
["Europe", "Americas", "Asia", "Africa", "Oceania", "All Continents"])
elif self.state == "americas":
self.draw_menu(screen, "Select Region", ["North-America", "South-America", "Americas"])
elif self.state == "difficulty":
@ -430,20 +447,6 @@ class MemoryGame:
pygame.quit()
sys.exit()
def display_winner(self, screen):
if self.player_mode == 1:
text = f"🏆 Final Score: {self.scores[0]}"
else:
if self.scores[0] > self.scores[1]:
text = "🏆 Player 1 Wins!"
elif self.scores[1] > self.scores[0]:
text = "🏆 Player 2 Wins!"
else:
text = "🤝 Draw!"
win_text = self.font.render(text, True, (255, 255, 0))
rect = win_text.get_rect(center=(SCREEN_WIDTH // 2, SCREEN_HEIGHT // 2))
screen.blit(win_text, rect)
# -------------------------------
# Run