I need some help fixing this game

Hello! I'm making a game out of this, but it doesn't work right. Can someone please help me?

In this game you choose a weapon at the beginning, and depending on the weapon you choose, you must go through different paths to win.

Here is the code. Hope you can help me out!


#include<iostream>
#include<string>

using namespace std;

int getans1(char ans, int num);
int getans2(char ans, int num);
int getans3(char ans, int num);

int main()
{
char ans, weap;


cout << "Choose a tool\n 1. Hatchet\n 2. Body Armour \n 3. Grapling Hook\n";

cin >> weap;





if (weap = 1)

cout << "Choose a path to go through\n a. Wooden Door\n b. Hailstorm Meadow\n c. Rocky Cliff \n";

cin >> ans;



if (getans1(ans, 0))

cout << "\nYou knocked down the door and can move on!\n";




else

cout << "You can't go through this path! Game Over!";






cout << "Choose a path to go through\n a. Hammer Room\n b. Mild Woods \n c. Floating Islands \n\n";

cin >> ans;
if (getans1(ans, 1))

cout << "\nYou cut down the trees and can move on!\n ";



else

cout << "You can't go through this path! Game over!\n";





cout << "Choose a path to go through\n a. Crystal Mountain \n b. Spiked Temple \n c. Secret Locked Chamber \n\n";

cin >> ans;
if (getans1(ans, 2))

cout << "\nYou broke through the locked chamber and found the treasure!\n You win! \n ";



else

cout << "You can't go through this path! Game over!\n";




if (weap = 2)

cout << "Choose a path to go through\n a. Wooden Door\n b. Hailstorm Meadow\n c. Rocky Cliff \n";
cin >> ans;
if (getans2(ans, 0))

cout << "\n You went through the Hailstorm Meadow unharmed and can move on!\n";

else

cout << "You can't go through this path! Game Over!";


cout << "Choose a path to go through\n a. Hammer Room\n b. Mild Woods \n c. Floating Islands \n\n";

cin >> ans;
if (getans2(ans, 1))

cout << "\n You survived the room of hammers and can move on!\n ";



else

cout << "You can't go through this path! Game over!\n";



cout << "Choose a path to go through\n a. Crystal Mountain \n b. Spiked Temple \n c. Secret Locked Chamber \n\n";

cin >> ans;
if (getans2(ans, 2))

cout << "\n You made it into the Spiked Temple and found the treasure!\n You win! \n ";



else

cout << "You can't go through this path! Game over!\n";




system("pause");

}




int getans1(char ans, int num)
{
char answer[3] = { 'a', 'b', 'c'};

if (ans == answer[num])
return(1);
else
return(0);
}

int getans2(char ans, int num)
{
char answer[3] = { 'b', 'a', 'b'};

if (ans == answer[num])
return(1);
else
return(0);
}

int getans3(char ans, int num)
{
char answer[3] = { 'c', 'c', 'a'};

if (ans == answer[num])
return(1);
else
return(0);
}
closed account (E3h7X9L8)
first if its weap == 1
OK. Anything else?
closed account (EwCjE3v7)
Okay well first of all, it would be nice to use code tages. [.code] code... [./code] without the dots.

So you had a few problems, they have been pointed out in the code below.

1. As leryss pointed out, you need to use == instead of =.
2. You need to use an int instead of char for weap, or else you have to convert.
3. You need to have opening and closing parentheses.
For example look at this program

1
2
3
    for (int i = 0; i != 10; ++i)
        cout << i << " ";
     cout << endl;


The output will be
0 1 2 3 4 5 6 7 8 9

NOT
0
1
2
3
4
5
6
7
8
9


Your program is of course not finished so I'll let you carrying on with it.

Code:

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
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
#include<iostream>
#include<string>

using namespace std;

int getans1(char ans, int num);
int getans2(char ans, int num);
int getans3(char ans, int num);

int main()
{
    char ans;
    int weap; // use int so we don't have to convert


    cout << "Choose a tool\n 1. Hatchet\n 2. Body Armour \n 3. Grapling Hook\n";

    cin >> weap;





    if (weap == 1) { // == as leryss pointed out and open your parenthesis

        cout << "Choose a path to go through\n a. Wooden Door\n b. Hailstorm Meadow\n c. Rocky Cliff \n";

        cin >> ans;



        if (getans1(ans, 0))

        cout << "\nYou knocked down the door and can move on!\n";




        else

        cout << "You can't go through this path! Game Over!";






        cout << "Choose a path to go through\n a. Hammer Room\n b. Mild Woods \n c. Floating Islands \n\n";

        cin >> ans;
        if (getans1(ans, 1))

        cout << "\nYou cut down the trees and can move on!\n ";



        else

        cout << "You can't go through this path! Game over!\n";





        cout << "Choose a path to go through\n a. Crystal Mountain \n b. Spiked Temple \n c. Secret Locked Chamber \n\n";

        cin >> ans;
        if (getans1(ans, 2))

        cout << "\nYou broke through the locked chamber and found the treasure!\n You win! \n ";



        else

        cout << "You can't go through this path! Game over!\n";



    } // closing parenthesis
    if (weap == 2) { // open parenthesis

        cout << "Choose a path to go through\n a. Wooden Door\n b. Hailstorm Meadow\n c. Rocky Cliff \n";
        cin >> ans;
        if (getans2(ans, 0))

        cout << "\n You went through the Hailstorm Meadow unharmed and can move on!\n";

        else

        cout << "You can't go through this path! Game Over!";


        cout << "Choose a path to go through\n a. Hammer Room\n b. Mild Woods \n c. Floating Islands \n\n";

        cin >> ans;
        if (getans2(ans, 1))

        cout << "\n You survived the room of hammers and can move on!\n ";



        else

        cout << "You can't go through this path! Game over!\n";



        cout << "Choose a path to go through\n a. Crystal Mountain \n b. Spiked Temple \n c. Secret Locked Chamber \n\n";

        cin >> ans;
        if (getans2(ans, 2))

        cout << "\n You made it into the Spiked Temple and found the treasure!\n You win! \n ";



        else

        cout << "You can't go through this path! Game over!\n";
    } // closing parenthesis

    return 0;
}




int getans1(char ans, int num)
{
    char answer[3] = { 'a', 'b', 'c'};

    if (ans == answer[num])
        return 1;
    else
        return 0;
}

int getans2(char ans, int num)
{
    char answer[3] = { 'b', 'a', 'b'};

    if (ans == answer[num])
        return 1;
    else
        return 0;
}

int getans3(char ans, int num)
{
    char answer[3] = { 'c', 'c', 'a'};

    if (ans == answer[num])
        return 1;
    else
        return 0;
}

Last edited on
Thank you so much! However, there is still one more thing.

I need it to stop if they take a wrong path, but it's not doing that. Here is the code now.

Please tell me what I need to do to fix the last problem.

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
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
#include<iostream>
#include<string>

using namespace std;

int getans1(char ans, int num);
int getans2(char ans, int num);
int getans3(char ans, int num);

int main()
{
	char ans;
	int weap; // use int so we don't have to convert


	cout << "Choose a tool\n 1. Hatchet\n 2. Body Armour \n 3. Grapling Hook\n";

	cin >> weap;





	if (weap == 1) { // == as leryss pointed out and open your parenthesis

		cout << "\nChoose a path to go through\n a. Wooden Door\n b. Hailstorm Meadow\n c. Rocky Cliff \n";

		cin >> ans;



		if (getans1(ans, 0))

			cout << "\nYou knocked down the door and can move on!\n";




		else

			cout << "You can't go through this path! Game Over!";






		cout << "\nChoose a path to go through\n a. Hammer Room\n b. Mild Woods \n c. Floating Islands \n\n";

		cin >> ans;
		if (getans1(ans, 1))

			cout << "\nYou cut down the trees and can move on!\n ";



		else

			cout << "You can't go through this path! Game over!\n";





		cout << "\nChoose a path to go through\n a. Crystal Mountain \n b. Spiked Temple \n c. Secret Locked Chamber \n\n";

		cin >> ans;
		if (getans1(ans, 2))

			cout << "\nYou broke through the locked chamber and found the treasure!\n You win! \n ";



		else

			cout << "You can't go through this path! Game over!\n";



	} // closing parenthesis
	if (weap == 2) { // open parenthesis

		cout << "\nChoose a path to go through\n a. Wooden Door\n b. Hailstorm Meadow\n c. Rocky Cliff \n";
		cin >> ans;
		if (getans2(ans, 0))

			cout << "\n You went through the Hailstorm Meadow unharmed and can move on!\n";

		else

			cout << "You can't go through this path! Game Over!";


		cout << "\nChoose a path to go through\n a. Hammer Room\n b. Mild Woods \n c. Floating Islands \n\n";

		cin >> ans;
		if (getans2(ans, 1))

			cout << "\n You survived the room of hammers and can move on!\n ";



		else

			cout << "You can't go through this path! Game over!\n";



		cout << "\nChoose a path to go through\n a. Crystal Mountain \n b. Spiked Temple \n c. Secret Locked Chamber \n\n";

		cin >> ans;
		if (getans2(ans, 2))

			cout << "\n You made it into the Spiked Temple and found the treasure!\n You win! \n ";



		else

			cout << "You can't go through this path! Game over!\n";
	} // closing parenthesis
	if (weap == 3) {

		cout << "\nChoose a path to go through\n a. Wooden Door\n b. Hailstorm Meadow\n c. Rocky Cliff \n";
		cin >> ans;
		if (getans3(ans, 0))

			cout << "\n You went over the Rocky Cliff and can move on!\n";

		else

			cout << "You can't go through this path! Game Over!";


		cout << "\nChoose a path to go through\n a. Hammer Room\n b. Mild Woods \n c. Floating Islands \n\n";

		cin >> ans;
		if (getans3(ans, 1))

			cout << "\n You traveled over the floating islands and can move on!\n ";



		else

			cout << "You can't go through this path! Game over!\n";



		cout << "\nChoose a path to go through\n a. Crystal Mountain \n b. Spiked Temple \n c. Secret Locked Chamber \n\n";

		cin >> ans;
		if (getans3(ans, 2))

			cout << "\n You made it over the Crystal Mountain and found the treasure!\n You win! \n ";



		else

			cout << "You can't go through this path! Game over!\n";

		// closing parenthesis
	}
	return 0;
	system("pause");
}




int getans1(char ans, int num)
{
	char answer[3] = { 'a', 'b', 'c' };

	if (ans == answer[num])
		return 1;
	else
		return 0;
}

int getans2(char ans, int num)
{
	char answer[3] = { 'b', 'a', 'b' };

	if (ans == answer[num])
		return 1;
	else
		return 0;
}

int getans3(char ans, int num)
{
	char answer[3] = { 'c', 'c', 'a' };

	if (ans == answer[num])
		return 1;
	else
		return 0;
}
Last edited on
After each else statement the program just keeps going to the next if statement and evaluates said statement. You need to tell the program to stop executing if it gets to an else.

1
2
3
4
else {
   cout << "Game Over\n";
   return -1;
}
Last edited on
Another problem arose when I tried that. It did stop, but the system ("pause") didn't work.

I don't want it to completely black out once it is done. I want it to pause so you can read the description.

Please tell me what I need to do.
std::cin.get() will prevent your console from closing.
Topic archived. No new replies allowed.