That's a big question! I'm something of a newbie myself, but here's the approach I would take:
1. Find the right tools for the job. You know you'll be drawing 105 sprites, and probably a window with a combo box to choose attacks, a unit description, and hp bar. So make a quick prototype that draws some lorem ipsum content. I'm in the process of choosing a GUI library myself, and I'm currently leaning towards Crazy Eddie's, which is very popular and has tutorials. There are also SFML tutorials for drawing a grid of tiles.
2. Model your data as if there was no user interface at all. So you might have:
struct Tile {
unsigned int sprite;
bool is_passable;
};
struct Map {
Tile tiles[size_x][size_y];
};
Class Player {
vector<Hero> heroes;
void doStatusEffects();
};
3. Tie the underlying data and the interface together. This will likely involve following examples for the GUI you pick. You may want to have a "Game" class, with a gamestate member that lets the flow of the game be altered to various menus, world maps, etc.
There is no substitute for just trying and getting frustrated when it comes to software architecture. You just have to try to think ahead, and refactor when something doesn't work. But here are some tips:
- Don't use inheritance just for the sake of it. Especially in C++, it creates more headaches than composition, especially if you aren't very experienced with the syntax.
- Code reuse is very important. Start with small functions and structures, use them to make bigger functions and structures.
- Have a good attitudes towards figuring out things you don't understand. It's better to be eager to learn, and be patient with getting your project done, than to rush and get angry at the computer for not understanding you.