I have done such a software too for HARP using Hack & Slash combat system. It's using a proprietary programming system (Director) which is not really appropriate but was the one I wanted to put through testing at the time. All the data is kept in XML files (that means I have all the crit charts from H&S in XML format).
I would advise against getting too far in handling total combat with special conditions and actions outside basic status tracking like Vroomfogle did as the software will have to handle huge amount of data per opponent, have a more than huge number of controls (these tiny items like pop up or drop down menus) per opponent, and will have to handle so many things that interface will become a real mess. And in the end, you will have something that does it all, but is just not usable by anyone outside the programmer itself. And the time of prep will become huge too (unless you also use this one system to handle your NPCs and monsters character sheets or tech data, call this as you want, which is something to consider but that will add other constraints like pdf printing, etc.)
My actual piece of software does handle status tracking, anything related to combat beyond OB and DB and some kind of basic situational bonuses (flanked, non aware, etc.) I can have Player A strike Opponent B with one of its weapons, enter OB dice from Player A, see the result read from a H&S crit table with all modifiers taken into account, and apply it to the current status of B.
But then the software has to take a LOT of specific data into account, like differenciate between armor DB, shield DB and Quickness bonus DB as they are handled differently when you want to apply manoeuvers penalties.
Handling initiative has been one of the worst parts of the experience, and if I were to do it again I would do it in a different, manual ("manual vs auto") way.
You also have to take into account "outside basic strike exchange" effects like cure spells and herbs and potions and all that could affects opponent's status.
And you have to take into account any mean to enter data by hand when you encounter a situation where something happens you can't handle at the time being (happens more often than you think).
Going reverse in time would have helped too ("wait, wait, I forgot I had cast this spell before... the start of the the fight..."
)
You also have to think about what's going on at the table during this kind of "computerized" fights: when I ran one fight with all auto things "on", players felt like disconnnected from the fight, and even asked me if I was having fun with my monsters and their chars on my screen... (yes, they are this SO cute
). So I went back to a less automatized thing, and then had to face another issue: as I gave back control and handling of some key data to the players, we had a constant exchange which was somewhere of a pain ("I can see your actual DB taking a 30% Parry is 80, are you ok?").
So this global concept is not only a programming issue, it's also about still handling a real table top gaming experience and the very specific atmosphere that all gamers feel at the table when a fight begins. It is something to consider, mostly in these times when some tabletop games want to feel more and more like online computerized games...