#include <iostream>
#include <string>
#include <cstdlib>
#include <ctime>
enum SceneState {
STATE_INIT,
STATE_SELECT_SERVER,
STATE_SELECT_CHANNEL,
STATE_LOBBY,
STATE_WAIT_ROOM,
STATE_GAME_PLAY,
STATE_EXIT
};
void LogOutput(const std::string& scene, const std::string& msg, const std::string& type = "Normal") {
std::cout << "[" << scene << "] ";
if (type == "Error") std::cout << "❌ [ERROR] ";
else if (type == "Warning") std::cout << "⚠️ [WARN] ";
else if (type == "Packet") std::cout << "🌐 [PACKET] ";
else std::cout << "⚙️ ";
std::cout << msg << std::endl;
}
struct UserSession {
std::string nick;
int grade;
int userIndex;
};
class KeroroGameEngine {
private:
SceneState currentScene;
UserSession session;
bool isRunning;
public:
KeroroGameEngine() {
currentScene = STATE_INIT;
isRunning = true;
session.nick = "Liebe";
session.grade = 18;
session.userIndex = 142;
srand(static_cast<unsigned int>(time(NULL)));
}
void UpdateEngine() {
if (currentScene == STATE_INIT) {
LogOutput("Init", "Engine Kernel Creation Succeeded....");
LogOutput("Init", "Best BackBuffer Format : X8R8G8B8 (DirectX 9)");
LogOutput("Init", "Sound System Initialized (fmod.dll)");
LogOutput("Init", "can't load file : ( Property/Script/FileLocation_Entity.xml )", "Error");
LogOutput("Init", "Requesting Auth Code...", "Packet");
currentScene = STATE_SELECT_SERVER;
}
else if (currentScene == STATE_SELECT_SERVER) {
LogOutput("Server", "Connecting to Gateway Server...", "Packet");
LogOutput("Server", "ServerNo [1] MaxUser [1400] NowUser [57]");
currentScene = STATE_SELECT_CHANNEL;
}
else if (currentScene == STATE_SELECT_CHANNEL) {
LogOutput("Channel", "cNetGDMS::ChannelInfo() Received", "Packet");
LogOutput("Channel", "Ch [1]: Novice Channel 1 (49 Users) | Ch [2]: Free Channel 1 (1 User)");
std::cout << "[Auth] ⚙️ Login Success! Welcome " << session.nick << " (Grade: " << session.grade << ")" << std::endl;
currentScene = STATE_LOBBY;
}
else if (currentScene == STATE_LOBBY) {
LogOutput("Lobby", "Entering CGameScene_LobbyExtension...");
LogOutput("Lobby", "Still Has no Myuser info", "Warning");
LogOutput("Lobby", "Room [5] 'The Very Last' (Solo Match)", "Packet");
LogOutput("Lobby", "Room [10] 'Let's Fight' (Team Match)", "Packet");
LogOutput("Lobby", "Joining Room 10...");
currentScene = STATE_WAIT_ROOM;
}
else if (currentScene == STATE_WAIT_ROOM) {
LogOutput("WaitRoom", "Joined Room 10.");
std::cout << "[WaitRoom] ⚙️ [Member] " << session.nick << " (Me) - Ready" << std::endl;
LogOutput("WaitRoom", "[Member] Eun-Byul-Chan (Host) - Ready", "Packet");
std::cout << "\n=============================================\n";
std::cout << " 🚀 GAME START - Loading Map... \n";
std::cout << "=============================================\n\n";
currentScene = STATE_GAME_PLAY;
}
else if (currentScene == STATE_GAME_PLAY) {
LogOutput("Game", "Loading Map Resource: [TF_File/My_Room_ball_TF.TF]");
std::string battleActions[4];
battleActions[0] = "Keroro Combo Attack connected successfully!";
battleActions[1] = "Ultimate Skill [Lightning Strike] triggered!";
battleActions[2] = "Enemy's dash attack successfully blocked!";
battleActions[3] = "Weapon item acquired!";
for(int i = 0; i < 3; ++i) {
std::cout << " -> " << battleActions[rand() % 4] << std::endl;
}
std::cout << "\n---------------------------------------------\n";
LogOutput("Game", "CGameScene_GamePlay::End - destroyUI");
LogOutput("Game", "GameManager : remove complete cached Scene");
currentScene = STATE_EXIT;
}
else if (currentScene == STATE_EXIT) {
isRunning = false;
}
}
void Run() {
std::cout << "=== ONLINE C++ KERORO FIGHTER SIMULATOR ===\n\n";
while (isRunning) {
UpdateEngine();
}
std::cout << "\n=============================================\n";
std::cout << " Client terminated normally. (SUCCESS) \n";
std::cout << "=============================================\n";
}
};
int main() {
KeroroGameEngine engine;
engine.Run();
return 0;
}