[C++] Classes used as game state manager.

Samael88

Evil always finds a way
Reaction score
181
I am kind of going back to basics again since I have not been programming for a while.

If I have a class called Game_State.
In this class I have all the things necessary for my game to work.
How would I then go by to make a game state manager class that can handle the states?

I have come this far that I need some kind of pointer that points to the state currently running.

How could I get the states to communicate in a practical way?

If I have the Main_Menu state running and I choose to start a game with a certain map, then I would need to send two messages basically:
1. What game state should be loaded.
2. What map should be loaded.

Do I have to go by global variables or is there a practical way to make them communicate?
 

GetTriggerUnit-

DogEntrepreneur
Reaction score
129
I think that a global is class is the best solution.

Then just call methods on that global class that loads map, (etc...)

Everything is called in a static context...
 

Samael88

Evil always finds a way
Reaction score
181
Thank you for that answer GetTriggerUnit-:thup:

I have another question as well. I am trying to make use of inheritance and I am stuck with this none working program.
I am hoping that someone can see what I am trying to do here.

I am basically trying to declare a base class pointer and then make it point to a newly created child class. Is there a way to actually make this work or am I just really out of course here?

Code:
#include <iostream>
#include <conio.h>

using namespace std;

class Test {
    protected:
       int a, b;
    public:
       void set_values(int vala, int valb)
          {a = vala; b = valb;}
};

class Testa: public Test {
    public:
       int sum()
          { return (a * b); }
};

class Testb: public Test {
    public:
       int sum()
          { return (a + b); }
};

int main() {
    Test *test;

    *test = new Testa;
    test -> set_values( 5, 5);
    cout << "*test area: " << test->sum() << endl;
    delete test;

    *test = new Testb;
    test -> set_values( 5, 5);
    cout << "*test area: " << test->sum() << endl;
    delete test;

    getch();
}
 

GetTriggerUnit-

DogEntrepreneur
Reaction score
129
That is really really weird actually. I used VC++'s compiler and got an error. 'sum' is not a member of 'Test'
 

Samael88

Evil always finds a way
Reaction score
181
That is really really weird actually. I used VC++'s compiler and got an error. 'sum' is not a member of 'Test'

I got an error on the equal signs that is used right before the new commands when I added this line to the base class "virtual int sum(void) =0;":nuts:

I have narrowed down my problem to be because of me trying to reuse the pointer after deleting it:( I am not very fond of experimenting with new and delete since last time I did it I overloaded my ram and it broke(it was basically on the death bed anyway, but it is still bad).

Is there anyway I can delete the object pointed to by the pointer instead of deleting the actual pointer?

Edit: Oh, boy do i feel stupid now^^

I wrote:
Code:
*test = new Testa;
When it should have been:
Code:
test = new Testa;

The * should not have been there in the first place^^ Thanks for trying to help GetTriggerUnit- :)
 

phyrex1an

Staff Member and irregular helper
Reaction score
446

Samael88

Evil always finds a way
Reaction score
181

LocalDude

New Member
Reaction score
4
You set the pointer to be of type Test, This means that you will only have access to the class Test,

You create a Testa and give to the pointer this is ok because Testa is a child of Test but the extra functions in Testa will not be available because the pointer dose not know that they exists

Code:
int main() {
    Testa *test;

    test = new Testa;
    test -> set_values( 5, 5);
    cout << "*test area: " << test->sum() << endl;
    delete test;

    Testb *test2;
    test2 = new Testb;
    test -> set_values( 5, 5);
    cout << "*test area: " << test2->sum() << endl;
    delete test;

    getch();
}
 
General chit-chat
Help Users
  • No one is chatting at the moment.

      The Helper Discord

      Members online

      Affiliates

      Hive Workshop NUON Dome World Editor Tutorials

      Network Sponsors

      Apex Steel Pipe - Buys and sells Steel Pipe.
      Top