Wywoływanie metody z innej klasy

0

Witam, pracuję nad napisaniem gry paragrafowej, jednak nie do końca rozumiem strukturę obiektową, w jaki sposób mogę napisać żeby w poniższym kodzie, po pobraniu wartości zmiennych a,b,c,tekst funkcja choose() z klasy GameMaster po wybraniu odpowiedniego warunku (a,b, lub c) przekazała zmienioną wartość zmiennej str do metody seek_text z klasy File_operations, gdzie następnie wyszuka żądany paragraf i ponownie wywoła choose() z nowym paragrafem i zmienionymi wartościami a,b,c. Z góry dziękuję za pomoc.

 class game_master: private File_Operations, private  Player
{
private:
   //int bag[5];
    int health=100, mana=100, enemy_health;
public:
//    game_master gm;
    game_master(Player* player, File_Operations* files);
    void set_val();
    void get_health();
    void get_mana();
    void battle();

    void choose();

};
 class File_Operations
{
private:
    std::ifstream file, file_state;
    std::string buffer, paragraf_id;
    int i=0;
    std::ostringstream ss;

public:
    std::string tekst, a, b, c, pr, str="23"; //Tymczasowo przydzielona wartość do testów
    void open_file();
    void save_file();
    void seek_text();


}; 
game_master::game_master(Player* player, File_Operations* files)
{

     
}

 void game_master::choose()
{
    std::string wybor;
    std::cout <<tekst;
std::cin >>wybor;

if(wybor == "a")
{
    str = a;

}
if(wybor == "b")
{
    str = b;
}
if(wybor == "c")
{
    str = c;
}
if(wybor != "a" || "b" || "c")
{
    std::cout <<"Niepoprawny argument!" <<std::endl;
}


}
void File_Operations::open_file()
{
    file.open("paragraf.txt", std::ios::in);    //otwarcie pliku z paragrafami
     file_state.open("state.txt", std::ios::in | std::ios::out);

}

void File_Operations::seek_text()
{

//Mechanizm wyszukiwania paragrafów i przypisywania odpowiednich wartości zmiennym
//-----------------------------------------------------------------------------------------------------------------------------------------------
while(getline(file, buffer)) //zczytywanie kolejnycc linii pliku
    {

        while(buffer[i] != ';') //zapis numeru paragrafu
        {


            paragraf_id += buffer[i];
            i++;
        }
    //    std::cout <<paragraf_id <<std::endl;
    size_t FoundNumber = str.find( paragraf_id );   //wyszukiwanie poprawnego numeru


        if(FoundNumber != std::string::npos)
            {
                pr = paragraf_id;
                i++;
                paragraf_id.clear();

while(buffer[i] != ':') //zapis numeru pierwszego wyboru

        {


            paragraf_id += buffer[i];
            i++;
        }
        a = paragraf_id;
        i++;
                paragraf_id.clear();

        while(buffer[i] != ':') //zapis numeru drugiego wyboru
        {
            paragraf_id += buffer[i];
            i++;
        }
        b = paragraf_id;
        i++;
        paragraf_id.clear();

        while(buffer[i] != ';') //zapis numeru trzeciego

        {


            paragraf_id += buffer[i];
            i++;
        }
        c = paragraf_id;

                  while(i < buffer.length()) //zapis do zmiennej tresci paragrafu
            {
                i++;
                tekst += buffer[i];

            }
          


            break;
        }
        if(file.eof())
        {
            break;
        }
        paragraf_id.clear(); //czyszczenie zmiennej przechowujacej numer paragrafu
        i=0;
    }
//----------------------------------------------------------------------------------------------------------------------------
}
 
0
  1. class game_master: private File_Operations, private Player to już jest źle bo game_master nie jest rozszerzeniem File_Operations ani Player, tylko z nich korzysta.
  2. Musisz zrozumieć na początek jaka jest róznica między OBIEKTAMI a KLASAMI. Pokaż to co jest istotne, tzn jak OBIETKY są ze sobą powiązane.
0
Shalom napisał(a):
  1. class game_master: private File_Operations, private Player to już jest źle bo game_master nie jest rozszerzeniem File_Operations ani Player, tylko z nich korzysta.

Niezupełnie, bo dziedziczenie prywatne nie oznacza relacji bycia, tylko raczej korzystania z interfejsu. Można natomiast się sprzeczać, czy kompozycja nie byłaby lepsza, a na pewno prostsza do ogarnięcia.

0

Klasa Player jest właśnie klasą abstrakcyjną, a przynajmniej tak chciałem zrobić.

1 użytkowników online, w tym zalogowanych: 0, gości: 1