RT
//以下为无懈可击部分
//使用无懈可击无懈无懈可击
int use_wuxie_to_wuxie_wuxie(int x, int fac){//fac=0,表示目标为主公方;fac=1,表示目标为反贼
int cur_use_J = x;//这次使用无懈可击的管理员
int do_J = 0;
if(fac == 0){
for(int i = x; i < n + x; ++i){
int tmp = i;
if(tmp > n) tmp -= n;
if(!alive_player[tmp]) continue;
if(player[tmp].id == "FP"){
for(int j = 1; j <= player[tmp].hand_num; ++j){
if(player[tmp].hand[j] == 'J'){
do_J = 1;
chen_zhe[tmp] = 1;
kkksc03[tmp] = 0;
WYXkk[tmp] = 0;
minus(j, tmp);
cur_use_J = tmp;
break;
}
}
if(do_J) break;;
}
}
}
else if(fac == 1){
for(int i = x; i < n + x; ++i){
int tmp = i;
if(tmp > n) tmp -= n;
if(!alive_player[tmp]) continue;
if(player[tmp].id == "MP"){
for(int j = 1; j <= player[tmp].hand_num; ++j) {
if (player[tmp].hand[j] == 'J') {
do_J = 1;
minus(tmp, j);
cur_use_J = tmp;
break;
}
}
}
else if(player[tmp].id == "ZP"){
for(int j = 1; j <= player[tmp].hand_num; ++j) {
if (player[tmp].hand[j] == 'J') {
do_J = 1;
WYXkk[tmp] = 1;
kkksc03[tmp] = 0;
chen_zhe[tmp] = 0;
minus(tmp, j);
cur_use_J = tmp;
break;
}
}
}
if(do_J) break;
}
}
if(do_J == 0) return 1;
else {
if(use_wuxie_to_wuxie_wuxie(cur_use_J, fac ^ 1)) return 0;
else return 1;
}
}
int wuxie(int x, int source){//无懈可击
int do_J = 0;//是否无懈成功
int find_J = 0;//是否找到无懈
if(player[x].id == "MP"){
for(int i = source; i < n + source; ++i){
int tmp = i;
if(tmp > n) tmp -= n;
if(!alive_player[tmp]) continue;
if(player[tmp].id == "MP"){//主公自己无懈
for(int j = 1; j <= player[tmp].hand_num; ++j){
if(player[tmp].hand[j] == 'J'){
minus(tmp, j);
if(use_wuxie_to_wuxie_wuxie(1, 0)) do_J = 1;
find_J = 1;
break;
}
}
}
else if(player[tmp].id == "ZP"){//忠臣帮无懈
for(int j = 1; j <= player[tmp].hand_num; ++j){
if(player[tmp].hand[j] == 'J'){
minus(tmp, j);
if(use_wuxie_to_wuxie_wuxie(tmp, 0)) do_J = 1;
WYXkk[tmp] = 1;
kkksc03[tmp] = 0;
chen_zhe[tmp] = 0;
find_J = 1;
break;
}
}
}
if(find_J) break;
}
}
else if(player[x].id == "ZP"){
for(int i = source; i < n + source; ++i){
int tmp = i;
if(tmp > n) tmp -= n;
if(!alive_player[tmp]) continue;
if(player[tmp].id == "MP"){//主公帮忠臣无懈
for(int j = 1; j <= player[tmp].hand_num; ++j){
if(player[tmp].hand[j] == 'J'){
minus(tmp, j);
if(use_wuxie_to_wuxie_wuxie(1, 0)) do_J = 1;
find_J = 1;
break;
}
}
}
else if(player[tmp].id == "ZP"){
for(int j = 1; j <= player[tmp].hand_num; ++j){
if(player[tmp].hand[j] == 'J'){
minus(tmp, j);
if(use_wuxie_to_wuxie_wuxie(tmp, 0)) do_J = 1;
WYXkk[tmp] = 1;
kkksc03[tmp] = 0;
chen_zhe[tmp] = 0;
find_J = 1;
break;
}
}
}
if(find_J) break;
}
}
else if(player[x].id == "FP"){
for(int i = source; i < n + source; ++i){//锦囊牌按序依次出牌
int tmp = i;
if(tmp > n) tmp -= n;
if(!alive_player[tmp]) continue;
if(player[tmp].id == "FP"){
for(int j = 1; j <= player[tmp].hand_num; ++j){
if(player[tmp].hand[j] == 'J'){//对跳反献殷勤将导致跳反
minus(tmp, j);
if(use_wuxie_to_wuxie_wuxie(tmp, 1)) do_J = 1;
chen_zhe[tmp] = 1;
kkksc03[tmp] = 0;
WYXkk[tmp] = 0;
find_J = 1;
break;
}
}
}
if(find_J) break;
}
}
if(do_J) return 1;
else return 0;
}