sorry for the long post, but I wanted to discuss with you about the architecture behind a possible tabletop game framework.
The idea behind it is to create a framework which offers every base function for the typical tabletop component, like cards (draw, flip…), pawns (grab, move, rotate…) and so on, and also a common architecture for the multiplayer functionality and the turn based system. With this framework you can then create your own game, adding moveset and rule to specific components and game mode.
For example, with Chess and Checkers the framework would provide the base functionality for the pawns, the chessboard and the turn system between the two players, but each game will define the allowed movement of the pawns and the win conditions.
It’s meant to be a didactic project, to put into practice what I learned through the courses and some design patterns, and this discussion is more oriented about design choices than engine specific implementations (although I’ll probably make it with Unreal).
One of the first thing I wanted to discuss about is the multiplayer architecture. I’ve played quite a lot of Hearthstone and, for what i could see, player inputs are sent to a server, which calculate the results, and leave all the animations to the client (in fact, if an action leads to the death of an unit while the animation is still going, you can’t target that unit because is already dead).
To replicate this, I’ve thought about a simple Command Pattern to implement the actions, and two stacks for the execution of those actions: one for the server and one for the client with the animation actions.
Here some questions:
- Did I understand correctly how Hearthstone works?
- There are any cons which i didn’t consider in this architecture?
- There are better architecture for this kind of game?
Thanks for all your replies, any external resources on the matter will be greatly appreciated.
P.s. sorry for any error, english isn’t my first language. This is my first topic, I don’t know if there is a better suited section for this kind of question.