also ich progg oop mit c++ und teilweise c#, je nachdem um was es geht
wenn du dich an umfangreichere sachen ranmachst kann ich dir nur den guten rat geben dir einen block papier und einen bleistift zu nehmen und den ganzen scheiss vorher zu planen.
kleine programme kannste quasi bedenkenlos so anfangen und draufloscoden was dir gerade in den kopf kommt.
bei grösseren projekten funktioniert das alles nicht mehr so.
da fängste an und merkst nach 3000 zeilen code dass es so wie du dir das vorgestellt hast nicht funktioniert und du dein ganzes klassendesign umschmeissen musst (glaubs mir, die erfahrung hab ich schonmal gemacht

)
zum thema strukturierung:
das macht jeder anders und ist ganz einfach ne sache der erfahrung.
fang einfach an und schau wie du am besten zurechtkommst.
setz vererbung dort ein wo es sinnvoll ist, bei vielen sachen kann auch polymorphie sehr hilfreich sein
ich hab jetzt ka was du unter nem "battle calculator" verstehst.
aber wenn ich ein game wie bw neu mit 3D engine proggen würde dann würde ich das jetzt grob folgendermaßen machen
class object // alle objekte des games, die basisklasse für alles andere quasi, da würde ich z.b. koordinaten reinpacken
class renderable : object // alle objekte die graphisch dargestellt werden, diese objekte werden dann durch die renderpipe gejagt
class building: renderable // gebäude halt...
class unit : renderable // kein kommentar
class toss // könnte z.b. schilde implementieren
class terran
class zerg
class zealot : unit, toss
class siegetank : unit, terran
//...
class nexus : tossbuilding
nur mal so als beispiel...
man könnte z.b. in den basisklassen diverse funktionalitäten die sämtliche anderen klassen anbieten müssen unterbringen, wie z.b. das rendern, dann könnte man in der unitklasse z.b. funktionen wie move() oder attack() unterbringen
in der klasse "toss" könnte man z.b. schilde implementieren die dann sämtlichen abgeleiteten klassen zur verfügung stehen.
aber das konzept könnte man auch schon besser machen.
z.b. könnte man units und gebäude von einer gemeinsamen basisklasse ableiten welche beispielsweise hitpoints und methoden zum angreifen implementiert
wie gesagt es hängt von jedem selber ab wie man das ganze umsetzt, und ein richtig komplexes projekt mit oop zu designen ist nicht ganz so easy ^^