fix: Log füllt volle Fläche + Quest-Abschluss mit Reise
- max_log 15→30, alle Einträge werden gerendert (nicht nur 12) - Quest-Abschluss: Belohnung → Reise → Ankunft → neue Quest - 'Du machst dich auf den Weg...' → 'Ankunft in: X' → 'Neue Quest' - 2 Sekunden Pause nach Quest-Abschluss zum Lesen
This commit is contained in:
+10
-4
@@ -28,7 +28,7 @@ class GameEngine:
|
|||||||
self.quest_progress = 0
|
self.quest_progress = 0
|
||||||
self.quest_target = random.randint(3, 8)
|
self.quest_target = random.randint(3, 8)
|
||||||
self.log = []
|
self.log = []
|
||||||
self.max_log = 15
|
self.max_log = 30
|
||||||
|
|
||||||
def _add_log(self, msg: str):
|
def _add_log(self, msg: str):
|
||||||
self.log.insert(0, msg)
|
self.log.insert(0, msg)
|
||||||
@@ -99,15 +99,21 @@ class GameEngine:
|
|||||||
quest_xp = 10 + self.character.level * 5 + random.randint(0, 10)
|
quest_xp = 10 + self.character.level * 5 + random.randint(0, 10)
|
||||||
self.character.gold += quest_gold
|
self.character.gold += quest_gold
|
||||||
leveled = self.character.gain_xp(quest_xp)
|
leveled = self.character.gain_xp(quest_xp)
|
||||||
self._add_log(f"[bold green]✅ Quest abgeschlossen: {self.current_quest} (+{quest_gold} Gold, +{quest_xp} XP)[/]")
|
self._add_log(f"[bold green]✅ Quest abgeschlossen: {self.current_quest}[/]")
|
||||||
|
self._add_log(f"[dim]Belohnung: +{quest_gold} Gold, +{quest_xp} XP[/]")
|
||||||
if leveled:
|
if leveled:
|
||||||
self._add_log(f"[bold yellow]⬆️ Stufe {self.character.level} erreicht![/]")
|
self._add_log(f"[bold yellow]⬆️ Stufe {self.character.level} erreicht![/]")
|
||||||
self.character.heal()
|
self.character.heal()
|
||||||
|
# Travel to new location before new quest
|
||||||
|
self._add_log(f"[blue]🌍 Du machst dich auf den Weg...[/]")
|
||||||
|
self.current_location = self.cache.get_location()
|
||||||
|
self._add_log(f"[blue]🌍 Ankunft in: {self.current_location}[/]")
|
||||||
# New quest
|
# New quest
|
||||||
self.current_quest = self.cache.get_quest(self.character.level)
|
self.current_quest = self.cache.get_quest(self.character.level)
|
||||||
self.quest_progress = 0
|
self.quest_progress = 0
|
||||||
self.quest_target = random.randint(3, 8)
|
self.quest_target = random.randint(3, 8)
|
||||||
self._add_log(f"[cyan]📜 Neue Quest: {self.current_quest} ({self.quest_target} Gegner)[/]")
|
self._add_log(f"[cyan]📜 Neue Quest: {self.current_quest}[/]")
|
||||||
|
self._add_log(f"[dim]Ziel: Besiege {self.quest_target} Gegner[/]")
|
||||||
|
|
||||||
def step(self) -> dict:
|
def step(self) -> dict:
|
||||||
"""Ein Schritt des Auto-Progress. Gibt Event-Info zurück."""
|
"""Ein Schritt des Auto-Progress. Gibt Event-Info zurück."""
|
||||||
@@ -159,7 +165,7 @@ class GameEngine:
|
|||||||
self.quest_progress += 1
|
self.quest_progress += 1
|
||||||
if self.quest_progress >= self.quest_target:
|
if self.quest_progress >= self.quest_target:
|
||||||
self._complete_quest()
|
self._complete_quest()
|
||||||
events.append(("quest_done", f"[green]✅ Quest erfüllt![/]"))
|
events.append(("quest_done", f"[green]✅ Quest erfüllt![/]", True)) # True = pause flag
|
||||||
|
|
||||||
elif result["result"] == "death":
|
elif result["result"] == "death":
|
||||||
self.character.deaths += 1
|
self.character.deaths += 1
|
||||||
|
|||||||
+11
-2
@@ -135,7 +135,7 @@ def render_game(engine: GameEngine) -> Panel:
|
|||||||
|
|
||||||
# === Log Panel ===
|
# === Log Panel ===
|
||||||
log_text = Text()
|
log_text = Text()
|
||||||
for entry in engine.log[-12:]:
|
for entry in engine.log:
|
||||||
if isinstance(entry, str):
|
if isinstance(entry, str):
|
||||||
t = Text.from_markup(entry)
|
t = Text.from_markup(entry)
|
||||||
log_text.append(t)
|
log_text.append(t)
|
||||||
@@ -188,6 +188,12 @@ def run_game(engine: GameEngine, save_path: str):
|
|||||||
# Game step
|
# Game step
|
||||||
result = engine.step()
|
result = engine.step()
|
||||||
|
|
||||||
|
# Check for quest completion pause
|
||||||
|
quest_pause = False
|
||||||
|
for ev in result.get("events", []):
|
||||||
|
if isinstance(ev, tuple) and len(ev) > 2 and ev[0] == "quest_done" and ev[2]:
|
||||||
|
quest_pause = True
|
||||||
|
|
||||||
# Refill cache occasionally
|
# Refill cache occasionally
|
||||||
if engine.character.steps % 5 == 0:
|
if engine.character.steps % 5 == 0:
|
||||||
engine.cache.refill_async()
|
engine.cache.refill_async()
|
||||||
@@ -207,7 +213,10 @@ def run_game(engine: GameEngine, save_path: str):
|
|||||||
|
|
||||||
# Speed — slower for readability, faster at higher levels
|
# Speed — slower for readability, faster at higher levels
|
||||||
speed = max(0.3, 1.5 - engine.character.level * 0.02)
|
speed = max(0.3, 1.5 - engine.character.level * 0.02)
|
||||||
time.sleep(speed)
|
if quest_pause:
|
||||||
|
time.sleep(2.0) # Pause after quest completion
|
||||||
|
else:
|
||||||
|
time.sleep(speed)
|
||||||
|
|
||||||
except KeyboardInterrupt:
|
except KeyboardInterrupt:
|
||||||
live.update(render_game(engine))
|
live.update(render_game(engine))
|
||||||
|
|||||||
Reference in New Issue
Block a user