I'm guessing you're running some sort of experiment, not sure what you think you'll get out of it. Based on what I've seen, which are some animated and static graphics without gameplay, I wouldn't play it.
First, owners are 260 500 copies, but probably kickstarter backers should not count as people who bought broken age, since they didnt bought it, they kickstarterted it and all that money went probably into development so it is not an earning or profit for the creators (double fine).
This makes no sense to me. Why wouldn't a backer count as someone who bought the game? Because Double Fine didn't profit off of them? Even if they didn't, how is that any different from a studio with investors that first have to sell an x amount of games before they start making a profit?
There are a lot of ifs and assumptions you're making, what is it that you're interested in? It doesn't seem to be the number of people Tim Schaffer can appeal to(the number you mentioned is lower than the amount of backers).
I think you should start programming. Start with the basics of your game, see what steps you need to take to get some basic stuff on your screen and go from there. Once you actually have some code and know what step(s) you're going to take next, you can start thinking about whether you should make pieces of your code more abstract or not.
You shouldn't be writing abstract code because you're unsure where you want to go with your game. It takes more time to write and will probably not suit your needs very well.
Passing as argument or storing as member are both valid designs. The examples you've given are quite distinct though. Calling the method with different instances of A is easy in the first example, less so in the second. If only a single instance of A should be coupled to B, then passing the pointer to the constructor would more clearly describe that intent.
There's also a difference in lifetime management, in your first example class B has no control over the lifetime of A, the second example does.
Depending on your requirements you can choose one over the other.
If licensing is your biggest hurdle, you'll want to check out the C4 engine by Terathon. It just had it's licensing model changed, there was a post about this on this forum here. No royalties, single payment of $88, 1 year of free updates. It doesn't get any better than that.
Your currentHealth and maxHealth variables are integers, meaning that the result of currentHealth / maxHealth will also be an integer, which means the result of that operation will either be either 0 or 1. Integers are always rounded down, so you'll end up with 0 if currentHealth < maxHealth. You can go two ways here, cast the numbers to floating point numbers and cast back to an integer in the end, or simply multiply by 177 before you divide.