2 player Minotaur maze game.

I'm trying to implement a turn based game for a 2 player Minotaur maze game. I just need help coding the part where the minotaur is included in the maze (starting in the middle) and the player controlling the minotaur is able to move after Theseus moves. Also, I need to make it so the game ends if the minotaur player catches the Theseus player.

#include <iostream>
#include <cctype>
#include <ctime>
#include <iomanip>
#include <cstdlib>
using namespace std;
const int WIDTH = 20;
const int HEIGHT = 10;
//---------------------------------------------------------------
// Function prototypes
//---------------------------------------------------------------
void printMaze(char maze[][WIDTH], int curx, int cury);
bool validMove(char maze[][WIDTH], int newX, int newY);
bool move(char maze[][WIDTH], int &curX, int &curY,
int newX, int newY);
// Return true or false if moving to the specified coordinate is valid
bool validMove(char maze[][WIDTH], int newX, int newY)
{
// Check for going off the maze edges
if (newX < 0 || newX >= WIDTH)
return false;
if (newY < 0 || newY >= HEIGHT)
return false;
// Check if target is a wall
if (maze[newY][newX]=='X')
return false;
return true;
}
//---------------------------------------------------------------
// Make the move on the maze to move to a new coordinate
// I passed curX and curY by reference so they are changed to
// the new coordinates. I assume the move coordinates are valid.
// This returns true if we move onto the exit, false otherwise.
//---------------------------------------------------------------
bool move(char maze[][WIDTH], int &curX, int &curY,
int newX, int newY)
{
bool foundExit = false;
if (maze[newY][newX]=='E') // Check for exit
foundExit = true;
curX = newX; // Update location
curY = newY;
return foundExit;
}
//---------------------------------------------------------------
// Display the maze in ASCII
//---------------------------------------------------------------
void printMaze(char maze[][WIDTH], int curx, int cury)
{
for (int y=0; y < HEIGHT;y++)
{
for (int x=0; x < WIDTH; x++)
{
if ((x==curx) && (y==cury))
cout << "T";
else
cout << maze[y][x];
}
cout << endl;
}
}
//---------------------------------------------------------------
// MAIN PROGRAM
//---------------------------------------------------------------
int main()
{
char maze[HEIGHT][WIDTH] = {
{'X','X','X','X','X','X','X','X','X','X','X','X','X','X','X','X','X','X','X','X'},
{'X',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','X',' ',' ',' ','X'},
{'X',' ','X',' ',' ',' ','X',' ',' ',' ',' ','X',' ',' ',' ','X',' ',' ',' ','X'},
{'X',' ','X','X','X',' ','X',' ','X','X','X','X',' ',' ',' ',' ',' ',' ',' ','X'},
{'X',' ',' ',' ','X',' ','X',' ',' ',' ',' ',' ',' ','X','X','X',' ',' ','X','X'},
{'X',' ',' ',' ','X',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','X',' ',' ',' ','X'},
{'X',' ','X','X','X',' ',' ',' ',' ',' ',' ','X',' ','X','X','X',' ','X',' ','X'},
{'X',' ','X',' ',' ',' ','X',' ','X','X','X','X',' ',' ',' ',' ',' ','X',' ','X'},
{'X',' ',' ',' ',' ',' ','X',' ',' ',' ',' ',' ',' ',' ',' ','X',' ','X','E','X'},
{'X','X','X','X','X','X','X','X','X','X','X','X','X','X','X','X','X','X','X','X'}
};
int x = 1, y = 1;
bool foundExit = false;
while (!foundExit)
{
printMaze(maze,x,y);
cout << "Enter WASD (T) or JIKL (M) to move." << endl;
cout << "TAKE TURNS" << endl;
char c;
cin >> c;
c = tolower(c);
switch (c)
{
case 'w':
if (validMove(maze,x,y-1))
foundExit = move(maze,x,y,x,y-1);
break;
case 'a':
if (validMove(maze,x-1,y))
foundExit = move(maze,x,y,x-1,y);
break;
case 's':
if (validMove(maze,x,y+1))
foundExit = move(maze,x,y,x,y+1);
break;
case 'd':
if (validMove(maze,x+1,y))
foundExit = move(maze,x,y,x+1,y);
}
}
}
//=========================================================================
Please edit your post to include code tags.
https://www.cplusplus.com/articles/jEywvCM9/
As formatted:

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
#include <iostream>
#include <cctype>
#include <ctime>
#include <iomanip>
#include <cstdlib>
using namespace std;

const int WIDTH = 20;
const int HEIGHT = 10;

//---------------------------------------------------------------
// Function prototypes
//---------------------------------------------------------------
void printMaze(char maze[][WIDTH], int curx, int cury);
bool validMove(char maze[][WIDTH], int newX, int newY);
bool move(char maze[][WIDTH], int& curX, int& curY,
int newX, int newY);

// Return true or false if moving to the specified coordinate is valid
bool validMove(char maze[][WIDTH], int newX, int newY)
{
	// Check for going off the maze edges
	if (newX < 0 || newX >= WIDTH)
		return false;

	if (newY < 0 || newY >= HEIGHT)
		return false;

	// Check if target is a wall
	if (maze[newY][newX] == 'X')
		return false;

	return true;
}

//---------------------------------------------------------------
// Make the move on the maze to move to a new coordinate
// I passed curX and curY by reference so they are changed to
// the new coordinates. I assume the move coordinates are valid.
// This returns true if we move onto the exit, false otherwise.
//---------------------------------------------------------------
bool move(char maze[][WIDTH], int& curX, int& curY, int newX, int newY)
{
	bool foundExit = false;

	if (maze[newY][newX] == 'E') // Check for exit
		foundExit = true;

	curX = newX; // Update location
	curY = newY;
	return foundExit;
}

//---------------------------------------------------------------
// Display the maze in ASCII
//---------------------------------------------------------------
void printMaze(char maze[][WIDTH], int curx, int cury)
{
	for (int y = 0; y < HEIGHT; y++)
	{
		for (int x = 0; x < WIDTH; x++)
		{
			if ((x == curx) && (y == cury))
				cout << "T";
			else
				cout << maze[y][x];
		}
		cout << endl;
	}
}

//---------------------------------------------------------------
// MAIN PROGRAM
//---------------------------------------------------------------
int main()
{
	char maze[HEIGHT][WIDTH] = {
	{'X','X','X','X','X','X','X','X','X','X','X','X','X','X','X','X','X','X','X','X'},
	{'X',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','X',' ',' ',' ','X'},
	{'X',' ','X',' ',' ',' ','X',' ',' ',' ',' ','X',' ',' ',' ','X',' ',' ',' ','X'},
	{'X',' ','X','X','X',' ','X',' ','X','X','X','X',' ',' ',' ',' ',' ',' ',' ','X'},
	{'X',' ',' ',' ','X',' ','X',' ',' ',' ',' ',' ',' ','X','X','X',' ',' ','X','X'},
	{'X',' ',' ',' ','X',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','X',' ',' ',' ','X'},
	{'X',' ','X','X','X',' ',' ',' ',' ',' ',' ','X',' ','X','X','X',' ','X',' ','X'},
	{'X',' ','X',' ',' ',' ','X',' ','X','X','X','X',' ',' ',' ',' ',' ','X',' ','X'},
	{'X',' ',' ',' ',' ',' ','X',' ',' ',' ',' ',' ',' ',' ',' ','X',' ','X','E','X'},
	{'X','X','X','X','X','X','X','X','X','X','X','X','X','X','X','X','X','X','X','X'}
	};

	int x = 1, y = 1;
	bool foundExit = false;

	while (!foundExit)
	{
		printMaze(maze, x, y);
		cout << "Enter WASD (T) or JIKL (M) to move." << endl;
		cout << "TAKE TURNS" << endl;

		char c;
		cin >> c;
		c = tolower(c);

		switch (c)
		{
			case 'w':
				if (validMove(maze, x, y - 1))
					foundExit = move(maze, x, y, x, y - 1);
				break;

			case 'a':
				if (validMove(maze, x - 1, y))
					foundExit = move(maze, x, y, x - 1, y);
				break;

			case 's':
				if (validMove(maze, x, y + 1))
					foundExit = move(maze, x, y, x, y + 1);
				break;

			case 'd':
				if (validMove(maze, x + 1, y))
					foundExit = move(maze, x, y, x + 1, y);
		}
	}
}
//========================================================================= 

Topic archived. No new replies allowed.