Hello. I checked out the game and I saw you had a fair bit of code there. I wasn't sure if you were looking for feedback, but I thought I might make a few suggestions.
I think going forward your main obstacle for expanding the program is going to be the fact that a fair bit of the coding is specific to the game's quest. That is, your code cannot be easily reused for a different game that features similar content without rewriting code.
My suggestion would be to consider how you might turn parts of your prototype into reusable modules and to separate game details into data files. It may not be easy, but one thing you will find as you spend more time writing software is that productivity and modular code tend to go hand in hand. Although it may take a little bit more time to design something to be reusable, it will save you tons of time later on.
You should also replace the switch statements used to produce "number" strings with formatted strings either using sprintf style or stl stringstream style. Another option might be although less efficient to use std::string and to_string like:
string mymessage = string("You did ") + to_string(DamageAmount) + string(" damage!");
This is not the most efficient way of doing this, but I sometimes use less efficient methods that produce easier to read (and maintain) code in situations where performance and efficiency are irrelevant.
Finally, the game crashed 90% of the times I tried to run it. I checked code and found this:
class Game_city : public cScreen
{
private:
int movement_step;
int posx;
int posy;
sf::Sprite Sprite;
...
};
Game_city::Game_city()
{}
And noticed that you failed to initialize non-class values in the constructor. Although the assumption might be that movement_step, posx, and posy are initialized to zero, in reality their initial value is undefined.
To prevent random unexplained crashes all of you constructors should initialize all non-class fields to zero or another safe value. For example:
Game_city::Game_city()
{
movement_step = 0;
posx = 0;
posy = 0;
}
or
Game_city::Game_city() : posx(0), posy(0), movement_step(0)
{
}
If you don't assign values, the initial values may be zero, or it may be something random.
-Steven