-
열한번째 포켓몬, 솔가레오 구현 (틀깨기, 약점보험)포켓몬 배틀 구현 2022. 3. 23. 03:28
열한번째 포켓몬은 솔가레오,
이전의 랜드로스와 썬더같은 딜탱 포지션의 포켓몬이다.
굳이 따지자면 솔가레오와 네크로즈마가 합체한 상태로
인게임에선 "네크로즈마"라고 하지만,
다른 전설 포켓몬 루나아라와 네크로즈마가 합체한 상태도
인게임에선 "네크로즈마"라고 한다.
두 포켓몬의 모습이 확연하게 다르므로 실제 인게임에선 큰 문제가 없지만,
텍스트로만 표현되는 내 프로그램에선 아무래도 헷갈릴수있고
어차피 솔가레오를 단독으로 쓰는 경우는 없으므로 편의상 솔가레오라고 한다.
https://pikalytics.com/pokedex/homebss/necrozma-dusk-mane
Necrozma-Dusk-Mane Series 12 Battle Stadium Singles Stats Pokédex | Pokémon | Pikalytics
Weakness Policy 46.100% Rocky Helmet 22.800% Lum Berry 13.200% Life Orb 8.400% Leftovers 4.100% Utility Umbrella 3.000% Assault Vest 0.600% Sitrus Berry 0.400% Expert Belt 0.400% Kee Berry 0.300%
pikalytics.com
솔가레오. 10위로 은근 픽률이 높다.
아무래도 랜드로스랑 썬더랑 포지션이 겹쳐서 별로 안쓰일줄 알았는데,
그래고 제법 쓸만한가보다.
둘은 너무 자주나와서 다들 견제기 하나씩은 들고 나오니 그런거일수도.
채용 스킬은
메테오드라이브, 지진, 용의춤, 아침햇살
아무래도 포지션이 겹치다보니
지진과 용의춤은 랜드로스에서 (정확히는 칼춤)
아침햇갈은 썬더에서 (정확히는 날개쉬기)
구현했었기에, 구현할것은 전용기 메테오드라이브 하나뿐이다.
히히 금방 끝나겠당
지진은 그냥 스킬 이름이랑 위력 넣어주면 끝나고~
if (skillname == "날개쉬기" || skillname =="HP회복" || skillname == "아침햇살") { //날개쉬기 : 체력을 절반 회복한다. if (plife[pn] == stoi(p[pn][0][3])) { printf("더이상 회복할 수 없다!\n"); }//이미 풀피면 회복할 수 없다. else { if (k == 0)cout << "상대 "; cout << p[pn][0][11] << "의 체력이 회복되었다! ("; cout << plife[pn]; int hill = stoi(p[pn][0][3]) / 2; //회복량은 최대 체력의 절반 if (skillname == "아침햇살" && ps[2] == 1) hill /= 2; if ((plife[pn] + hill) > stoi(p[pn][0][3])) { hill = stoi(p[pn][0][3]) - plife[pn]; } //단 풀피 이상은 회복 불가능하므로, 체력이 절반 이상이면 회복량은 풀피 - 현재체력 plife[pn] += hill;//회복 처리 cout<<"+"<< hill<<"="<<plife[pn]<<")\n";//회복량 프린트
아침햇살은 hp회복, 날개쉬기와 비슷한 체력 회복 스킬이므로 코드 조건문에 이름만 추가해준다.
그리고 아침햇살은 필드의 날씨 상태에 따라 회복량이 변하는데,
현재 구현한 날씨는 "비" 밖에 없으므로
"비" 상태이면 회복량이 절반으로 깎이는 코드를 추가해준다.
그러면 아침햇살 구현 끝!
if (skillname == "칼춤") { //칼춤 : 자신의 공격을 2랭크 상승 랭크(p, pn, "공격", 2, 1); } if (skillname == "용의춤") { //칼춤 : 자신의 공격을 2랭크 상승 랭크(p, pn, "공격", 1, 1); 랭크(p, pn, "스피드", 1, 1); }
용의춤은 공격과 스피드를 1랭씩 올리는 기술이다.
랭크 함수를 2번 부르면 된다.
끝!
마지막 구현할 스킬, 메테오 드라이브는
상대방의 특성을 무시하는 부가효과를 지녔다.
다만 방어적인 특성만 무시하고,
실전에 이 스킬의 영향을 받는 방어적인 특성은 "천진"과 "탈" 2개 정도 뿐이다.
각 특성의 조건문에 해당 스킬을 추가해주자.
if (b[bb][0][12] == "천진" && a[aa][number][6] != "틀깨기") atk = stoi(a[aa][11][tm + 6]);
"천진"은 누오의 특성으로, 상대방의 랭크업을 무시하는 특성이다.
여기에 조건으로 메테오 드라이브의 부가효과 특성무시, 일명 "틀깨기"를 조건에 추가해준다.
if (b[bb][0][12] == "탈" && a[aa][number][6] != "틀깨기") { cout << "[특성 탈]\n"; if (s == 1) printf("상대 "); cout << b[bb][0][11]<<"의 탈이 대타가 되었다!\n"; b[bb][0][12] = "탈까임"; //탈은 1회용 특성이므로 발동되면 사라진다. }
탈은 따라큐의 특성으로, 상대방의 공격을 한번 무시하게 해준다.
역시나 여기에도 틀깨기가 아닐떄를 조건으로 추가해준다.
그러면 솔가레오 기술 구현 끄읕!
솔가레오의 지닌 물건은 약점보험으로, 위력이 강한 스킬을 맞았을때 공격, 특공이 2랭크씩 상승한다.
그리고 특성 프리즘아머는, 위력이 강한 스킬의 데미지를 3/4로 줄여 받는다
둘이 발동 조건이 같으므로 같은 파트에 구현해주면 된다.
둘다 데미지와 관련된 효과이므로,
"위력증감"함수에서 처리해준다.
for (int i = 6; i < 11; i++) { //공격한 스킬의 타입과 for (int j = 0; j < two - 1; j++) {//맞은 포켓몬의 방어 상성을 비교하여 if (s[ss][i][j] == skilltype) { samsung = i; }//동일한 경우가 있는지 체크한다. } } if (mh == 1) {//인자 mh에 1을 입력 받은 경우 = 스킬의 무효 여부를 체크하기 위한 경우. 무효일떈 0을, 아닐땐 0이 아닌 값을 리턴 if (samsung == 10) return 0; else return 114; } else {//그 외의 경우 = 위력에 증감이 있는 경우 if (samsung == 6) { printf("효과는 굉장했다!\n"); damage *= 4; } //4배 약점인 경우 else if (samsung == 7) { printf("효과는 굉장했다!\n"); damage *= 2; }//2배 약점 else if (samsung == 8) { printf("효과가 별로인 듯하다...\n"); damage /= 2; }//반감 else if (samsung == 9) { printf("효과가 별로인 듯하다...\n"); damage /= 4; }//0.25배 반감 else if (samsung == 10) damage = 0;
"위력증감" 함수에선,
공격측의 공격 스킬의 타입와
방어측의 방어 상성 값을 비교하여 보정치를 정한다.
if (samsung == 6 || samsung == 7) {//약점 공격을 받은 경우 if (s[ss][0][12] == "프리즘아머") { //솔가레오의 특성 프리즘아머. 굉장한 위력의 데미지를 3/4로 줄인다 cout << "[특성 프리즘아머]\n"; cout << "솔가레오가 받는 데미지가 조금 약해졌다!\n"; damage = damage * 3 / 4; } if (s[ss][0][13] == "약점보험") { //아이템 약점보험. 위력이 굉장한 스킬을 맞으면 공격과 특공을 2랭크 콜린다 cout << "[아이템 약점보험]\n"; 랭크(s, ss, "공격", 2, 1); 랭크(s, ss, "특공", 2, 1); s[ss][0][13] == "null";//약점보헝은 1회용이므로 한번 발동되면 사라진다. } }
이때 해당 값이 6=4배약점, 7=2배약점일때
특성/아이템이 프리즘아머/약점보험이면 발동하도록 한다.
프리즘 아머는 damage를 3/4로,
약점보험은 공격측의 공격과 특공을 2랭크 올리도록 랭크 함수를 호출한다.
그리고 약점보험은 1회용 아이템으로 발동후 null로 교체해준다.
그러면 솔가레오 구현 가볍게 끝!
아무래도 이미 구현한 랜드로스, 썬더와 많이 겹치다보니
생각보다 구현할게 적었다.
구현 완료된 모습.
'포켓몬 배틀 구현' 카테고리의 다른 글
열세번째 포켓몬, 칠색조 구현 (반동기) (0) 2022.03.23 열두번째 포켓몬, 따라큐 구현 (특성 탈) (0) 2022.03.23 열번째 포켓몬, 누오 구현 (방어) (0) 2022.03.23 여덟, 아홉번째 포켓몬 이벨타르 & 흑마렉스 구현 (흡혈) (0) 2022.03.23 일곱번째 포켓몬, 우라오스 구현 (카운터) (0) 2022.03.17