Roguelike wont draw character movement in array

if you compile this program and test out the arrow keys it appears like nothing is happening. but pay attention to how many presses you make and move the character towards a + or a -. when you touch one then it takes you to the next map. but the character does not get shown moving.

please help me understand what i am doing wrong.

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
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
#include <iostream>
#include "windows.h"

using namespace std;

int World1();
int World2();
int World3();

char Map[100][100];

int x = 1;
int y = 1;

int Level_Sel = 2;

int Enter_Level = 0;

bool Game_Running = true;

int main()
{
    while(Game_Running)
    {
        system("cls");
        
        if(Level_Sel == 1)
        {
             World1();
        }
        else if(Level_Sel == 2)
        {
             World2();
        }
        else if(Level_Sel == 3)
        {
             World3();
        }

        if(GetAsyncKeyState(VK_DOWN))
         {
              int y2 = y+1;
            
              if(Map[y2][x] == '+')
              {
                   Level_Sel = Level_Sel + 1;
                   Enter_Level = 0;
              }
              else if(Map[y2][x] == '-')
              {
                   Level_Sel = Level_Sel - 1;
                   Enter_Level = 0;
              }
              else if(Map[y2][x] == ' ') //this should move the character
              {
                   Map[y][x] = ' ';
                   y++;
                   Map[y][x] = '@';
              }
         }
         
         if(GetAsyncKeyState(VK_UP))
         {
              int y2 = y-1;
            
              if(Map[y2][x] == '+')
              {
                   Level_Sel = Level_Sel + 1;
                   Enter_Level = 0;
              }
              else if(Map[y2][x] == '-')
              {
                   Level_Sel = Level_Sel - 1;
                   Enter_Level = 0;
              }
              else if(Map[y2][x] == ' ')//this should move the character
              {
                   Map[y][x] = ' ';
                   y--;
                   Map[y][x] = '@';
              }
         }
         if(GetAsyncKeyState(VK_RIGHT))
         {
              int x2 = x+1;
              
              if(Map[y][x2] == '+')
              {
                   Level_Sel = Level_Sel + 1;
                   Enter_Level = 0;
              }
              else if(Map[y][x2] == '-')
              {
                   Level_Sel = Level_Sel - 1;
                   Enter_Level = 0;
              }
              else if(Map[y][x2] == ' ')//this should move the character
              {
                   Map[y][x] = ' ';
                   x++;
                   Map[y][x] = '@';
              }
         }
         
         if(GetAsyncKeyState(VK_LEFT))
         {
              int x2 = x-1;
            
              if(Map[y][x2] == '+')
              {
                   Level_Sel = Level_Sel + 1;
                   Enter_Level = 0;
              }
              else if(Map[y][x2] == '-')
              {
                   Level_Sel = Level_Sel - 1;
                   Enter_Level = 0;
              }
              else if(Map[y][x2] == ' ')//this should move the character
              {
                   Map[y][x] = ' ';
                   x--;
                   Map[y][x] = '@';
              }
         }
    } 
    
    system("PAUSE");
    return 0;
}

int World1()
{
    if(Enter_Level == 0)
    {
         x = 1;
         y = 1;
         Enter_Level = 1;
    }
    
    char Level[100][100] =
    {
         "##########",
         "#@       #",
         "#        #",
         "#        #",
         "#      + #",
         "##########"
    };
    memcpy(Map, Level, sizeof(Level));
    
    for(int display=0; display<10; display++)
    {
         cout << Map[display] << endl;
    }
    
    system("pause>nul");
}

int World2()
{
        if(Enter_Level == 0)
    {
         x = 1;
         y = 1;
         Enter_Level = 1;
    }
    
    char Level[100][100] =
    {
         "##########",
         "#@       #",
         "#        #",
         "#        #",
         "# -    + #",
         "##########"
    };
    memcpy(Map, Level, sizeof(Level));
    
    for(int display=0; display<10; display++)
    {
         cout << Map[display] << endl;
    }
    
    system("pause>nul");
}

int World3()
{
    if(Enter_Level == 0)
    {
         x = 1;
         y = 1;
         Enter_Level = 1;
    }
    
    char Level[100][100] =
    {
         "##########",
         "#@       #",
         "#        #",
         "#        #",
         "# -      #",
         "##########"
    };
    memcpy(Map, Level, sizeof(Level));
    
    for(int display=0; display<10; display++)
    {
         cout << Map[display] << endl;
    }
    
    system("pause>nul");
}
Last edited on
On each iteration of the loop it calls World2() which completely overwrites your Map array with default values.
and how would you suggest i fix it?

i tried doing this but it still does not work

if(Enter_Level == 0)
{
if(Level_Sel == 1)
{
World1();
}
else if(Level_Sel == 2)
{
World2();
}
else if(Level_Sel == 3)
{
World3();
}
}
Move it before the loop so it would not be called on each iteration
so do this?

it makes it appear like really nothing is happening

int main()
{
if(Level_Sel == 1)
{
World1();
}
else if(Level_Sel == 2)
{
World2();
}
else if(Level_Sel == 3)
{
World3();
}

while(Game_Running)
{

}

}
ok i figured it out. Thanks a lot!
You are not drawing anything in your loop either. So you will not see any changes.

Also I must note that you have WorldX function declared as returnin int, but you are not returning anything.
Topic archived. No new replies allowed.