AISystem - treibt alle KI-Spieler an #27

Open
opened 2026-04-16 20:43:15 +00:00 by sebastian · 0 comments
Owner

Problem: Es gibt nichts, das AiController-Instanzen erstellt, verwaltet und zum richtigen Zeitpunkt aufruft.
Lösung:

// game/ai/AiSystem.h
class AiSystem {
public:
    void registerAiPlayer(PlayerID, AiConfig = {});
    void onTurnChanged(const TurnChangedEvent&,
                       GameMode&, EntityManager&, const TurnState&);

private:
    std::unordered_map<PlayerID, AiController> controllers;
};

GameScene::onEnter() registriert die KI-Spieler:

aiSystem->registerAiPlayer(aiPlayerID, AiConfig{.thinkDelayMs = 600});
events.subscribe<TurnChangedEvent>([this](const TurnChangedEvent& e) {
    aiSystem->onTurnChanged(e, *gameMode, *entityManager, *turnState);
});

onTurnChanged() prüft ob e.activePlayer eine KI ist und ruft takeTurn() auf.
Acceptance Criteria:

  • AiSystem reagiert nur auf Züge von registrierten KI-Spielern
  • Menschliche Spieler werden nicht beeinflusst
  • Mehrere KI-Spieler möglich (z.B. 2 KIs gegen 1 Mensch)
Problem: Es gibt nichts, das AiController-Instanzen erstellt, verwaltet und zum richtigen Zeitpunkt aufruft. Lösung: ``` // game/ai/AiSystem.h class AiSystem { public: void registerAiPlayer(PlayerID, AiConfig = {}); void onTurnChanged(const TurnChangedEvent&, GameMode&, EntityManager&, const TurnState&); private: std::unordered_map<PlayerID, AiController> controllers; }; ``` GameScene::onEnter() registriert die KI-Spieler: ``` aiSystem->registerAiPlayer(aiPlayerID, AiConfig{.thinkDelayMs = 600}); events.subscribe<TurnChangedEvent>([this](const TurnChangedEvent& e) { aiSystem->onTurnChanged(e, *gameMode, *entityManager, *turnState); }); ``` onTurnChanged() prüft ob e.activePlayer eine KI ist und ruft takeTurn() auf. Acceptance Criteria: - AiSystem reagiert nur auf Züge von registrierten KI-Spielern - Menschliche Spieler werden nicht beeinflusst - Mehrere KI-Spieler möglich (z.B. 2 KIs gegen 1 Mensch)
sebastian added this to the AI-System milestone 2026-04-16 20:45:04 +00:00
sebastian added the
enhancement
engine
labels 2026-04-16 20:45:09 +00:00
sebastian added this to the Dicewars project 2026-04-16 21:03:40 +00:00
Sign in to join this conversation.
No Milestone
No project
No Assignees
1 Participants
Notifications
Due Date
The due date is invalid or out of range. Please use the format 'yyyy-mm-dd'.

No due date set.

Dependencies

No dependencies set.

Reference: sebastian/Dicewars-Siedler#27
No description provided.