포켓몬 배틀 구현
-
세번째 포켓몬, 썬더 구현 (변화기, 생구)포켓몬 배틀 구현 2022. 3. 16. 21:53
처음 목표로 한 3마리, 에이스번, 자시안 그리고 마지막 썬더 구현 차례이다. 썬더 구현까지 마치면, 포켓몬 3마리의 구현이 완료되었으므로 드디어 3:3 배틀을 할 최소한의 조건이 달성된다. 자 이제 썬더는 무엇을 구현해야하냐면 1.10만볼트 - 상태이상 "마비" 2.변화스킬 "날개쉬기" 3.폭풍 - 상태이상 "혼란" 4.특성 "정전기" 5.아이템 "생명의 구슬" 이렇게 다섯가지이다. 그럼 일단은, 구현하기 쉬울것같은 마비부터 구현해보자. if (a[aa][skillnumber][6] == "마비" && b[bb][5][0] == "n" && rd < stoi(a[aa][skillnumber][7]) && b[bb][0][1] != "전기" && b[bb][0][2] != "전기") { //마비는 상대가..
-
두번째 포켓몬, 자시안 구현 (랭크 변화)포켓몬 배틀 구현 2022. 3. 16. 20:44
두번째 구현한 포켓몬은 자시안. 그냥 메인 스킬 거수참만 3번 눌렀는데 가끔 이길정도로 개사기 포켓몬이다. 자시안은 무엇을 구현해야하나 살펴봤더니 아이템 = 구현할필요 없음 거수참 = 구현할거없음 전광석화 = 우선도를 이미 구현해서 구현할거없음 인파이트 = 방어력 특방 1랭크 하락 치근거리기 = 상대방 공격력 1랭크 하락 특성 불요의 검 = 공격력 1랭크 상승 보면 알겠지만 랭크 변화만 구현하면 자시안은 끝이다. 거수참은 다이맥스한 상대에게 데미지 2배다만 다이맥스가 없으니 구현할게 없고 전광석화는 이미 우선도를 에이스번의 "기습" 기술에서 구현해서 할거 없었다. 자시안의 아이템은 "녹슨 검"으로 반 고정인데 이는 자시안의 개체값을 올려주는 아이템이다. 다만 이 개체값은 그냥 포켓몬 정보 배열의 값을 수..
-
첫번째 포켓몬, 에이스번 구현 (기습, 무릎차기)포켓몬 배틀 구현 2022. 3. 16. 18:16
첫번째로 구현한 포켓몬은 8세대의 스타팅중 하나, 에이스번이다. 8세대 첫 포켓몬이기도 하고, 소드실드를 못해본만큼 한번 꼭 써보고싶은 포켓몬이라 제일 먼저 이를 구현해봤다. 그리고 이제와서 말하는건데, 다른 포켓몬들보다 구현할게 배는 많았다(...) 뭐 그래도 아직 코드가 복잡하지 않은 초반에 이를 구현한게 오히려 다행인가 싶기도 하다. 일단 구현해야 하는것은 1.특성 리베로 2.아이템 기합의 띠 3.상태이상 화상 4.상태이상 독 5.기습 6.무릎차기 일단 처음 구현인만큼 상태이상도 구현해야하고, 특성이랑 아이템이랑 심지어 기습이랑 무릎차기도 따로 구현해야했다. 할거많아 신난다. https://pikalytics.com/pokedex/homebss/cinderace Cinderace Series 12 ..
-
"교체" 함수 구현포켓몬 배틀 구현 2022. 3. 16. 16:40
배틀 시스템의 기초가 되는 대부분의 함수는 설명이 끝났다. 딱 하나 남았는데, 바로 "교체" 함수이다. 처음에 교체 함수는 교체가 아니라 "기절" 함수였다. 포켓몬을 교체하는 순간은 크게 3가지가 있다. 첫번째는 행동으로 교체를 선택하는 것. 두번째는 포켓몬이 쓰러져 교체하는 것 세번째는 "유턴"과 같은 기술의 부가효과로 교체하는 것. 3번의 경우는 일단 건너 뛰고, 맨 처음 구현할때 때 나는 1번의 경우는 플레이어와 CPU의 행동 선택 구간에서 교체를 진행하였고, 2번의 경우 "기절" 함수를 만들어서 기절 이후의 과정을 처리하였다. 다만 이후 3번의 경우도 추가하다보니 아무래도 비효율적이라 느껴졌고, "기절" 함수를 "교체" 함수로 바꿔서 1번 2번 3번의 경우 모두를 동일한 함수 호출로 끝내버렸다. ..
-
"부가효과" 함수의 구현포켓몬 배틀 구현 2022. 3. 16. 13:46
void 부가효과(string a[][one][two], int skillnumber, string b[][one][two], int aa, int bb, int s, int alife[], int blife[], int ps[], int bt[], int damage) { 배틀 파트의 마지막 함수, "부가효과" 함수이다. 저번 글에서 말했듯이 "위력증감" 함수는 공격 이전에 발생하는 이벤트를, "부가효과" 함수는 공격 이후 발생하는 이벤트들을 처리하는 함수이다. int rd = rand() % 100; // 공격시 발동하는 효과 랜덤 카운터 if (blife[bb] > 0) {//상대방에게 발동되는 부가효과는 상대방의 체력이 0이 아닐때만 발생. if (a[aa][skillnumber][6] == "..
-
"공격 스킬" 함수의 구현포켓몬 배틀 구현 2022. 3. 16. 02:36
저번 글의 "명중"함수로 사용한 스킬이 성공하였는지 실패하였는지 확인하였다면, 이번엔 스킬이 명중한 이후를 다룬 "공격스킬" 함수에 대해 알아보겠다. 공격스킬은 적에게 데미지를 주는 스킬이므로, 적에게 줄 데미지를 계산하는게 주 목적이다. void 공격스킬(string a[][one][two], string b[][one][two], int aa, int bb, int number, int alife[], int blife[], int s, int ps[], int dmg[], int bt[], int snumber) { 인자는 "명중"함수와 비슷하며, 똑같이 공격한 쪽 배열을 먼저, 맞은 쪽 배열을 나중에 넣는다 int gs = rand() % 16; //급소 카운터. gs는 0부터 15이며 gs가 0..
-
"명중" 함수의 구현포켓몬 배틀 구현 2022. 3. 16. 01:30
명중 함수는 이름 그대로 사용한 스킬이 "명중" 하였는지 체크하는 함수로, 명중률 뿐만 아니라 마비, 혼란, 빙결같은 상태이상이나 공격할 대상이 이미 반동으로 쓰러지는 등, 스킬이 실패할 수 있는 모든 경우의 수를 처리하는 함수이다. void 명중(string p[][one][two], string s[][one][two], int pn, int sn, int number, int attack, int bt[], int k, int slife[], int ps[], int plife[], int spd, int sattack, int dmg[], int snumber); 정말 많은 인자를 필요로한다. 일단 공격한 쪽의 배열과, 맞은쪽의 배열을 순서대로 넣고, 공격한 쪽의 현재 포켓몬 번호 pn 맞은 쪽의..
-
메인함수의 "배틀"포켓몬 배틀 구현 2022. 3. 16. 00:48
//배틀 int speed = 1147; speed = 우선도비교(p, s, ps[0], ps[1], number, snumber); bt[0] = 326; bt[1] = 722; if (speed == 1) { //플레이어가 더 빠를때 if (act == 1) { 명중(p, s, ps[0], ps[1], number, attack, bt, 1, slife, ps, plife, speed, sattack, dmg); } if (bt[0] == 1051 && sact == 1) { cout