U5587.打怪游戏 v4.1 稍微优化
通过率:0%
时间限制:1.00s
内存限制:128MB
题目描述
1
输入输出样例
输入#1
#include <bits/stdc++.h> #include <windows.h> using namespace std; //superpaperIV 制作 //严禁该游戏,严禁抄游戏 #define aaa int #define aaaaa double struct Player{string Name; aaa Health , Damage , Money , level ;aaaaa exp ;aaa dodge ; aaaaa exb;}; aaa init_hp,init_dmg,init_dodge; aaaaa init_exb; void Color(int a){ if(a==0) SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_RED|FOREGROUND_GREEN|FOREGROUND_BLUE); if(a==1) SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_GREEN|FOREGROUND_BLUE); if(a==2) SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_GREEN); if(a==3) SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_RED|FOREGROUND_BLUE); if(a==4) SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_RED); if(a==5) SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_RED|FOREGROUND_GREEN); if(a==6) SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_BLUE); if(a==7) SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_RED|FOREGROUND_GREEN|FOREGROUND_BLUE); if(a==8) SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_RED); if(a==9) SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),BACKGROUND_INTENSITY|BACKGROUND_GREEN|BACKGROUND_BLUE); if(a==10) SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),BACKGROUND_INTENSITY|BACKGROUND_RED|BACKGROUND_BLUE); if(a==11) SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_RED|FOREGROUND_BLUE); if(a==12) SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_RED|FOREGROUND_GREEN); if(a==13) SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY); if(a==14) SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_GREEN|FOREGROUND_BLUE);} void message_s(string a){ for (aaa i=0;i<a.size();i++){ cout<<a[i]; Sleep(2); } return ; } void message_f(string a){ for (aaa i=0;i<a.size();i++){ cout<<a[i]; Sleep(2); } return ; } void message_sf(string a){ for (aaa i=0;i<a.size();i++){ cout<<a[i]; } return ; } int ShowStats(string Name,aaa Health,aaa Damage,aaa Money,aaa level, aaaaa exp,aaa dodge,aaaaa exb){ system("mode con cols=28 lines=12"); int a; Color(0);message_s("\n ----==/");cout<<Name;message_s("\\==----\n");Color(0);cout<<endl;message_s(" 满血量: ");Color(4);cout<<Health<<endl;Color(0);message_s(" 伤害: ");Color(8);cout<<Damage<<endl;Color(0);message_s(" 经验: ");Color(2);cout<<level;Color(0);message_s("级 ");Color(2);cout<<exp<<"/"<<5*pow(1.5,level-1)<<endl;Color(0);message_s(" 金币: ");Color(5);cout<<Money<<endl;Color(0);message_s(" 闪避率:");Color(1);cout<<dodge<<"%"<<endl;Color(0);message_s(" 经验倍率: ");Color(2);cout<<exb*100<<"%"<<endl<<endl;Color(0);message_s(" 输入任何东西继续:"); cin>>a; system("cls"); return 0; } void shop2(aaa& Health,aaa& Money){ system("cls"); int a=0; while (true){ system("mode con cols=44 lines=11"); message_s("\n ----==/装备商店(不限购)\\=---- Money:");cout<<Money<<endl;message_s("输入1买皮甲 +1血量 -5金币");cout<<endl;message_s("输入2买铁甲 +5血量 -20金币");cout<<endl;message_s("输入3合金甲 +25血量 -120金币");cout<<endl;message_s("输入4防弹衣 +3血量 -15金币");cout<<endl;message_s("输入5轻型防弹衣 +2血量 -8金币");cout<<endl;message_s("输入6退出商店");cout<<endl<<endl;message_s("请输入你要买的东西:"); cin>>a; system("mode con cols=28 lines=3"); if (a>=1 && a<=5 )cout<<endl; if (a==1){if (Money>=5){Money-=5;Health++;system("cls");message_s("你买了皮甲 +1血量 -5金币");Sleep(1000);system("cls");}else{system("cls");message_s("你买不起这件装备");}} else if (a==2){if (Money>=20){Money-=20;Health+=5;system("cls");message_s("你买了铁甲 +5血量 -20金币");Sleep(1000);system("cls");}else{system("cls");message_s("你买不起这件装备");}} else if(a==3){if (Money>=120){Money-=120;Health+=25;system("cls");message_s("你买了合金甲 +25血量 -120金币");Sleep(1000);system("cls");}else{system("cls");message_s("你买不起这件装备");}} else if (a==4){if(Money>=15){Money-=15;Health+=3;system("cls");message_s("你买了防弹衣 +3血量 -15金币");Sleep(1000);system("cls");}else{system("cls");message_s("你买不起这件装备");}} else if (a==5){if (Money>=8){Money-=8;Health+=2;system("cls");message_s("你买了轻型防弹衣 +2血量 -8金币");Sleep(1000);system("cls");}else{system("cls");message_s("你买不起这件装备");}} else if (a==6){system("cls");return ;} else{system("cls");system("mode con cols=12 lines=3");message_s("请好好输入");Sleep(1000);system("cls"); return ;} } } void shop3(aaa& Damage,aaa& Money){ system("cls"); int a=0; while (true){ system("mode con cols=44 lines=11"); message_s("\n ----==/武器商店(不限购)\\=---- Money:");cout<<Money<<endl;message_s(" 输入1买木剑 +1伤害 -10金币");cout<<endl;message_s(" 输入2买铁剑 +5伤害 -45金币");cout<<endl;message_s(" 输入3买合金剑 +25伤害 -225金币");cout<<endl;message_s(" 输入4买火枪 +3伤害 -28金币");cout<<endl;message_s(" 输入5买菜刀 +2伤害 -19金币");cout<<endl;message_s(" 输入6退出商店");cout<<endl<<endl;message_s(" 请输入你要买的东西:"); cin>>a; system("mode con cols=28 lines=3"); if (a>=1 && a<=5 )cout<<endl; if (a==1){if (Money>=10){Money-=10;Damage++;system("cls");message_s(" 你买了木剑 +1伤害 -10金币");Sleep(1000);system("cls");}else{system("cls");message_s("你买不起这件装备");}} else if (a==2){if (Money>=45){Money-=45;Damage+=5;system("cls");message_s(" 你买了铁剑 +5伤害 -45金币");Sleep(1000);system("cls");}else{system("cls");message_s("你买不起这件装备");}} else if(a==3){if (Money>=225){Money-=225;Damage+=25;system("cls");message_s(" 你买了合金剑 +25伤害 -225金币");Sleep(1000);system("cls");}else{system("cls");message_s("你买不起这件装备");}} else if (a==4){if(Money>=28){Money-=28;Damage+=3;system("cls");message_s(" 你买了火枪 +3伤害 -28金币");Sleep(1000);system("cls");}else{system("cls");message_s("你买不起这件装备");}} else if (a==5){if (Money>=19){Money-=19;Damage+=2;system("cls");message_s(" 你买了菜刀 +2伤害 -19金币");Sleep(1000);system("cls");}else{system("cls");message_s("你买不起这件装备");}} else if (a==6){system("cls");return ;} else {system("cls");system("mode con cols=12 lines=3");message_s("请好好输入");Sleep(1000);system("cls");return ; } } } void shop4(int& dodge,int& Money){ system("cls"); int a=0; while (true){ system("mode con cols=44 lines=11"); message_s("\n ----==/鞋子商店(不限购)\\=---- Money:");cout<<Money<<endl;message_s("输入1买皮鞋 +1闪避 -20金币");cout<<endl;message_s("输入2买锁链鞋 +5闪避 -95金币");cout<<endl;message_s("输入3买合金鞋 +25闪避 -470金币");cout<<endl;message_s("输入4买运动鞋 +3闪避 -55金币");cout<<endl;message_s("输入5买拖鞋 +2闪避 -32金币");cout<<endl;message_s("输入6退出商店");cout<<endl<<endl;message_s("注:闪避率最多为60 超过则会被强制改为60闪避率");cout<<endl<<endl;message_s("请输入你要买的东西:"); cin>>a; system("mode con cols=28 lines=3"); if (a>=1 && a<=5 )cout<<endl; if (a==1){if (Money>=20){Money-=20;dodge++;system("cls");message_s("你买了皮鞋 +1闪避 -20金币");Sleep(1000);system("cls");}else{system("cls");message_s("你买不起这件装备");}} else if (a==2){if (Money>=95){Money-=95;dodge+=5;system("cls");message_s("你买了锁链鞋 +5闪避 -95金币");Sleep(1000);system("cls");}else{system("cls");message_s("你买不起这件装备");}} else if(a==3){if (Money>=470){Money-=470;dodge+=25;system("cls");message_s("你买了合金鞋 +25闪避 -470金币");Sleep(1000);system("cls");}else{system("cls");message_s("你买不起这件装备");}} else if (a==4){if(Money>=55){Money-=55;dodge+=3;system("cls");message_s("你买了运动鞋 +3闪避 -55金币");Sleep(1000);system("cls");}else{system("cls");message_s("你买不起这件装备");}} else if (a==5){if (Money>=32){Money-=32;dodge+=2;system("cls");message_s("你买了拖鞋 +2闪避 -32金币");Sleep(1000);system("cls");}else{system("cls");message_s("你买不起这件装备");}} else if (a==6){system("cls");return ;} else{system("cls");system("mode con cols=12 lines=3");message_s("请好好输入");Sleep(1000);system("cls");return; } a=0; } } void shop5(aaa& Money){ system("cls"); int a=0; while (true){ system("mode con cols=44 lines=11"); message_s("\n ----==/经验商店(不限购)\\=---- Money:");cout<<Money<<endl;message_s("输入1买经验包 +1%经验倍率 -20金币");cout<<endl;message_s("输入2买大经验包 +5%经验倍率 -95金币");cout<<endl;message_s("输入3买超大经验包 +25%经验倍率 -460金币");cout<<endl;message_s("输入4买中经验包 +3%经验倍率 -55金币");cout<<endl;message_s("输入5中小经验包 +2%经验倍率 -36金币");cout<<endl<<endl;message_s("注:经验倍率最多为300% 超过则会被强制改为300%经验倍率");cout<<endl;message_s("输入6退出商店");cout<<endl<<endl;message_s("请输入你要买的东西:"); cin>>a; system("mode con cols=28 lines=3"); if (a>=1 && a<=5 )cout<<endl; if (a==1){if (Money>=20){Money-=20;init_exb+=0.01;system("cls");message_s("你买了经验包 +1%经验倍率 -20金币");Sleep(1000);system("cls");}else{system("cls");message_s("你买不起这件装备");}} else if (a==2){if (Money>=95){Money-=95;init_exb+=0.05;system("cls");message_s("你买了大经验包 +5%经验倍率 -95金币");Sleep(1000);system("cls");}else{system("cls");message_s("你买不起这件装备");}} else if(a==3){if (Money>=460){Money-=460;init_exb+=0.25;system("cls");message_s("你买了超大经验包 +25%经验倍率 -460金币");Sleep(1000);system("cls");}else{system("cls");message_s("你买不起这件装备");}} else if (a==4){if(Money>=55){Money-=55;init_exb+=0.03;system("cls");message_s("你买了中经验包 +3%经验倍率 -55金币");Sleep(1000);system("cls");}else{system("cls");message_s("你买不起这件装备");}} else if (a==5){if (Money>=36){Money-=36;init_exb+=0.02;system("cls");message_s("你买了中小经验包 +2%经验倍率 -36金币");Sleep(1000);system("cls");}else{system("cls");message_s("你买不起这件装备");}} else if (a==6){system("cls");return ;} else {system("cls");system("mode con cols=12 lines=3");message_s("请好好输入");Sleep(1000);system("cls");return ; } a=0; } } void shop(int& Health,int& Damage,int& Money,int& dodge,double& exb){ int a; system("mode con cols=28 lines=9"); message_f("\n 输入1武器商店");cout<<endl;message_f(" 输入2防御商店");cout<<endl;message_f(" 输入3鞋子商店");cout<<endl;message_f(" 输入4经验商店");cout<<endl;message_f(" 输入5退出商店");cout<<endl<<endl;message_f(" 请输入你要去的商店号:"); cin>>a; if (a==5){system("cls");return ;} else if (a==2){shop2(Health, Money);} else if (a==1){shop3(Damage, Money);} else if(a==3){shop4(dodge, Money);} else if(a==4){shop5(Money);} else{system("cls");system("mode con cols=12 lines=3");message_s("\n 请好好输入");Sleep(2000);return ;} } void mob(string& Name,int& health, int& damage, int& exp, int& money, int level, int& dodge){ if (rand()%max(3,level*2-1)==1){Name="史莱姆";health=3+level/2;damage=1+level/3;money=1+level/2;exp=1+(level-1);dodge=min(10+level,25);return ;} if (rand()%max(293-level*17,5)==0){Name="龙王";health=300+level*5;damage=7+(level-1);money=38+level*2;exp=25+(level-1)*(level-2)*1.15;dodge=min(25+level*2,50);return ;} if (rand()%max(347-level*23,5)==0){Name="哥布林王";health=510+level*8;damage=3+(level-1)/1.5;money=55+level*4;exp=4+(level-1)*(level-2)*1.1;dodge=min(10+level*2,30);return ;} if (rand()%max(337-level*23,3)==0){Name="万界之灵";health=210+level*4;damage=5+(level-1)/1.2;money=4+level*3;exp=40+(level-1)*(level-2)*1.3;dodge=min(20+level*3,80);return ;} if (rand()%max(23-level*4+1,5)==1){Name="巨人";health=20+level*3;damage=4+(level-1)/1.5;money=5+level/1.2;exp=2+(level-1)*0.6;dodge=min(3+level,15);return ;} if (rand()%max(27-level*4+1,5)==0){Name="尹子航";health=30+level*3;damage=2+(level-1)/1.2;money=5;exp=3+(level-1)*1.4;dodge=min(15+level*2,35);return ;} if (rand()%max(57-level*5+3,7)==5){Name="恶灵";health=40+level*2;damage=2+(level-1)*1.5;money=5+level;exp=5+(level-1)*0.9;dodge=min(5+level*2,30);return ;} if (rand()%max(37-level*4+2,5)==2){Name="迷失的商人";health=20+level*2.5;damage=3+(level-1)*1.5;money=4+level;exp=3+(level-1)*0.9;dodge=min(5+level,15);return ;} if ((rand()+2)%5==1){Name="精灵";health=3+level;damage=2+level/3;money=1+level/1.5;exp=3+(level-1)/2;dodge=min(0+level-1,10);return ;} if (rand()%5==1){Name="哥布林";health=3+level;damage=1+level/2;money=5+level;exp=(level-1)/2;dodge=min(10+level-1,40);return ;} if (rand()%max(11,level*2+1)==1){Name="保险箱恶灵";health=10+level/2;damage=0.5+(level-1)/3;money=8+level*2;exp=(level-1)*0.5;dodge=35;return ;} if ((rand()+1)%3==0){Name="小巨人";health=4+level/1.5;damage=1+(level-1)/2;money=2+level/2;exp=1+(level-1)*0.7;dodge=min(10+level*2-2,30);return ;} if ((rand()+1)%5==0){Name="肉球";health=8+level*3;damage=2+(level-1)*1.5;money=2+level/2;exp=2+(level-1)*0.8;dodge=min(0+level-1,5);return ;} Name="小虫子";health=3+level*1.5;damage=2+(level-1);money=1+level/2;exp=1+(level-1)/3;dodge=min(10+level*4-4,85);return ; } int award(int& mexp,int& mcash, int& money, int& level, double& exp, string mname,int& hp, int& dmg, double exb){ system("cls"); Color(0); system("mode con cols=50 lines=3"); money+=mcash;exp+=mexp*exb; cout<<"\n "<<mname;message_s("被你击败了");message_s("你获得了");Color(5);cout<<mcash;message_s("个金币");Color(0);cout<<"和";Color(2);cout<<mexp*exb;message_s("个经验");Color(0);cout<<endl; Sleep(1000);system("cls"); for (int i=1;i<=10;i++){ if (exp>=int(5*pow(1.5,level-1))){ exp-=5*pow(1.5,level-1);level+=1; system("mode con cols=50 lines=4"); message_f("\n 你升级了");cout<<endl;init_hp++;init_dodge++;init_exb+=0.05; if (level%3==0){ init_dmg+=1; }}} Sleep(1000);system("cls"); } int fight(int hp, int dmg, int& money , int& level, double& exp,int dodge,double exb){ system("mode con cols=30 lines=10"); int mhp,mdmg,mexp,mcash,mdod;string mname; char action; mob(mname, mhp, mdmg, mexp, mcash, level, mdod); cout<<"\n"; while (true){ action='0'; message_s(" 输入1攻击");cout<<endl; message_s(" 输入2逃跑\n\n "); cin>>action; system("cls"); if (action=='2'){ system("mode con cols=30 lines=3"); message_f("\n 你逃跑了,没得到任何的奖励");cout<<endl;message_f(" 输入任何东西继续:"); cin>>action; system("cls"); return 0; } else if (action=='1'){ if (rand()%100>mdod){ mhp-=dmg; message_f("\n 你对");cout<<mname;message_f("造成了");Color(8);cout<<dmg;Color(0);message_f("伤害");cout<<endl; cout<<" "<<mname;message_s("还剩");Color(8);cout<<mhp+dmg<<"—>"<<mhp;Color(0);message_s("血量");cout<<endl; if (mhp<=0){ award(mexp,mcash,money,level,exp,mname,hp,dmg,exb); break; } } else {message_s("\n 你的攻击被");cout<<mname;message_s("给躲掉了");cout<<endl;} } else{Color(8);message_s(" 你放弃了这次机会");Color(0);} cout<<endl; if (rand()%100>dodge){ hp-=mdmg; cout<<" "<<mname;message_s("对你造成了");Color(8);cout<<mdmg;Color(0);message_s("伤害");cout<<endl<<" ";message_s("你还剩");Color(8);cout<<hp+mdmg<<"—>"<<hp;Color(0);message_s("血量");cout<<endl<<endl; if (hp<=0){ system("cls"); system("mode con cols=25 lines=3"); Color(8);cout<<endl;message_s(" 你被");cout<<mname;message_s("击败了");Color(0); Sleep(2000);system("cls");return 0; } } else{message_s(" 你躲掉了");cout<<mname;message_s("的攻击\n");cout<<endl; } } return 0; } void init(int& hp, int& dmg, int& dodge, double& exb){ hp+=init_hp;dmg+=init_dmg;init_hp=0;init_dmg=0;dodge+=init_dodge;init_dodge=0;if(dodge>60){dodge=60;}exb+=init_exb;init_exb=0;if(exb>3){exb=3;} return ; } int main(){ system("mode con cols=40 lines=3"); int n; Color(0); string name,con; message_s("\n 请输入你的名字:"); getline(cin,name); system("cls"); Player stats; if (name!="superpaperiv"){stats.Name=name;stats.Health=5;stats.Damage=1;stats.Money=0;stats.level=1;stats.exp=0;stats.dodge=10,stats.exb=1.0;}else{stats.Name=name;stats.Health=1000;stats.Damage=1000;stats.Money=10000;stats.level=1;stats.exp=0;stats.dodge=60,stats.exb=3.0;} while (true){ Color(0); system("mode con cols=48 lines=11"); init(stats.Health,stats.Damage,stats.dodge,stats.exb); message_s("\n 输入1开始打怪");cout<<endl;message_s(" 输入2检查数据");cout<<endl;message_s(" 输入3去商店");cout<<endl;message_s(" 输入4查看规则");cout<<endl;message_s(" 输入5查看图鉴");cout<<endl<<endl;message_s(" 请不要乱输入字符串以及字符,这可导致存档丢失!");cout<<endl<<endl;message_s(" 请输入你的操作:"); cin>>n; system("cls"); if (n!=0){ if (n==1){n=0;fight(stats.Health,stats.Damage,stats.Money,stats.level,stats.exp,stats.dodge,stats.exb);} else if (n==2){n=0;ShowStats(stats.Name,stats.Health,stats.Damage,stats.Money,stats.level,stats.exp,stats.dodge,stats.exb);} else if (n==3){n=0;shop(stats.Health,stats.Damage,stats.Money,stats.dodge,stats.exb);} else if (n==4){system("mode con cols=36 lines=8");message_s("\n 打怪升级买装备 死亡不会掉东西");cout<<endl;message_s("\n 升级会增加攻击力和血量");cout<<endl<<endl;message_s("\n --------Superpaper制作--------");Sleep(5000);system("cls");} else if (n==5){system("mode con cols=98 lines=25");n=0;Color(4);message_sf("\n------------------------------------------+===/图鉴\\===+------------------------------------------\n\n TIER 1: \n 史莱姆 : 初始血量:3 初始伤害:1 初始闪避:10 最高闪避:25 初始经验:1 初始金币:1\n 哥布林 : 初始血量:3 初始伤害:1 初始闪避:10 最高闪避:40 初始经验:0 初始金币:5\n 精灵 : 初始血量:3 初始伤害:2 初始闪避:0 最高闪避:10 初始经验:3 初始金币:1\n 小虫子 : 初始血量:3 初始伤害:2 初始闪避:10 最高闪避:85 初始经验:1 初始金币:1\n 保险箱恶灵: 初始血量:10 初始伤害:0 初始闪避:35 最高闪避:35 初始经验:0 初始金币:10\n 小巨人 : 初始血量:4 初始伤害:1 初始闪避:10 最高闪避:30 初始经验:1 初始金币:2\n\n TIER 2: \n 尹子航 : 初始血量:30 初始伤害:2 初始闪避:15 最高闪避:35 初始经验:3 初始金币:5 \n 巨人 : 初始血量:20 初始伤害:4 初始闪避:3 最高闪避:15 初始经验:2 初始金币:5\n 肉球 : 初始血量:8 初始伤害:2 初始闪避:0 最高闪避:5 初始经验:2 初始金币:2\n 恶灵 : 初始血量:40 初始伤害:2 初始闪避:5 最高闪避:30 初始经验:5 初始金币:5\n\n 输入任何东西返回:");cin>>con;} else{system("cls");message_s("请好好输入");cout<<endl;Sleep(1000);system("cls");}n=0;} } }
输出#1