Help with a program

So I am beginning to learn and learnt a bit.
Now just as practice, trying to create a simple game where one monster attacks another, well, that's too big aim, running into troubles already.
Will use this thread for queries related to it.

So now just starting with check stats part

It works right if I do it this way:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
#include <iostream>
#include <string>
using namespace std;

enum MonsterType {
    OGRE,
    DRAGON,
    ORC,
    GIANT_SPIDER,
    SLIME

};

struct Monster {
    MonsterType type;
    string name;
    int health;

};
string GetMonsterTypeString(Monster monster){
   if(monster.type == OGRE)
        return "Ogre";
   if(monster.type == DRAGON)
    return "Dragon";
   if(monster.type == ORC)
      return "Orc";
    if(monster.type == GIANT_SPIDER)
        return "Giant Spider";
   if(monster.type == SLIME)
    return "Slime";

   return "Unknown";

}
void PrintMonster(Monster monster){
    cout << "This " << GetMonsterTypeString(monster);
    cout <<" is named " << monster.name << " and has " << monster.health <<  " health.\n";
}

int main()
{
    Monster ogre = {OGRE, "Torg", 145};
    Monster slime = {SLIME, "Blurp", 23};
    Monster dragon = {DRAGON, "Mini", 50};
    Monster giantSpider = {GIANT_SPIDER, "Momba", 80};
    Monster orc = {ORC, "Bob", 15};


    cout<<"Choose activity: \n1. Check stats \n2. Attack";
    int activity;
    cin>>activity;

    switch(activity)
    {
    case 1:
    {
    cout<<"Enter monster you want to get details of: \n1. ogre \n2. dragon \n3. orc \n4. gaint spider \n5. slime";
    int getDetails;
    cin>>getDetails;

    switch(getDetails)
    {
    case 1:
        PrintMonster(ogre);
        break;
    case 2:
        PrintMonster(dragon);
        break;
    case 3:
        PrintMonster(orc);
        break;
    case 4:
        PrintMonster(giantSpider);
        break;
    case 5:
        PrintMonster(slime);
        break;
    }

    }
    case 2:
        cout<<"Coming soon";
    }

    return 0;
}


But that's too confusing in main I guess.

How do I seperate the checkStats thing into a different function.

I tried doing this
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
#include <iostream>
#include <string>
using namespace std;

enum MonsterType {
    OGRE,
    DRAGON,
    ORC,
    GIANT_SPIDER,
    SLIME

};

struct Monster {
    MonsterType type;
    string name;
    int health;

};
string GetMonsterTypeString(Monster monster){
   if(monster.type == OGRE)
        return "Ogre";
   if(monster.type == DRAGON)
    return "Dragon";
   if(monster.type == ORC)
      return "Orc";
    if(monster.type == GIANT_SPIDER)
        return "Giant Spider";
   if(monster.type == SLIME)
    return "Slime";

   return "Unknown";

}
void PrintMonster(Monster monster){
    cout << "This " << GetMonsterTypeString(monster);
    cout <<" is named " << monster.name << " and has " << monster.health <<  " health.\n";
}

void checkStats()
{
  cout<<"Enter monster you want to get details of: \n1. ogre \n2. dragon \n3. orc \n4. gaint spider \n5. slime";
    int getDetails;
    cin>>getDetails;

    switch(getDetails)
    {
    case 1:
        PrintMonster(ogre);
        break;
    case 2:
        PrintMonster(dragon);
        break;
    case 3:
        PrintMonster(orc);
        break;
    case 4:
        PrintMonster(giantSpider);
        break;
    case 5:
        PrintMonster(slime);
        break;
}

int main()
{
    Monster ogre = {OGRE, "Torg", 145};
    Monster slime = {SLIME, "Blurp", 23};
    Monster dragon = {DRAGON, "Mini", 50};
    Monster giantSpider = {GIANT_SPIDER, "Momba", 80};
    Monster orc = {ORC, "Bob", 15};


    cout<<"Choose activity: \n1. Check stats \n2. Attack";
    int activity;
    cin>>activity;

    switch(activity)
    {
    case 1:
        checkStats();
    case 2:
        cout<<"Coming soon";
    }

    return 0;
}


If I simply move it, compiler starts complaining that ogre, orc, dragon, etc are not defined in this(in the seperate checkStats function) scope.

So it seems I need to define the Monsters in that function again, no, this should be wrong then. I need the function to use the values defined in main. How?
Last edited on
closed account (48bpfSEw)
Monsters are a part of the game.

Create a Class "Game" and declare and define your monsters as properties of the game.

This is an example of a raw structure of a game:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30

class Monster {
...
};

class Player {
...
};

class Level { // of the game
...
};

class Game {
  vector<Monster>  monsters;
  vector<Player>    players;
  vector<Level>     levels;
};


main () {
   Game game;

   game.insert (new Player());
   game.insert (new Monster());
   game.insert (new Level());

   game.start ();
}


Oh if I am needing vectors, means I am not read yet, still need to learn that part
closed account (48bpfSEw)
learning is good.
doing is better.

seeking is good.
knowing is better.

I belief in you!
You can do it!

:)
Topic archived. No new replies allowed.