Would it be considered bad design to declare public variables in classes such as a character class for a game?

Example:

```
class Character{
public:
    Character();

    int health;

    void attack(int);
private:
    int attackPow;
};

void Character::attack(int hp){
    hp -= attackPow;
}

Character hero;
Character bad;

hero.attack(bad.health);

```

Because the health variable is public, I can directly modify it by calling it in a function, or even by taking the entire object and modifying its attributes to my whim, of course, also returning the entire object. 

But, if the variable were private, I would have to have a seperate function to change the private variable, thus would make the code much more...cluttered..Or is there another way around this? (You'll have to excuse me, I'm not quite an expert yet, but very intriguing question, nontheless)

Is this considered bad practice though?