game = Game();
The above line of code is calling the Game class copy assignment operator ( the deleted function). The compiler complains because a const member variable of type int can be initialized but does not allow for assignment of values (otherwise it wouldn't be const).
Game* game = new Game();
This line of code creates a Game object on the heap and assigns its address to the *game pointer variable. There is no attempt to copy anything into a const member variable.
Game game = Game();
The line of code creates a Game object on the stack and uses a copy constructor. If your code doesn't contain a copy constructor for the Game class the compiler provides one for you. If you tried to write a copy constructor like this
Game(const Game& rhs)
{
i = rhs.i;
}
private:
const int i;
then the compiler would complain about the assignment to a const variable (error C2789: 'Game::i': an object of const-qualified type must be initialized). However, if you wrote a copy constructor like this
Game(const Game& rhs) : i(rhs.i)
{
}
private:
const int i;
then the compiler is OK since the const member variable is being initialized.