코드카타

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;
};

+ Recent posts