팀프로젝트 5일차. 뭔가 기능을 구현하는 것보다 방어적으로 코딩하는 것에 시간을 더 쓰는 것 같다.
팀프로젝트
std::vector<std::string> suffixes = {"Spearman", "Archer", "Guard", "Scout", "Shaman"};
RandomManager::GetInstance().ShuffleVectorString(suffixes);
std::string monsterName = findMonster + " " + suffixes[i % suffixes.size()]; // defense if i > suffixes.size()
Goblin으로 만들어둔 몬스터 클래스가 여러마리 복수로 나와야한다면? 어떻게 구별할지를 suffixes로 해결했다. Goblin 이름 뒤에 접미사를 여러개 배열로 둬서 std::shuffle(target.begin(), target.end(), gen);
매개변수를 3개 받음 gen은 랜덤으로 섞는다는 것인듯
아무튼 shuffle로 배열을 섞어서 몬스터가 정해진 패턴으로 네이밍 되지않게 했다.
또 suffixes[i % suffixes.size()]를 해둔다면 suffixes의 개수보다 spawnMonster의 수가 많아도 중복된 이름은 나오더라도 프로그램은 돌아간다.
이렇게 방어적으로 코딩을 해놓는 것에 시간을 다 쓰는 듯
std::map<std::string, std::function<Monster*(std::string, int)>> monsterFactory;
monsterFactory["Goblin"] = CreateMonster::createGoblin;
// TODO: add create Orc, Troll, Slime
monsterFactory["Orc"] = CreateMonster::createGoblin;
monsterFactory["Troll"] = CreateMonster::createGoblin;
monsterFactory["Slime"] = CreateMonster::createGoblin;
std::function이 있다는걸 알게됐다. map에 함수를 묶을 수 있음.
function 뒤에 오는 것 들은 실행했을때 값을 받을 수 있는 자료형인듯
원래는 CreateMonster::createGoblin(std::string, int); 여서 그런듯 하다.