#include <bits/stdc++.h>
#include <windows.h>
using namespace std;
int slowout(char *p)
{
while(1)
{
if(*p!=0)
printf("%c",*p++);
else
break;
Sleep(1);
}
}
/**
0 = 命
1 = 玉
2 = 防
3 = 盾 4 = 钟
5 = 闪
6 = 戳 7 = 2戳 8 = 3戳 9 = 4戳
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 = 下挂
**/
struct numbers
{
bool flag;//表示是否出过中猪
float belong[50];//表示剩余资源数量
int hd[50];//黑洞吸的
bool if_shang;//上挂状态
int last,be4_last;//上回合和上上回合
void simple_reset()
{
for(int i = 1;i <= 40;i++) belong[i] = hd[i] = 0;
belong[0] = 1;
flag = false;
if_shang = false;
last = 0,be4_last = 0;
}
void do_after(int id)
{
if(if_shang && id == 30)
{
belong[37]++;
return;
}
if(if_shang && id == 31)
{
belong[38]++;
return;
}
if(if_shang && id == 38)
{
belong[38]--;
return;
}
if(if_shang && id == 37)
{
belong[37]--;
return;
}
if(if_shang && id != 27 && id != 42) return;
if(decision(id) == 2)
{
hd[id]--;
return;
}
switch(id)
{
case 1: break;
case 2: break;
case 3: {belong[2]--; break;}
case 4: {if(belong[3] >= 2) {belong[3] -= 2;} else belong[4]--; break;}
case 5: break;
case 6: {belong[1] -= 0.5;break;}
case 7: {belong[6] -= 2;break;}
case 8: {belong[7]--;break;}
case 9: {belong[8]--;break;}
case 10: {belong[5] -= 1.5;break;}
case 11: {belong[10] -= 2;break;}
case 12: {belong[11] -= 2;break;}
case 13: {belong[12]--;break;}
case 14: {belong[1] --;break;}
case 15: {belong[14] -= 2;flag = true;break;}
case 16: {belong[15] -= 2;break;}
case 17: {belong[16] --;break;}
case 18: {belong[17] --;break;}
case 19: {belong[1] -= 1.5;break;}
case 20: {belong[19] -= 2;break;}
case 21: {belong[20] -= 2.0;break;}
case 22: {belong[1] -= 1.0; belong[2] -= 1.0; break;}
case 23: {belong[22] -= 2.0;break;}
case 24: {belong[23] -= 2.0;break;}
case 25: {if(belong[21] >= 1) belong[21]--; else belong[24]--; break;}
case 26: {belong[25]--;break;}
case 27: {belong[1] -= 2.0;break;}
case 28: {belong[27] -= 1.0;belong[39] -= 1.0;break;}
case 29: {belong[28] -= 1.0;belong[27] -= 1.0;break;}
case 30: {if(belong[39] >= 2.5) belong[39] -= 2.5; else {belong[1] -= 4.0;belong[2] -= 2.0;} belong[37]++;break;}
case 31: {belong[30] -= 2.0; belong[38]++; break;}
case 32: {belong[1] -= 10.0;break;}
case 33: {belong[32] -= 2.0;break;}
case 34: {belong[1] -= 0.5;belong[2] -= 0.5;break;}
case 35: {belong[34] -= 2.0;break;}
case 36: {belong[35] -= 1.0;break;}
case 37: {belong[37] -= 2.0;belong[0]++;break;}
case 38: {belong[38] -= 2.0;belong[0] += 2.0;break;}
case 39: break;
case 40: break;
case 41: {if_shang = true;break;}
case 42: {if_shang = false;break;}
case 43: break;
}
}
int decision(int id)
{
if(if_shang && id != 27 && id != 41 && id != 43 && id != 33) return 1;
if(hd[id]) return 2;
switch(id)
{
case 1: return 1;
case 2: return 1;
case 3: return belong[2] >= 1.0;
case 4: return belong[3] >= 2.0 || belong[4] >= 1.0;
case 5: return 1;
case 6: return belong[1] >= 0.5;
case 7: return belong[6] >= 2.0;
case 8: return last == 7;
case 9: return last == 8;
case 10: return belong[5] >= 1.5;
case 11: return belong[10] >= 2.0;
case 12: return belong[11] >= 2.0;
case 13: return last == 12;
case 14: return belong[1] >= 1.0;
case 15: return belong[14] >= 2.0;
case 16: return belong[15] >= 2.0;
case 17: return belong[16] >= 1.0;
case 18: return last == 17;
case 19: return belong[1] >= 1.5;
case 20: return belong[19] >= 2.0;
case 21: return belong[20] >= 2.0;
case 22: return belong[1] >= 1.0 && belong[2] >= 1.0;
case 23: return belong[22] >= 2.0;
case 24: return belong[23] >= 2.0;
case 25: return belong[21] >= 1.0 || belong[24] >= 1.0;
case 26: return last == 25;
case 27: return belong[1] >= 2.0;
case 28: return belong[27] >= 1.0 && belong[39] >= 1.0;
case 29: return belong[28] >= 1.0 && belong[27] >= 1.0;
case 30: return belong[39] >= 2.5 || (belong[1] >= 4.0 && belong[2] >= 2.0);
case 31: return belong[30] >= 2.0;
case 32: return belong[1] >= 10.0;
case 33: return belong[32] >= 2.0;
case 34: return belong[1] >= 0.5 && belong[2] >= 0.5;
case 35: return belong[34] >= 2.0;
case 36: return belong[35] >= 1.0 && flag;
case 37: return belong[37] >= 1.0;
case 38: return belong[38] >= 1.0;
case 39: return 1;
case 40: return last != 40 || be4_last != 40;
case 41: return if_shang == false;
case 42: return if_shang == true;
case 43: return if_shang == false;
}
}
};
numbers a,b;//a是真人,b是人机
const float damage[44] = {0,0,0,0,0,0,0.5,0.5,1,2,0.5,1,2,4,0.5,1,2,4,8,0.5,1,2,0.5,1,2,4,8,0,1,2,3.5,7,100,1000,0.5,0.5,1,0,0,0,0,0,0,0};//伤害/G
const int xi[44] = {0,1,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,4,5,5,5,6,6,6,7,7,1,8,8,9,9,10,10,11,11,11,1,1,0,1,0,0,0};
void intro()
{
srand(time(0));
printf("");
return;
}
string return_name(int id)
{
switch(id)
{
case 1: return "玉 ";
case 2: return "防 ";
case 3: return "盾 ";
case 4: return "钟 ";
case 5: return "闪 ";
case 6: return "戳 ";
case 7: return "二戳 ";
case 8: return "三戳 ";
case 9: return "四戳 ";
case 10: return "小电 ";
case 11: return "中电 ";
case 12: return "大电 ";
case 13: return "雷神 ";
case 14: return "小猪 ";
case 15: return "中猪 ";
case 16: return "大猪 ";
case 17: return "吴猪 ";
case 18: return "聪明吴猪 ";
case 19: return "重拳 ";
case 20: return "天帝 ";
case 21: return "无相 ";
case 22: return "暴击 ";
case 23: return "重击 ";
case 24: return "痛击 ";
case 25: return "马丁 ";
case 26: return "百变马丁 ";
case 27: return "黑洞 ";
case 28: return "白洞 ";
case 29: return "虫洞 ";
case 30: return "狒狒 ";
case 31: return "暗黑狒狒 ";
case 32: return "绝杀 ";
case 33: return "超级绝杀 ";
case 34: return "斩 ";
case 35: return "元气斩 ";
case 36: return "猪油斩 ";
case 37: return "蕉蕉 ";
case 38: return "暗黑蕉蕉 ";
case 39: return "甩剑 ";
case 40: return "哈哈 ";
case 41: return "上挂 ";
case 42: return "下挂 ";
case 43: return "举报 ";
}
}
void saydone(numbers x)
{
for(int id = 1;id <= 43;id++)
{
if(!x.decision(id)) continue;
cout << return_name(id) << "...编号" << id << endl;
}
printf("请问你要出什么:");
return;
}
void startgame()
{
vector<int> v;
int i = 0,t = 0,cnt,r = 0,zhong;
float dam,dun,shielda,shieldb;
a.simple_reset();b.simple_reset();
while(a.belong[0] > 0 && b.belong[0] > 0)
{
a.be4_last = a.last;
b.be4_last = b.last;
a.last = t;
b.last = r;
i++;
slowout("第");
printf("%d",i);
slowout("回合\n");
slowout("这回合你可以出:\n");
// cout<<"你有"<< a.belong[2] <<"个防"<<endl;
saydone(a);
while(cin >> t)
{
if(t == 100)
{
for(int i = 0;i <= 43;i++)
cout << i << " " << a.belong[i] << endl;
cout << a.if_shang << endl;
}
if(!a.decision(t)) printf("\n你现在不能出这个!请重新考虑:");
else break;
}
a.belong[t] += 1.0;
a.do_after(t);
// cout << t << endl;
// for(int j = 0;j <= 40;j++) cout << j << ":" << a.belong[j] << endl;
v.clear();cnt = 0;
for(int id = 1;id <= 43;id++)
{
if(!b.decision(id)) continue;
if(b.if_shang) id = 44;
v.push_back(id);
cnt++;
}
if(b.if_shang)
{
v.push_back(18);
v.push_back(26);
v.push_back(31);
v.push_back(32);
for(int k = 1;k <= 5;k++)v.push_back(42);
cnt = 9;
}
r = v[rand() % cnt];//AI就出r了
b.belong[r] += 1.0;
b.do_after(r);
slowout("你出了");
cout << return_name(t) << endl;
slowout("AI出了");
cout << return_name(r) << endl;
shielda = a.belong[4] + 0.5 * (bool)a.belong[3];
shieldb = b.belong[4] + 0.5 * (bool)b.belong[3];
//特殊情况,可以防住
//黑洞特判
if(r == 27 && damage[t] > 0)
{
b.hd[t]++;
continue;
}
if(t == 27 && damage[r] > 0)
{
a.hd[r]++;
continue;
}
if(r == 27)
{
a.belong[t]--;
b.belong[t]++;
if(t == 41) a.if_shang = false;
if(t == 42) a.if_shang = true;
continue;
}
if(t == 27)
{
b.belong[r]--;
a.belong[r]++;
if(r == 41) b.if_shang = false;
if(r == 42) b.if_shang = true;
continue;
}
//哈哈特判
if(r == 40)
{
if(t == 14 || t == 22 || t == 34 || t == 35)//0.5G
{
if(shielda == 0)
{
a.belong[0]--;
if(a.belong[0] > 0) slowout("蕉蕉碎!");
else return;
continue;
}
else
{
if(a.belong[3] > 1)
{
a.belong[3]--;
slowout("盾碎");
}
else
{
a.belong[4]--;
a.belong[3]++;
slowout("钟变盾");
}
continue;
}
}
if(t == 15 || t == 23 || t == 28)
{
if(shielda <= 0.5)
{
a.belong[0]--;
if(a.belong[0] > 0) slowout("蕉蕉碎!");
else return;
continue;
}
else
{
a.belong[4]--;
slowout("钟碎");
continue;
}
}
}
if(t == 40)
{
if(r == 14 || r == 22 || r == 34 || r == 35)//0.5G
{
if(shieldb == 0)
{
b.belong[0]--;
if(b.belong[0] > 0) slowout("蕉蕉碎!");
else return;
continue;
}
else
{
if(b.belong[3] > 1)
{
b.belong[3]--;
slowout("盾碎");
}
else
{
b.belong[4]--;
b.belong[3]++;
slowout("钟变盾");
}
continue;
}
}
if(r == 15 || r == 23 || r == 28)
{
if(shieldb <= 0.5)
{
b.belong[0]--;
if(b.belong[0] > 0) slowout("蕉蕉碎!");
else return;
continue;
}
else
{
b.belong[4]--;
slowout("钟碎");
continue;
}
}
}
//玉特判
if(t == 1 && r == 19)
{
a.belong[1]--;
slowout("玉住!");
continue;
}
if(t == 19 && r == 1)
{
b.belong[1]--;
slowout("玉住!");
continue;
}
//防特判
if(t == 2 && damage[r] > 0)
{
if(r == 6 || r == 10 || r == 14 || r == 34)
{
slowout("防住!");
continue;
}
}
if(r == 2 && damage[t] > 0)
{
if(t == 6 || t == 10 || t == 14 || t == 34)
{
slowout("防住!");
continue;
}
}
//闪特判
if(t == 5 && 6 <= r && r <= 11)
{
slowout("闪掉!");
continue;
}
if(r == 5 && 6 <= t && t <= 11)
{
slowout("闪掉!");
continue;
}
//若无法防住,结算(包括对冲和单向)
if((r == 37 || r == 38) && damage[t] > 0 && t != 33)
{
b.belong[0]--;
slowout("前台蕉蕉碎!");
continue;
}
if((t == 37 || t == 38) && damage[r] > 0 && r != 33)
{
a.belong[0]--;
slowout("前台蕉蕉碎!");
continue;
}
if(r == 3 && damage[t] <= 3.5 && damage[t] > 0)
{
b.belong[3]--;
slowout("前台盾碎!\n");
continue;
}
if(t == 3 && damage[r] <= 3.5 && damage[r] > 0)
{
a.belong[3]--;
slowout("前台盾碎!\n");
continue;
}
if(r == 4 && damage[t] == 0.5)
{
b.belong[4]--;
b.belong[3]++;
slowout("前台钟变盾!\n");
continue;
}
if(r == 4 && damage[t] >= 1 && damage[t] <= 8)
{
b.belong[4]--;
slowout("前台钟碎!\n");
continue;
}
if(t == 4 && damage[r] == 0.5)
{
a.belong[4]--;
a.belong[3]++;
slowout("前台钟变盾!\n");
continue;
}
if(t == 4 && damage[r] >= 1 && damage[r] <= 8)
{
a.belong[4]--;
slowout("前台钟碎!\n");
continue;
}
if(a.if_shang && r == 43)
{
a.belong[0] = 0;
return;
}
if(b.if_shang && t == 43)
{
b.belong[0] = 0;
return;
}
if(a.if_shang && b.if_shang)
{
a.belong[0] = b.belong[0] = 5;
return;
}
if(a.belong[0] >= 3 && b.belong[0] >= 3)
{
a.belong[0] = b.belong[0] = 5;
return;
}
if(t == 39) shielda = 0;
if(r == 39) shieldb = 0;
if(damage[t] != damage[r])
{
if(damage[t] > damage[r])
{
if(b.if_shang && t != 33) continue;
if(t == 33 && r == 32)
{
b.belong[0]--;
if(b.belong[0] > 0)
{
slowout("蕉蕉碎");
}
else return;
continue;
}
else if(t == 33 && r != 32)
{
b.belong[0] -= 2;
if(b.belong[0] > 0)
{
slowout("双蕉蕉碎");
}
else return;
continue;
}
else if(t == 32)
{
b.belong[0]--;
if(b.belong[0] > 0)
{
slowout("双蕉蕉碎");
}
else return;
continue;
}
if(xi[t] == xi[r])
{
dam = damage[t] - damage[r];
zhong = dam;
dun = dam - zhong;
if(shieldb < dam || b.belong[4] < zhong)
{
b.belong[0]--;
if(b.belong[0] > 0)
{
slowout("蕉蕉碎");
}
else return;
}
else
{
if(zhong > 0) cout << zhong << "钟";
if(dun > 0) cout << "盾";
cout << "碎";
if(b.belong[3] < dun)
{
b.belong[3] ++;
b.belong[4] --;
}
else b.belong[3] -= dun;
b.belong[4] -= zhong;
}
}
else
{
dam = damage[t];
zhong = dam;
dun = dam - zhong;
if(shieldb < dam || b.belong[4] < zhong)
{
b.belong[0]--;
if(b.belong[0] > 0)
{
slowout("蕉蕉碎");
}
else return;
}
else
{
if(zhong > 0) cout << zhong << "钟";
if(dun > 0) cout << "盾";
cout << "碎";
if(b.belong[3] < dun)
{
b.belong[3] ++;
b.belong[4] --;
}
else b.belong[3] -= dun;
b.belong[4] -= zhong;
}
}
}
else
{
if(a.if_shang && r != 33) continue;
if(r == 33 && t == 32)
{
a.belong[0]--;
if(a.belong[0] > 0)
{
slowout("蕉蕉碎");
}
else return;
continue;
}
else if(r == 33 && t != 32)
{
a.belong[0] -= 2;
if(a.belong[0] > 0)
{
slowout("蕉蕉碎");
}
else return;
continue;
}
else if(r == 32)
{
a.belong[0]--;
if(a.belong[0] > 0)
{
slowout("蕉蕉碎");
}
else return;
continue;
}
if(xi[t] == xi[r])
{
dam = damage[r] - damage[t];
zhong = (int)dam;
dun = dam - zhong;
if(shielda < dam || a.belong[4] < zhong)
{
a.belong[0]--;
if(a.belong[0] > 0)
{
slowout("蕉蕉碎");
}
else return;
}
else
{
if(zhong > 0) cout << zhong << "钟";
if(dun > 0) cout << "盾";
cout << "碎";
if(a.belong[3] < dun)
{
a.belong[3] ++;
a.belong[4] --;
}
else a.belong[3] -= dun;
a.belong[4] -= zhong;
}
}
else
{
dam = damage[r];
zhong = dam;
dun = dam - zhong;
if(shielda < dam || a.belong[4] < zhong)
{
a.belong[0]--;
if(a.belong[0] > 0)
{
slowout("蕉蕉碎");
}
else return;
}
else
{
if(zhong > 0) cout << zhong << "钟";
if(dun > 0) cout << "盾";
cout << "碎";
if(a.belong[3] < dun)
{
a.belong[3] ++;
a.belong[4] --;
}
else a.belong[3] -= dun;
a.belong[4] -= zhong;
}
}
}
}
else
{
if(damage[t] != 0 && damage[t] != 0.5) slowout("一样大");
else if(t == r && damage[t] != 0) slowout("一样大");
else if(damage[t] != 0 && t == 22)//暴击是0.5G最大的
{
if(b.belong[3] > 0)
{
b.belong[3]--;
slowout("盾碎");
}
else if(b.belong[4] > 0)
{
b.belong[4]--;
b.belong[3] = 1;
slowout("钟变盾");
}
else
{
b.belong[0]--;
if(b.belong[0] > 0)
{
slowout("蕉蕉碎");
}
else
{
return;
}
}
}
else if(damage[t] != 0 && r == 22)
{
if(a.belong[3] > 0)
{
a.belong[3]--;
slowout("盾碎");
}
else if(a.belong[4] > 0)
{
a.belong[4]--;
a.belong[3] = 1;
slowout("钟变盾");
}
else
{
a.belong[0]--;
if(a.belong[0] > 0)
{
slowout("蕉蕉碎");
}
else
{
return;
}
}
}
else if(damage[t] != 0 && t == 19 && r == 6)//重拳比戳大
{
if(b.belong[3] > 0)
{
b.belong[3]--;
slowout("盾碎");
}
else if(b.belong[4] > 0)
{
b.belong[4]--;
b.belong[3] = 1;
slowout("钟变盾");
}
else
{
b.belong[0]--;
if(b.belong[0] > 0)
{
slowout("蕉蕉碎");
}
else
{
return;
}
}
}
else if(damage[t] != 0 && r == 19 && t == 6)
{
if(a.belong[3] > 0)
{
a.belong[3]--;
slowout("盾碎");
}
else if(a.belong[4] > 0)
{
a.belong[4]--;
a.belong[3] = 1;
slowout("钟变盾");
}
else
{
a.belong[0]--;
if(a.belong[0] > 0)
{
slowout("蕉蕉碎");
}
else
{
return;
}
}
}
}
printf("\n");
}
}
int main()
{
intro();
int games = 0,difficulty = 1,oper;
while(true)
{
printf("游戏大厅:\n1.开始游戏\n2.难度设置\n3.退出游戏\n请问你要:");
scanf("%d",&oper);
if(oper == 1)
{
games++;
slowout("第");
printf("%d",games);
slowout("局:\n");
startgame();
slowout("游戏结束! ");
if(!a.belong[0]) slowout("很遗憾,你输了!\n");
else if(!b.belong[0])slowout("恭喜你,你赢了!\n");
else slowout("平局!\n");
Sleep(100);
int again = MessageBox(NULL,"返回大厅......","系统",MB_OK);
printf("\n");
}
if(oper == 3)
{
printf("\n期待下次游玩!\n");
return 0;
}
if(oper == 2)
{
slowout("当前难度:");
printf("%d\n",difficulty);
slowout("请选择难度:\n");
if(difficult)
}
}
}