Ich würde dir Empfehlen dich mit Entity Component Systems zu beschäftigen. Dann würdest du die Frage nach einer Klasse gar nicht erst haben.
In einem ECS hast du nur eine Entity Klasse und diese kann bestimmte Komponenten haben.
Zum Beispiel eine Spieler Klasse würde dann so aussehen. (Wobei es die Klasse Spieler gar nicht gibt.. da es ja keine konkreten Klassen gibt
)
Entity : {
PositionComponent,
SizeComponent,
MoveSpeedComponent,
StrenghComponent,
StaminaComponent,
RenderComponent,
InventoryComponent
}
Ein EntityMovementSystem würde dann anhand deiner Position-, Size- und MoveSpeedComponent die Bewegung deiner Entity berechnen.
Durch das Entfernen einer bestimmten Komponente kannst du so auch Zaubereffekte wie zum Beispiel "Einfrieren" realisieren. Ein Einfrier Zauber könnte dann einfach die MoveSpeedComponent temporär entfernen und du müsstest keine Extra Logik irgendwo erstellen, die sich darum kümmert.
Dein EntityMovementSystem würde dann einfach nicht mehr deine Entity behandelt, weil sie keine MoveSpeedComponent mehr hat.
Ich kann nur jedem empfehlen sich mit ECS auseinander zu setzten, zwar braucht man am Anfang etwas Gehirnschmalz um sich an das neue System zu gewöhnen, jedoch überwiegen die Vorteile eines ECS gegenüber der gewöhnlichen objektorientierten Programmierung.
Hier sogar ein deutscher Link, der das ECS erklärt:
https://www.heise.de/developer/artikel/C…en-2262126.html
Zu deinem Angriffs Problem...
Fernkampf Angriffe werden wahrscheinlich nicht gemeint sein oder?
Hier würde eine einfache Kollisionabfrage ausreichen.
Bei Spielen übers Netzwerk würdest du dir eine EventQueue bauen, die Abfragen speichert und nacheinander abarbeitet.
Das ganze würde der Server dann natürlich speichern und die Ergebnisse wieder an alle Clienten (Spieler) zurückschicken.
Natürlich ist es jedem selbst überlassen ob ECS oder OOP, dein Vorhaben geht wahrscheinlich auch mit traditioneller OOP aber erfahrungsmäßig führt das zu schlechten Code, welche dem DRY (Don't repeat yourself) Prinzip widerspricht.