In an exercise of futility I'm trying to abstract and generalize a framework where to build any turn/rule based system. I've had a head start but after decompiling HearthStone I'm second-guessing that it may have higher complexity than I expected, at least for abstraction. So, I would like a peer review of the approach I am taking.For the premises:No UI or IO bindings to maintain decoupling and testability. Youshould be able to unitest a full game.Entity-Component-System, better memory packing, data-oriented,deterministic.Centralized pushdown automaton for state control.At the heart of the architecture is the interface/trait IPhaseSystem. It has a single method, pushSystem(), which returns an array of IPhaseSystems.From that interface plus an entity processing system we compose an abstract AbsGameSystem class, which requires a process() method. ECS systems already give the possibility to override pre and post methods, but is not mandatory.There is an interface IVictory with a single isVictory() method.Initialization of the world requires a single AbsGameSystem and an IVictory.My game world in every event-driven step processes the system atop of the pushdown automaton, and then proceeds to push all states returned by pushSystem().In my mind, from this simple setup and a communication pattern for UI/IO calls, like an Event Bus would be, should suffice to express any kind of board game akin to Catan, Magic: The Gathering, Dominion or Stratego.
Generalization of phase based systems for card and board games
design patterns;reinventing the wheel