Problem with "Dungeon Crawler"

Hello,

I'm having a problem with this dungeon crawler i'm making,

First off; I don't get any errors, but it doesn't do what I want.

What i'm trying to say is, when it gets to the limit, or close to a wall, it will freeze and I can't move anymore.

This has been troubling for hours, I'd like for someone to help me:

Code:

game.cpp:

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
#include <iostream>
#include <conio.h>
#include "map.h"
#include <windows.h>

using namespace std;

#define UP 119
#define S_LEFT 97
#define BACK 115
#define S_RIGHT 100
#define LIMIT 5
int maparr[7][7] = {
{1, 1, 1, 1, 1, 1, 1},
{1, 0, 0, 0, 0, 0, 1},
{1, 0, 5, 0, 0, 0, 1},
{1, 0, 0, 0, 0, 0, 1},
{1, 0, 0, 0, 0, 0, 1},
{1, 0, 0, 0, 0, 0, 1},
{1, 1, 1, 1, 1, 1, 1}};




int main(void)
{
    int in;
    displayMap(maparr);

    while(in = getch()) {
        if(in == S_RIGHT) {
            system("cls");
            for(int i = 0; i < LIMIT; i++) {
                for(int j = 0; j < LIMIT; j++) {

                    if(maparr[i][j] == 5) {
                            maparr[i][j] = 0;
                            maparr[i][j+1] = 5;

                            break;
                        }
                    }
                }
        }
            displayMap(maparr);

        if(in == UP) {
            system("cls");
            for(int i = 0; i < LIMIT; i++) {
                for(int j = 0; j < LIMIT; j++) {

                    if(maparr[i][j] == 5) {
                        maparr[i][j] = 0;
                        maparr[i-1][j] = 5;
                        break;
                    }
                }
            }
            displayMap(maparr);
        }

        if(in == BACK) {
            system("cls");
            for(int i = 0; i < LIMIT; i++) {
                    for(int j = 0; j < LIMIT ; j++) {
                        if(maparr[i][j] == 5) {
                            maparr[i][j] = 0;
                            maparr[i+1][j] = 5;
                            break;
                        }
                    }
        }
            displayMap(maparr);
    }
        if(in == S_LEFT) {
            system("cls");
            for(int i = 0; i < LIMIT; i++)
                for(int j = 0; j < LIMIT; j++) {
                    if(maparr[i][j] == 5) {
                        maparr[i][j] = 0;
                        maparr[i][j-1] = 5;
                    }
                }
            displayMap(maparr);
        }
    }
    return 0;
}


map.h:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#ifndef MAP_H_INCLUDED
#define MAP_H_INCLUDED
#include <iostream>

void displayMap(int maparray[7][7]) {
    for(int r = 0; r < 7; r++) {
            for(int d = 0; d < 7; d++) {
                    if(maparray[r][d] == 1)
                        std::cout << "#";
                    if(maparray[r][d] == 0)
                        std::cout << " ";
                    if(maparray[r][d] == 5)
                        std::cout << "N";
            }
        std::cout << "\n";
    }
}

#endif // MAP_H_INCLUDED 
You're not checking for the limits. For instance:
1
2
3
4
5
6
7
8
9
        if(in == S_LEFT) {
            system("cls");
            for(int i = 0; i < LIMIT; i++)
                for(int j = 0; j < LIMIT; j++) {
                    if(maparr[i][j] == 5) { // assuming i == 0 and j == 0
                        maparr[i][j] = 0;
                        maparr[i][j-1] = 5; // maparr[0][-1] = 5; -> crash!
                    }
                }


Change it like so:
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
int main(void)
{
    int in;
    displayMap(maparr);

int x = 1;
int y = 1;

    while(in = getch()) {
int old_x = x;
int old_y = y;

        if(in == S_RIGHT) {
if(x < LIMIT)
  ++x;
}

....

if((x != old_x) || (y != old_y))
{
                            maparr[old_x + 1][old_y + 1] = 0; // Note + 1 due to the border
                            maparr[x + 1][y + 1] = 5; // Note + 1 due to the border
            system("cls");
            displayMap(maparr);
}
Topic archived. No new replies allowed.