#include "utils/json.hpp" #include <iostream> #include <fstream>이를 포함한 헤더파일의 예제는 다음과 같다.
- config.h
#pragma once #ifndef __CONFIG__ #define __CONFIG__ #include "utils/json.hpp" #include <iostream> #include <fstream> // 로고, 메인메뉴, 게임 화면 등 각각의 씬 enum class Scene { logo = 0, titleMenu, game, scoreScene, settingScreen }; // 전역적으로 사용할 싱글톤 클래스 class SceneManager { private: SceneManager() {} static SceneManager* instance; public: static SceneManager* GetInstance() { if (instance != nullptr) { return instance; }else { instance = new SceneManager(); return instance; } } bool SaveJson(); bool LoadJson(); bool gameExit; Scene scene; Scene lastSce; float volume = 1.0f; bool isLog = false; }; #endif
- config.cpp
#include "config.h" // Save Setting to json file bool SceneManager::SaveJson() { using namespace nlohmann; json j; j["Name"] = "DK Flappy Bird!"; j["SoundVolume"] = volume; j["bLog"] = isLog; // write prettified JSON to another file std::ofstream o("settings.json"); if (o.bad()) { return false; } o << std::setw(4) << j << std::endl; o.close(); return true; } bool SceneManager::LoadJson() { using namespace nlohmann; std::ifstream f("settings.json"); if (f.bad()) { return false; } json data = json::parse(f); volume = data["SoundVolume"]; isLog = data["bLog"]; f.close(); return true; }
{ "Name": "DK Flappy Bird!", "SoundVolume": 0.5074999928474426, "bLog": true }파일을 읽는 것 역시 위 예제를 참고하자 ===== 함수 호출 ====== ==== 1. Setting Screen에서 호출 ==== JSON으로 파일 입출력이 되면 Setting Screen에서 성공 혹은 실패 문구가 나오게 만들었다.
// Save Settings void SettingScreen::Save() { if(menuManager->SaveJson()) { isDisplayTimer = true; DisplayTimer = 180; DisplayString = "Successfully Saved!\n" ; }else { isDisplayTimer = true; DisplayTimer = 180; DisplayString = "Save Failed!\n"; } } // Load Settings void SettingScreen::Load() { if(menuManager->LoadJson()) { isDisplayTimer = true; DisplayTimer = 180; DisplayString = "Successfully Loaded!\n"; }else { isDisplayTimer = true; DisplayTimer = 180; DisplayString = "Load Failed!\n"; } }==== 2. main.cpp에서 호출 ===== 프로그램을 시작할 때 이전에 저장한 JSON파일을 불러와서 환경 설정을 하도록 하였다.
// InitWIndow() 이후에 선언해 줘야 한다. Logo logo = Logo(); Game game = Game(); Menu menu = Menu(); SettingScreen setting = SettingScreen(); menuManager->LoadJson();===== 결론 ===== 이런 식으로 하면 사람이 읽어보기 편한 JSON파일이 프로그램 실행 폴더에 만들어짐을 알 수 있다.
이제 게임에 필요한 기능들은 거의 다 만들어 본 것 같다.
JSON라이브러리 및 CPP에서 제공하는 파일 입출력 라이브러리(fstream, iostream)을 같이 컴파일 하다보니 파일크기가 급격하게 커졌다.
실행파일이 무려 9MB로 되어서 조금 마음에 안들긴 하지만 향후 확장성을 위하여 컴파일 크기에 대한 집착은 버리자.
지금까지 만든 소스파일은 다음과 같다.
JSON파일로 저장하기와 불러오기

로그인