-
Notifications
You must be signed in to change notification settings - Fork 0
/
변화스킬.cpp
155 lines (149 loc) · 5.97 KB
/
변화스킬.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
#include "head.h"
void 변화스킬(string p[][one][two], string s[][one][two],
int pn, int sn, int number, int plife[], int slife[], int k, int ps[], int bt[]) {
//공격 스킬이 아닌 특수 스킬들을 처리하는 함수
string skillname = p[pn][number][0];//각 스킬명에 따른 효과 발동
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 || ps[8] == 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";//회복량 프린트
}
if (skillname == "날개쉬기") {
if (k == 0)cout << "상대 ";
cout << p[pn][0][11] << "의 비행타입이 사라졌다!\n";
for (int i = 6; i < 11; i++) {
for (int j = 0; j < two - 1; j++) {
p[pn][i][j] = "null";
}
}
if (p[pn][0][11] == "썬더" || p[pn][0][14] == "썬더") {
p[pn][0][2] = "null";
p[pn][7][0] = "땅";
p[pn][8][0] = "전기";
p[pn][8][1] = "비행";
p[pn][8][2] = "강철";
}
if (p[pn][0][11] == "파이어로" || p[pn][0][14] == "파이어로") {
p[pn][0][2] = "null";
p[pn][7][0] = "땅";
p[pn][7][1] = "물";
p[pn][7][2] = "바위";
p[pn][8][0] = "강철";
p[pn][8][1] = "벌레";
p[pn][8][2] = "불꽃";
p[pn][8][3] = "얼음";
p[pn][8][4] = "페어리";
p[pn][8][5] = "풀";
}
}
}
if (skillname == "칼춤") {
//칼춤 : 자신의 공격을 2랭크 상승
랭크(p, pn, "공격", 2, 1);
}
if (skillname == "용의춤") {
//칼춤 : 자신의 공격을 2랭크 상승
랭크(p, pn, "공격", 1, 1);
랭크(p, pn, "스피드", 1, 1);
}
if (skillname == "코스믹파워") {
//칼춤 : 자신의 공격을 2랭크 상승
랭크(p, pn, "방어", 1, 1);
랭크(p, pn, "특방", 1, 1);
}
if (skillname == "방어") {
int brd = rand() % 100;
if (brd < stoi(p[pn][number][15])) {
if (k == 0)cout << "상대 ";
cout << p[pn][0][11] <<s1(p,pn)<< "방어 태세에 들어갔다!\n";
bt[1] = 145;
p[pn][number][15] = to_string(stoi(p[pn][number][15]) / 3);
}
else {
cout << "하지만 실패했다!\n";
p[pn][number][15] = "100";
}
}
if (skillname == "맹독") {
if (s[sn][0][1] == "독" || s[sn][0][2] == "독" || s[sn][0][1] == "강철" || s[sn][0][2] == "강철") {
cout << "하지만 효과가 없는 것 같다...\n"; //상대가 독이나 강철 타입이면 무효
}
else if (bt[1] == 145) {
if (k == 1) { cout << "상대 "; }
cout << s[sn][0][11] << s1(s, sn) << "공격으로부터 몸을 지켰다!\n";
}
else if (s[sn][5][1] == "y" || s[sn][5][3] == "y" || s[sn][5][6] == "y" || s[sn][5][9]=="y" || s[sn][5][7]=="y") {
if (k == 1)cout << "상대 ";
cout << s[sn][0][11]<<"에겐 더이상 상태이상을 걸 수 없다!\n";
//상대가 이미 상태이상에 걸려있으면 무효
}
else {
if (s[sn][5][2] == "y") {//상대가 이미 "독" 상태이상에 걸린 경우
if (k == 1)cout << "상대 ";
cout << s[sn][0][0] << "의 독이 더 강해졌다!\n";//맹독으로 업그레이드
s[sn][5][7] = "y";//맹독 여부를 y로 변경
s[sn][5][8] = "0";//맹독 카운트. 매 턴 맹독이 데미지가 더 강해지게 한다.
s[sn][5][2] = "n";//독 여부를 n으로 변경
cout << s[sn][5][7];
}
else {//상대가 상태이상에 걸리지 않은 경우
if (k == 1)cout << "상대 ";
cout << s[sn][0][0] << s1(s, sn) << "맹독에 걸렸다!\n";
s[sn][5][7] = "y";
s[sn][5][8] = "0";
s[sn][5][0] = "y"; //상태이상 여부를 y로 변경
}
}
}
if (skillname == "하품") {
//하품은 상대에게 영향을 미치는 변화기이지만
//고스트 타입에게 무효되지않는다.
if (bt[1] == 145) {
if (k == 1) { cout << "상대 "; }
cout << s[sn][0][11] << s1(s, sn) << "공격으로부터 몸을 지켰다!\n";
}
//상대가 방어를 썼을경우 막힌다
else {
if (k == 1) { cout << "상대 "; }
cout << s[sn][0][11] << "의 졸음을 유도했다!\n";
if (s[sn][5][10] == "1" || s[sn][5][0] == "y");
else {
s[sn][5][10] = "2";
}
//[5][10]값이 1인 경우 = 상대방이 전턴에도 하품을 맞은 경우
//[5][0]값이 y인 경우 = 상대방에게 이미 상태이상이 걸려있는 경우
}
}
if (skillname == "스텔스록") {
if (k == 1 && ps[13] == 1)
printf("하지만 실패했다!\n");
else if (k == 0 && ps[12] == 1)
printf("하지만 실패했다!\n");
//이ㅣ 스텔스록이 상대 필드에 존재하는데 스텔스록을 또 사용한 경우 실패
else {
if (k == 1) { cout << "상대의 "; }
else if (k == 0) { cout << "우리 편 "; }
printf("주변에 뾰족한 바위가 떠다니기 시작했다!\n");
if (k == 1)
ps[13] = 1;
else if (k == 0)
ps[12] = 1;
}
}
if (skillname=="변신") {
즉발특성(p, pn, k, s, sn, ps);
}
}