-
추가로 구현에 필요한 배열들포켓몬 배틀 구현 2022. 3. 15. 23:13
각 포켓몬은 배열로 구현하였다.
이제 배틀에 사용하는 다섯개의 배열이 필요하다.
1.p[][][], s[][][]배열
p[][][]와 s[][][] 배열은
플레이어와 cpu의 포켓몬 배열이다.
각 포켓몬은 2차원 배열로 구현되었고,
플레이어의 첫번째 포켓몬은 p[1][][], 두번째 포켓몬은 p[2][][]
이런식으로 접근한다.
줄기차게 사용될 배열이니만큼 이름은 간단하게 지었다.
p는 player일것같지만 사실 pokemon의 p였다...
s는 's'angdabang, 상대방(...)
2.ps[]배열
포켓몬은 크게 현재 필드위에 존재하는 포켓몬과
아닌 포켓몬으로 나뉜다.
현재 사용가능한 기술, 공격한 포켓몬, 맞는 포켓몬은 전부 필드에 존재하는 포켓몬이므로,
현재 필드에 있는 포켓몬의 번호를 지정해줘야한다.
플레이어가 현재 사용하는 포켓몬이 1번 포켓몬이면 ps[0]=1
cpu가 현재 사용하는 포켓몬이 3번 포켓몬이면 ps[1]=3
이런식으로 값을 저장하고,
포켓몬이 교체될때마다 해당 값을 수정한다.
그리고 위의 p, s배열에 접근할땐 주로
p[ps[0]][0][0],
s[ps[1]][0][0] 이런식으로 접근한다.
필드 상태도 ps배열로 나타내는데,
전용 배열을 따로 만들어도 됬지만
그러면 또 모든 함수 인자에 해당 배열을 추가해야되는게 귀찮아서(...)
그냥 ps 배열 칸을 늘렸다.
3.ppp[][], sss[][]
이름 정말 대충 지은것같지만
p(layer)의 pp를 나타내므로 줄여서 ppp다(...)
아쉽게도 c++의 배열은 한번에 여러 자료형을 저장할 수 없다.
그렇기에 나는 문자열 배열을 생성하였고,
정수값들은 일단 문자열로 쓴뒤 stoi 함수를 통해 int값으로 변경하여 사용하였다.
다만 int로만 사용되며, 또 줄기차게 많이 사용되는게 2개 있는데
바로 현재 체력과 pp이다.
int ppp[4][5] = { {0,0,0,0,0}, { 0, stoi(p[1][1][4]),stoi(p[1][2][4]),stoi(p[1][3][4]), stoi(p[1][4][4]) }, { 0, stoi(p[2][1][4]),stoi(p[2][2][4]),stoi(p[2][3][4]), stoi(p[2][4][4]) }, { 0, stoi(p[3][1][4]),stoi(p[3][2][4]),stoi(p[3][3][4]), stoi(p[3][4][4]) } };
그렇기에 플레이어 1번 포켓몬의 1번 기술 pp는 ppp[1][1]에,
상대 2번 포켓몬의 3번 기술 pp는 sss[2][3]에 저장된다.
현재체력은 1차원 배열로
플레이어의 1번 포켓몬의 현재 체력은 plife[1]에,
상대방의 2번 포켓몬의 현재 체력은 slife[2]에 저장된다.
그 외엔 배틀 처리에 필요한 battletrigger 값을 저장하는 bt배열,
(bt[0] = 상대가 공격을 맞고 기절하면 -1, 아니면 0
bt[1] = 공격한 쪽이 반동으로 기절하면 -1, 아니면 0 )기술 "카운터" 구현에 필요한 공격 받은 데미지를 저장하는 dmg 배열
등이 존재한다.
이것도 ps배열에 통합해버릴 수 있었지만
(그때는 부지런해서) 따로 배열을 만들어 인자로 추가했다.
이러한 값들은 전역변수로써 어디서든 수정하고 어디서든 접근할 수 있게
배열로 저장하였다.
'포켓몬 배틀 구현' 카테고리의 다른 글
메인함수의 "배틀" (0) 2022.03.16 우선도와 스피드 구현 (0) 2022.03.16 처음에 기획을 잘해야 하는 이유 (0) 2022.03.15 "포켓몬"의 구현 (0) 2022.03.15 포켓몬 배틀의 구현, 전체적인 기획 (0) 2022.03.15