Hello. I'm a C++ newbie and am trying to make a functional console RPG game as a hobby project. The code I'm having a problem with allows the players to move through rooms, similar to an old text adventure game. I realize it's probably inefficient, but I've only been learning for a couple of weeks now.
I'm using Visual C++ 2008 Express. The code is below:
// Moving Through a Map
// Adventure-game style!
#include <iostream>
#include <string>
#include <vector>
using namespace std;
// Room class - defines a object representing rooms the player moves through
class Room {
private:
short int northConnectionID;
short int southConnectionID;
short int eastConnectionID;
short int westConnectionID;
string description;
int roomID;
public:
Room(int roomID, int n, int s, int e, int w, string desc);
int GetNorthConnection();
int GetSouthConnection();
int GetEastConnection();
int GetWestConnection();
string GetDescription();
int GetRoomID();
};
Room::Room(int roomID, int n, int s, int e, int w, string desc) {
northConnectionID = n;
southConnectionID = s;
eastConnectionID = e;
westConnectionID = w;
description = desc;
}
int Room::GetNorthConnection() {
return northConnectionID;
}
int Room::GetSouthConnection() {
return southConnectionID;
}
int Room::GetEastConnection() {
return eastConnectionID;
}
int Room::GetWestConnection() {
return westConnectionID;
}
string Room::GetDescription() {
return description;
}
// Player class - simple class defining the player
class Player {
private:
int location;
public:
Player(int startingLocation);
int GetLocationID();
};
Player::Player(int startingLocation) {
location = startingLocation;
}
int Player::GetLocationID() {
return location;
}
// global functions
int Move(int roomID, vector<Room> map, Player& p, char direction);
vector<Room> ConstructMap();
// Main function
int main() {
vector<Room> map = ConstructMap();
Player player(1);
char choice;
string desc;
do {
cout << "Move in what direction? (n/s/e/w): ";
cin >> choice;
Move(player.GetLocationID(), map, player, choice);
} while (choice == ('n' || 's' || 'w' || 'e'));
return 0;
}
int Move(int roomID, vector<Room> map, Player& p, char direction) {
int pNorthConnection, pSouthConnection, pEastConnection, pWestConnection;
string nDesc, sDesc, eDesc, wDesc;
// Determines the player's location
for (int i = 0; i < map.size(); ++i) {
if (map[i].GetRoomID() == p.GetLocationID())
Room pLoc = map[i];
}
// Determines the player's location's connections, if any
for (int i = 0; i < map.size(); ++i) {
if (map[i].GetNorthConnection() != 0) {
pNorthConnection = map[i].GetNorthConnection();
nDesc = map[i].GetDescription();
}
if (map[i].GetSouthConnection() != 0) {
pSouthConnection = map[i].GetSouthConnection();
sDesc = map[i].GetDescription();
}
if (map[i].GetEastConnection() != 0) {
pEastConnection = map[i].GetEastConnection();
eDesc = map[i].GetDescription();
}
if (map[i].GetWestConnection() != 0) {
pWestConnection = map[i].GetWestConnection();
wDesc = map[i].GetDescription();
}
}
// Constructs the final description, moves the player, if possible,
// else lets the player know the move is impossible.
if (direction == 'n' && (pNorthConnection != 0)) {
cout << nDesc;
return pNorthConnection;
}
else if (direction == 's' && (pSouthConnection != 0)) {
cout << sDesc;
return pSouthConnection;
}
else if (direction == 'e' && (pEastConnection != 0)) {
cout << eDesc;
return pEastConnection;
}
else if (direction == 'w' && (pWestConnection != 0)) {
cout << wDesc;
return pWestConnection;
}
// Returns 0 if the move is impossible.
return 0;
}
Vector<Room> ConstructMap() {
vector<Room> map;
// Hard-coded map for the test environment.
Room r1(1, 0, 2, 0, 0, "A damp corrider. There is a doorway to the south.");
Room r2(2, 1, 0, 0, 0, "A grand hall. There is a doorway to the north.");
map.push_back(r1);
map.push_back(r2);
return map;
}
The compiler outputs the following errors:
1>c:\...\main.cpp(147) : error C2143: syntax error : missing ';' before '<'
1>c:\...\main.cpp(147) : error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
1>c:\...\main.cpp(147) : error C2143: syntax error : missing ';' before '{'
1>c:\...\main.cpp(147) : error C2447: '{' : missing function header (old-style formal list?)
I've spend a couple hours looking for the missing ';' and simply can't find it. Am I missing where it should be, or is this explained by something else?
Any assistance is appreciated! Thanks! :)