본문 바로가기

TFT Support - 5(완) 본문

개인 프로젝트 공부

TFT Support - 5(완)

Seongjun_You 2024. 7. 5. 15:50

가장 높은 시너지에 대해서 승률을 정리하는 로직을 작성했다.

 

#ifndef ANALYSIS_H
#define AHALYSIS_H
#include "JSONParsing.h"

#include <string>
#include <vector>
#include <map>



class Analysis{
    private:
        Participant my_data;
        std::vector<std::string> scraped_traits;
        std::vector<std::string> scraped_avg_places;
        std::map<std::string, std::string> mapset;
        
    public:
        Analysis(Participant arg_1, std::vector<std::string> arg_2, std::vector<std::string> arg_3);
        void Analysis_traits();

};

#endif

my_data는 나의 데이터가 들어가 있다.

scraped_traits와 scraped_avg_places는 크롤링한 데이터를 가져온다.

mapset은 한글로 된 이름의 시너지를 시너지 코드로 변환시키기 위함이다.

Analysis_traits()는 실제 로직 분석 함수이다.

 

 

#include "Analysis.h"
#include <iostream>
#include <vector>
#include <sstream>
#include <string>


Analysis::Analysis(Participant arg_1, std::vector<std::string> arg_2, std::vector<std::string> arg_3){
    my_data = arg_1;
    scraped_traits = arg_2;
    scraped_avg_places = arg_3;

    mapset.insert({"거대 괴수", "TFT11_Behemoth"});
    mapset.insert({"결투가", "TFT11_Duelist"});
    mapset.insert({"귀인", "TFT11_Exalted"});
    mapset.insert({"기원자", "TFT11_Invoker"});
    mapset.insert({"난동꾼", "TFT11_Bruiser"});
    mapset.insert({"비전 마법사", "TFT11_Arcanist"});
    mapset.insert({"사신", "TFT11_Reaper"});
    mapset.insert({"연인", "TFT11_Lovers"});
    mapset.insert({"예술가", "TFT11_Artist"});
    mapset.insert({"이타심", "TFT11_Altruist"});
    mapset.insert({"재주꾼", "TFT11_Trickshot"});
    mapset.insert({"저격수", "TFT11_Sniper"});
    mapset.insert({"정령 주술사", "TFT11_Spirit Walker"});
    mapset.insert({"파수꾼", "TFT11_Warden"});
    mapset.insert({"현자", "TFT11_Sage"});
    mapset.insert({"호걸", "TFT11_Great"});
    mapset.insert({"도자기", "TFT11_Porcelain"});
    mapset.insert({"먹그림자", "TFT11_Inkshadow"});
    mapset.insert({"숲지기", "TFT11_Dryad"});
    mapset.insert({"신화", "TFT11_Mythic"});
    mapset.insert({"암영", "TFT11_Umbral"});
    mapset.insert({"용군주", "TFT11_Dragonlord"});
    mapset.insert({"이야기꾼", "TFT11_Storyweaver"});
    mapset.insert({"천계", "TFT11_Heavenly"});
    mapset.insert({"필연", "TFT11_Fated"});
    mapset.insert({"행운", "TFT11_Fortune"});
    mapset.insert({"혼령", "TFT11_Ghostly"});

}

void Analysis::Analysis_traits()
{
    std::string my_first_trait = "";
    int max_num = -1;
    for(int i = 0; i < my_data.traits.size(); i++){
        if(my_data.traits[i].num_units > max_num && my_data.traits[i].name[3] != 'E')
        {
            my_first_trait = my_data.traits[i].name;
            max_num = my_data.traits[i].num_units;
        }
    }
    
    float result_tier = 9;
    std::string result_trait = "";
    for(int i = 0; i < scraped_traits.size()-1; i++){
        std::istringstream iss(scraped_traits[i]);
        std::string trait_name = "";
        std::string token;
        int trait_num = -1;
        try{
            iss >> token;
            trait_num = std::stoi(token);
            std::getline(iss, trait_name);
            trait_name = trait_name.substr(1);
            }
            
        catch(...){

        }

        if(mapset[trait_name] == my_first_trait && max_num >= trait_num)
        {
            result_tier = std::stof(scraped_avg_places[i]);
            result_trait = trait_name;
        }

        
    }
    std::cout << "Main trait : "<< max_num << " " <<result_trait << std::endl;
    std::cout << "Avg score : " << result_tier << std::endl;
}

내가 가지고 있는 시너지중 가장 높은 개수의 시너지를 가져온다.

크롤링된 시너지를 통해 나의 시너지와 가장 비슷한 경우를 찾고

평균 등수를 표기해 준다.

챔피언의 배치나 아이템에 따라 수많은 경우의 수 가 생기지만
이번 프로젝트는 시너지만 생각하기로 했다.

 

 

 

이번 프로젝트를 위해 만든 코드들이다.

API통신을 진행하고 Json파일을 파싱 한다거나

크롤링한 데이터를 가져오는 법을 복습할 수 있었고

무엇보다 설계원칙을 지켜가며 코딩하는 습관을 만들 수 있었다.

 

 

나의 경기 데이터이다.

4 숲지기의 평균 승률은 4.7이라는 것을 알 수 있었다.

 

 

 

'개인 프로젝트 공부' 카테고리의 다른 글

Traceroute - 2  (0) 2024.07.09
Traceroute - 1  (0) 2024.07.08
TFT Support - 4  (0) 2024.07.03
TFT Support - 3  (0) 2024.07.02
TFT Support - 2  (0) 2024.06.26
Comments