
게임의 전체적인 흐름과 객체들을 관리하는 중추적인 역할을 합니다.
게임 중 발생하는 무작위 요소들을 전담하여 처리합니다.

// ** Main 소스 파일 **
#include "GameManager.h"
int main()
{
const int TRACK_LIMIT = 50;
// RacingCar 객체 생성
RacingCar myCar(1, "주환서", TRACK_LIMIT);
// GameManager에 객체 주소 전달
GameManager game(&myCar, TRACK_LIMIT);
// 게임 시작
game.StartReady();
game.Run();
return 0;
}
// ** RacingCar 클래스 헤더파일 **
#pragma once
#include <iostream>
#include <string>
class RacingCar
{
private:
int position;
int num;
std::string racerName;
int trackLength;
public:
RacingCar(int n, std::string name, int length);
void Render();
void Move(int distance);
int GetPosition();
};
// ** RacingCar 클래스 소스파일 **
#include "RacingCar.h"
#include <Windows.h>
using namespace std;
RacingCar::RacingCar(int n, string name, int length)
: num(n), racerName(name), position(0), trackLength(length) {
}
void RacingCar::Render()
{
system("cls");
cout << "AI 레이싱 게임" << endl;
cout << "드라이버: " << racerName << " (" << num << "번)" << endl;
cout << "-----------------------------------------------------" << endl;
cout << "|";
for (int i = 0; i < trackLength; i++)
{
if (i == position) cout << "ㅁ>";
else cout << "=";
}
cout << "|" << endl;
cout << "-----------------------------------------------------" << endl;
}
void RacingCar::Move(int distance)
{
position += distance;
if (position < 0) position = 0;
if (position > trackLength - 1) position = trackLength - 1;
}
int RacingCar::GetPosition()
{
return position;
}
// ** EventManager 클래스 헤더파일 **
#pragma once
class EventManager
{
public:
EventManager();
int GenerateEvent();
};
// ** EventManager 클래스 소스파일 **
#include "EventManager.h"
#include <iostream>
#include <ctime>
EventManager::EventManager()
{
srand(static_cast<unsigned int>(time(NULL)));
}
int EventManager::GenerateEvent()
{
int probability = rand() % 100;
if (probability < 10)
{
std::cout << "캐스터 : 아차! 장애물에 걸려 미끄러집니다. (-2)" << std::endl;
return -2;
}
else if (probability < 30)
{
std::cout << "캐스터 : 부스터 가동!! 엄청난 속도입니다! (+10)" << std::endl;
return 10;
}
else
{
std::cout << "캐스터 : 속도를 높입니다! (+6)" << std::endl;
return 6;
}
}
// ** GameManager 클래스 헤더파일 **
#pragma once
#include "RacingCar.h"
#include "EventManager.h"
class GameManager
{
private:
RacingCar* player;
EventManager eventMgr;
int trackLength;
public:
GameManager(RacingCar* car, int length);
void StartReady();
void Run();
};
// ** GameManager 클래스 소스파일 **
#include "GameManager.h"
#include <iostream>
#include <Windows.h>
#include <conio.h>
GameManager::GameManager(RacingCar* car, int length)
: player(car), trackLength(length) {
}
void GameManager::StartReady()
{
std::cout << "========================================" << std::endl;
std::cout << "레이싱 게임을 시작하려면 's'를 누르세요!" << std::endl;
std::cout << "========================================" << std::endl;
while (true)
{
char input = _getch();
if (input == 's' || input == 'S')
{
std::cout << "\n게임을 시작합니다!" << std::endl;
Sleep(1000);
break;
}
}
}
void GameManager::Run()
{
while (true)
{
player->Render();
if (player->GetPosition() >= trackLength - 1)
{
std::cout << "\n[축하합니다!] 결승선에 도착했습니다! 우승!" << std::endl;
break;
}
int moveDist = eventMgr.GenerateEvent();
player->Move(moveDist);
Sleep(1500);
}
}