문제1: 이번에는 이 스택을 vector를 사용해 만들어보자.
문제2: '카트 라이더'와 같이 방을 만들어 게임을 하는 온라인 게임에서 방에 있는 유저를 관리하는 기능을 vector를 사용해 만들어 보자. 다음의 기본 클래스를 사용해 구현해보자.
#include <vector>
#include <string>
using namespace std;
// 유저 정보
struct UserInfo
{
string userName; // 이름
int level; // 레벨
int exp; // 경험치
};
// 게임 방의 유저를 관리하는 클래스
// 방에는 최대 6명까지 들어 갈 수 있다.
// 방에 들어 오는 순서 중 가장 먼저 들어 온 사람이 방장이 된다.
class GameRoomUser
{
public:
GameRoomUser();
~GameRoomUser();
// 방에 유저 추가
bool AddUser(UserInfo& userInfo);
// 방에서 유저 삭제.
// 만약 방장이 나가면 userName에 새로운 방장의 이름을 설정 해야 된다.
bool DeleteUser(const char* userName);
// 방에 유저가 없는지 확인. 없으면 true 반환
bool IsEmpty();
// 방에 유저가 꽉 찼는지 확인. 꽉 찼다면 true 반환
bool IsFull();
// 특정 유저의 정보
UserInfo& GetUserOfName(const char* userName);
// 방장의 유저 정보
UserInfo& GetMasterUser();
// 가장 마지막에 방에 들어 온 유저의 정보
UserInfo& GetUserOfLastOrder();
// 특정 순서에 들어 온 유저를 쫒아낸다.
bool BanUser(int orderNum);
// 모든 유저를 삭제한다.
void Clear();
private:
vector<UserInfo> users;
string masterUserName; // 방장의 이름
};
아래의 메인 함수 사용 예시를 참고해 구현해보자
#include "GameRoomUser.h"
ostream& operator<<(ostream& os, UserInfo& userInfo)
{
return os << "UserName: " << userInfo.userName
<< ", Level: " << userInfo.level << ", Exp: " << userInfo.exp << endl;
}
int main()
{
// 방 생성.
GameRoomUser gameRoom;
// 유저 추가.
UserInfo user1("RonnieJ", 1, 30);
gameRoom.AddUser(user1);
UserInfo user2("Hamtol2", 10, 670);
gameRoom.AddUser(user2);
UserInfo user3("TaeJun", 5, 250);
gameRoom.AddUser(user3);
UserInfo user4("Oops", 32, 1250);
gameRoom.AddUser(user4);
UserInfo user5("Gamer", 40, 250);
gameRoom.AddUser(user5);
UserInfo user6("GameDev", 80, 3425);
gameRoom.AddUser(user6);
UserInfo user7("STL", 23, 890);
gameRoom.AddUser(user7);
// 방장 확인.
UserInfo roomMaster = gameRoom.GetMasterUser();
if (roomMaster.userName != "")
{
cout << "방장은 " << roomMaster.userName << " 입니다.\\n";
}
// 방장 밴.
gameRoom.BanUser(1);
// 3번 밴.
gameRoom.BanUser(3);
// GameDev의 레벨 확인.
cout << "[TaeJun의 정보] " << gameRoom.GetUserOfName("TaeJun");
// 마지막에 방에 들어온 유저 정보.
cout << "[가장 마지막에 들어온 유저 정보] " << gameRoom.GetUserOfLastOrder();
// 모든 유저 삭제.
gameRoom.Clear();
// 모든 유저 삭제 후 비었는지 확인.
cout << (gameRoom.IsEmpty() == true ? "방이 비었습니다.\\n" : "방이 비어있지 않습니다\\n");
cin.get();
}