코드카타
31. 수박수박수박수박수박수?
// 길이가 n이고, "수박수박수박수...."와 같은 패턴을 유지하는 문자열을 리턴하는 함수,
// solution을 완성하세요.
// 예를들어 n이 4이면 "수박수박"을 리턴하고 3이라면 "수박수"를 리턴하면 됩니다.
#include <string>
#include <vector>
using namespace std;
string solution(int n) {
string answer = "";
string watermelon = "수박";
for (int i = 0; i < n; i++)
{
answer += watermelon;
}
return answer.substr(0,n * 3);
cout << "aa";
}
코테의 한글은 3Byte로 인식 되는 것을 알 수 있는 시간이었고, 비주얼스튜디오에서 알파벳을 제외한 모든 문자는 2Byte인 것을 알 수 있었다.
Text RPG - (병권몬스터)
AudioManager 클래스 생성
어제 만든 테스트 프로젝트를 본 프로젝트(TextRPG)로 이동 시키고 클래스화 및 최적화
// =====================cpp============================
#include "pch.h"
#include "AudioManager.h"
AudioManager::AudioManager()
{
InitSound();
}
void AudioManager::InitSound()
{
// 선택음 설정
buffers[SFXType::Select].loadFromFile("Audio/SFX/snd_select.wav");
for (auto& s : pools[SFXType::Select])
{
s.setBuffer(buffers[SFXType::Select]);
}
// 레벨 업
buffers[SFXType::LevelUp].loadFromFile("Audio/SFX/pokemon-Level-up-Sound.ogg");
for (auto& s : pools[SFXType::LevelUp])
{
s.setBuffer(buffers[SFXType::LevelUp]);
}
// 체력 회복
buffers[SFXType::Heal].loadFromFile("Audio/SFX/Heal.mp3");
pools[SFXType::Heal].resize(4);
for (auto& s : pools[SFXType::Heal])
{
s.setBuffer(buffers[SFXType::Heal]);
}
// 피격
buffers[SFXType::Damaged].loadFromFile("Audio/SFX/snd_damage.wav");
pools[SFXType::Damaged].resize(4);
for (auto& s : pools[SFXType::Damaged])
{
s.setBuffer(buffers[SFXType::Damaged]);
}
// 구멍파기
buffers[SFXType::Dig].loadFromFile("Audio/SFX/Skill/Dig.mp3");
pools[SFXType::Dig].resize(4);
for (auto& s : pools[SFXType::Dig])
{
s.setBuffer(buffers[SFXType::Dig]);
}
// 몸통박치기
buffers[SFXType::Tackle].loadFromFile("Audio/SFX/Skill/Tackle.mp3");
buffers[SFXType::Tackle].loadFromFile("D:/Project/Memo/SoundTest/SoundTest/SFX/poketmon/Skill/Tackle.mp3");
pools[SFXType::Tackle].resize(4);
for (auto& s : pools[SFXType::Tackle])
{
s.setBuffer(buffers[SFXType::Tackle]);
}
// 울음소리
buffers[SFXType::Growl].loadFromFile("Audio/SFX/Skill/Growl.mp3");
buffers[SFXType::Growl].loadFromFile("D:/Project/Memo/SoundTest/SoundTest/SFX/poketmon/Skill/Growl.mp3");
pools[SFXType::Growl].resize(4);
for (auto& s : pools[SFXType::Growl])
{
s.setBuffer(buffers[SFXType::Growl]);
}
}
void AudioManager::PlayBGM(const BGMType type, float volume)
{
if (bgm.getStatus() == sf::Music::Playing && currentBGM == type)
{
return;
}
bgm.stop();
const std::string& path = ChoiceBGM(type);
if (!bgm.openFromFile(path))
return;
bgm.setLoop(true);
bgm.setVolume(volume);
bgm.play();
currentBGM = type;
}
void AudioManager::StopBGM()
{
bgm.stop();
}
string AudioManager::ChoiceBGM(BGMType type)
{
string File = "";
switch (type)
{
case MainThema:
File = "Audio/BGM/mus_shop.ogg";
break;
case BattleThema:
File = "Audio/BGM/Battle.ogg";
break;
case ShopThema:
File = "Audio/BGM/Pokemon-Center-Theme.ogg";
break;
case BossThema:
File = "Audio/BGM/Afterglow.ogg";
break;
case EndingThema:
File = "Audio/BGM/StartOfLegend.ogg";
break;
}
return File;
}
void AudioManager::PlaySFX(SFXType type, float volume)
{
playingSounds.emplace_back(); // 빈 Sound 생성
sf::Sound& sound = playingSounds.back(); // 참조
sound.setBuffer(buffers[type]);
sound.setVolume(volume);
sound.play();
}
//======================header========================
#pragma once
using namespace std;
// SFX 타입
enum SFXType
{
Select, // 선택 사운드
LevelUp, // 레벨업 사운드
Heal, // 회복 사운드
Damaged, // 피격 사운드
Dig, // 구멍파기 음원이 길어서 속도를 올리든 딜레이걸든 해야할거 같음.
Tackle, // 몸통박치기
Growl // 울음소리
};
enum BGMType
{
None,
MainThema, // 전투 BGM
BattleThema, // 상점 BGM
ShopThema, // 상점 BGM
BossThema, // 보스 BGM
EndingThema // 엔딩 크레딧 BGM
};
class AudioManager
{
public:
static AudioManager& Get()
{
static AudioManager instance;
return instance;
}
// 오디오 생성
void InitSound();
// BGM 재생
void PlayBGM(const BGMType type, float volume);
// BGM 정지
void StopBGM();
// BGM 선택
string ChoiceBGM(BGMType type);
// SFX 재생
void PlaySFX(SFXType type, float volume);
private:
// 생성자
AudioManager();
sf::Music bgm;
map<SFXType, sf::SoundBuffer> buffers;
map<SFXType, std::vector<sf::Sound>> pools;
vector<sf::Sound> playingSounds;
BGMType currentBGM = BGMType::None;
};'언리얼' 카테고리의 다른 글
| [2025.01.08] Unreal_7기 29 일차 | 챕터 3. C++과 Unreal Engine으로 3D 게임 개발 (0) | 2026.01.08 |
|---|---|
| [2025.01.07] Unreal_7기 28 일차 | C++ 3 주차 프로젝트 마무리 회고록 (0) | 2026.01.07 |
| [2025.01.05] Unreal_7기 26 일차 | C++ 3 주차 (0) | 2026.01.05 |
| [2025.01.02] Unreal_7기 25 일차 | C++ 3 주차 (0) | 2026.01.02 |
| [2025.12.31] Unreal_7기 24 일차 | C++ 3 주차 (0) | 2025.12.31 |
