Dungeon Crawlers

Hi! I'm creating a dungeon crawler game. I created a 2d array called grid[7][10].

I want the player to start at the top left corner so I declared two variables "x" and "y" and made those variables equal to 0. Then I said grid[x][y] = player, which starts the player at the top left hand corner.

I already made bounderies for the game board, but I am having trouble changing the players position. For example, if the user says "down", I want the player's position to be grid[x][y +1] = player, or if the user says "right", it should be grid[x + 1][y]. I think this is the right way to code the changing of position.

My problem is that it highlights the grid[x][y] under each "if" statement. I bolded these parts below to show the parts im referring to. The compiler says "error C2109: subscript requires array or pointer type"? I thought I declared the array properly at the top of the code. Can somebody please help? Thanks

The "up" "if" statement has a different structure than the other "if" statements. I said that if the player is here, here, or here, "do this", else "the move is valid". That's my thinking behind the validity of moves.

I am in the middle of writing this program so I hope this isn't confusing. Some of the code might not be uniform throughout because I am trying different methods.

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
// Dungeon Crawler.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
#include <iostream>
#include <string>

using namespace std;


int _tmain(int argc, _TCHAR* argv[])
{
	string imput;
	char player = 'G', trap = 'T', goal = 'X';
	char grid[7][10];
	int row, col, x = 0, y = 0, skip = 0;
	void showgrid();
	
	for(row = 0; row < 7; row++)// creates the grid 
	{
		for (col = 0; col < 10; col++)
			grid[row][col] = '.';
	}

	void showgrid();
	{
	for (row = 0; row < 7; row++)  // Shows grid
	{
		for (col = 0; col < 10; col++)
			cout << grid[row][col];
	}
	}

	grid[x][y] = player; //Gives player's beginning position 
	grid[2][3] = trap; //Gives trap positions
	grid[3][6] = trap;
	grid[4][9] = trap;
	grid[5][4] = trap;
	grid[6][8] = trap;
	grid[6][9] = goal; //Gives finishing position
 

	while (grid[6][9] != player)
	{
		cout << "In which direction do you want to move?\n";
			cout << "up, down, left, right, or quit\n";
			cin >> imput;
			void grid();

			/*do
			{
				cout << "Please enter a valid move: up, down, left, right, quit\n";
				cin >> imput;
			}
			while(imput != "up" || imput != "down" || imput != "left" || imput != "right" || imput != "quit");*/ //Error catching if user doesn't imput valid move
	
		if(imput == "up")
		{
			for ( col = 0; col < 10; col++)
			{
				if( y == 0 && x > -1 && x < 10)
				{
					cout << "You cannot move up from that position\n";
					cout << "In which direction do you want to move?\n";
					cout << "up, down, left, right, or quit\n";
					cin >> imput;
				}
				else
				{
					grid[x][y] = '.';
					grid[x][y - 1] = player; //re-locates player's position if move is valid
				}
			}
		}
		
		if(imput == "down")
		{
			for ( col = 0; col < 10; col++)
			{
				if(y == 6 && x > -1 && x < 10)
				{
					cout << "You cannot move down from that position\n";
					skip = 1;
				}
				if(skip == 0)
				{
					grid[x][y] = '.';
					grid[x][y + 1] = player; //re-locates player's position if move is valid

				}
			}
		}

		if(imput == "left")
		{
			for ( row = 0; row < 7; row++)
			{
				if( y > -1 && y < 6 && x == 0)
				{
					cout << "You cannot move left from that position\n";
					skip = 1;
				}
				if(skip == 0)
				{
					grid[x][y] = '.';
					grid[x - 1][y] = player; //re-locates player's position if move is valid
				}
			}
		}

		if(imput == "right")
		{
			for ( row = 0; row < 7; row++)
			{
				if( y > -1 && y < 10 && x == 9)
				{
					cout << "You cannot move right from that position\n";
					skip = 1;
				}
				if(skip == 0)
				{
					grid[x][y] = '.';
					grid[x + 1][y] = player; //re-locates player's position if move is valid
				}
			}
		}
	}
//
//		if(imput == "quit") //Quits game if player chooses this command
//		{
//			break;
//		}
//
//		//The following is what happens if the player lands on one of the traps
//		if(grid[2][3] == player || grid[3][6] == player || grid[4][9] == player || grid[5][4] == player || grid[6][8] == player)
//		{
//			cout << "It's a trap!\n";
//			break;
//		}
//
//	for (row = 0; row < 7; row++)  // re-shows the grid 
//	{
//		for (col = 0; col < 10; col++)
//			cout << grid[row][col];
//
//		cout << "\n";
//	}
//
//	skip = 0;
//
//	if(grid[6][9] == player) //What happens if player successfully makes it to the goal
//	{
//		cout << "You successfully escaped the dungeon!\n";
//	}


	return 0;
}
On line 48 you declare a function called grid that takes no arguments and returns nothing. That function name hides the array name. Remove it.
Thanks! I forgot to delete that! My grid keeps appearing as a straight line like "................................." and I need it to be in a square. It was working earlier. I need my rows basically going down
Topic archived. No new replies allowed.