GameWorldView: Read-only Sicht auf den Spielzustand #24

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

Problem: Die KI braucht Zugriff auf Spielzustandsdaten (welche Tiles gehören mir, welche Gebäude habe ich, was kann ich mir leisten). Direkter Zugriff auf EntityManager würde die KI-Logik mit ECS-Implementierungsdetails koppeln und macht Unit Tests unmöglich.
Lösung:

// game/ai/GameWorldView.h
struct TileInfo {
    EntityID  entity;
    glm::vec2 position;
    bool      hasBuilding;
    BuildingType buildingType;  // falls hasBuilding
    bool      canUpgrade;
};

class GameWorldView {
public:
    GameWorldView(const EntityManager&, const GameMode&, PlayerID);

    const PlayerInventory& getInventory() const;
    std::vector<TileInfo>  getOwnedTiles() const;
    std::vector<TileInfo>  getUpgradeableBuildings() const;
    bool                   canAfford(BuildingType) const;
    bool                   canAffordUpgrade(EntityID building) const;
};

Die View wird für jeden KI-Zug neu erstellt (kein Caching) – bei dieser Spielgröße kein Performance-Problem.
Acceptance Criteria:

  • GameWorldView ist ohne OpenGL oder GLFW testbar (nur EntityManager + GameMode)
  • Keine Mutation des Spielzustands möglich durch die View
  • Unit Tests für getOwnedTiles() und canAfford()
Problem: Die KI braucht Zugriff auf Spielzustandsdaten (welche Tiles gehören mir, welche Gebäude habe ich, was kann ich mir leisten). Direkter Zugriff auf EntityManager würde die KI-Logik mit ECS-Implementierungsdetails koppeln und macht Unit Tests unmöglich. Lösung: ``` // game/ai/GameWorldView.h struct TileInfo { EntityID entity; glm::vec2 position; bool hasBuilding; BuildingType buildingType; // falls hasBuilding bool canUpgrade; }; class GameWorldView { public: GameWorldView(const EntityManager&, const GameMode&, PlayerID); const PlayerInventory& getInventory() const; std::vector<TileInfo> getOwnedTiles() const; std::vector<TileInfo> getUpgradeableBuildings() const; bool canAfford(BuildingType) const; bool canAffordUpgrade(EntityID building) const; }; ``` Die View wird für jeden KI-Zug neu erstellt (kein Caching) – bei dieser Spielgröße kein Performance-Problem. Acceptance Criteria: - GameWorldView ist ohne OpenGL oder GLFW testbar (nur EntityManager + GameMode) - Keine Mutation des Spielzustands möglich durch die View - Unit Tests für getOwnedTiles() und canAfford()
sebastian added this to the AI-System milestone 2026-04-16 20:40:19 +00:00
sebastian added the
enhancement
engine
labels 2026-04-16 20:40:19 +00:00
sebastian added this to the Dicewars project 2026-04-16 21:03:24 +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#24
No description provided.