最近想到了用C++写个小时候课间嘴上玩的那种宝可梦游戏,先试写了个demo,只有早期的三个宝可梦和基础招式,感兴趣的朋友可以再自己添加,也没有各种物防特攻数值啥的,等以后会搞图形化界面了再做个复杂的,功能完善的。
玩法就是选择宝可梦和电脑对战,除了攻击还有三次防御的机会,可以完全抵消对面这轮的攻击,增加了一点博弈的感觉(其实和电脑也没啥好博弈的)
上代码
#include#include #include enum Type {normal,fire,grass,water};//定义招式与pokemon属性 struct Atk//招式结构体 { char name[20];//招式名 int damage;//伤害 Type type;//属性 int speed;//招式速度 int pp; //招式技能点数量 }; Atk def{"def",0,normal,10,3};//防御 struct pokemon//pokemon结构体 { char name[30];//名 int hp;//初始血量 int speed;//pokemon本身速度 Type type;//属性 Atk atk1;//招式1到4 Atk atk2; Atk atk3; Atk atk4; int def;//防御点数 }; void initial(); int choose(int); int AIchoose(int); int p_choose(int,pokemon); int AI_choose(int,pokemon); void duel(pokemon p_pokemon,pokemon AI_pokemmon); double damage_coeff(Type type1,Type type2); int main() { using namespace std; int cont=1;//设定循环游戏的flag while(cont==1) { system("cls");//新游戏开始时清屏 //初始化各个招式与pokemon Atk watergun{"water gun",40,water,2,2};//水枪 Atk quickattack{"quick attack",40,normal,5,3};//电光石火 Atk scratch{"scratch",40,normal,2,8};//抓 Atk bubblebeam{"bubble beam",65,water,1,1};//泡沫光线 Atk razorleaf{"razor leaf",55,grass,3,1};//飞叶快刀 Atk vinewhip{"vine whip",35,grass,4,2};//藤鞭 Atk tackle{"tackle",35,normal,2,10};//撞击 Atk ember{"ember",40,fire,2,1};//火苗 Atk firespin{"fire spin",35,fire,4,2};//火焰旋涡 pokemon bulbasaur{"bulbasaur",200,3,grass,tackle,quickattack,vinewhip,razorleaf,3};//妙蛙种子 pokemon charmander{"charmander",200,2,fire,scratch,quickattack,ember,firespin,3};//小火龙 pokemon squirtle{"squirtle",200,1,water,tackle,quickattack,watergun,bubblebeam,3};//杰尼龟 initial(); pokemon p_pokemon; pokemon AI_pokemon; int Num1,Num2; Num1=choose(Num1); Num2=AIchoose(Num2); //确定双方选择的pokemon switch(Num1) { case 1: p_pokemon=bulbasaur; break; case 2: p_pokemon=charmander; break; case 3: p_pokemon=squirtle; break; } switch(Num2) { case 0: AI_pokemon=bulbasaur; break; case 1: AI_pokemon=charmander; break; case 2: AI_pokemon=squirtle; break; } system("cls"); Sleep(500); cout <<"You choose "< cont; } cin.get(); return 0; } void initial()//初始化界面 { using namespace std; cout <<"Welcome to the pokemon duel!"< >Num; if(Num!=1&&Num!=2&&Num!=3) { cout <<"You choose a wrong number, choose it again:"; Num=choose(Num); } return Num; } int AIchoose(int Num)//电脑选择pokemon,利用随机数让电脑随机选择 { using namespace std; srand((unsigned)time(NULL)); Num = rand() % 3; return Num; } int p_choose(int pchoose,pokemon p_pokemon)//玩家选择招式,利用递归让玩家正确输入 { using namespace std; cin >>pchoose; //判断玩家所选的招式PP是否足够 if(pchoose==1&&p_pokemon.atk1.pp<=0) { cout <<"You don't have enough pp"< 5||pchoose<=0) { cout <<"You choose a wrong number, choose it again:"; pchoose=p_choose(pchoose,p_pokemon); } return pchoose; } int AI_choose(int AIchoose,pokemon AI_pokemon)//利用随机数让电脑随机选择 { using namespace std; srand((unsigned)time(NULL)); AIchoose = rand() % 5; //判断电脑选择招式的PP是否足够 if(AIchoose==0&&AI_pokemon.atk1.pp<=0) { Sleep(1000); AIchoose=AI_choose(AIchoose,AI_pokemon); } if(AIchoose==1&&AI_pokemon.atk2.pp<=0) { Sleep(1000); AIchoose=AI_choose(AIchoose,AI_pokemon); } if(AIchoose==2&&AI_pokemon.atk3.pp<=0) { Sleep(1000); AIchoose=AI_choose(AIchoose,AI_pokemon); } if(AIchoose==3&&AI_pokemon.atk4.pp<=0) { Sleep(1000); AIchoose=AI_choose(AIchoose,AI_pokemon); } if(AIchoose==4&&AI_pokemon.def<=0) { Sleep(1000); AIchoose=AI_choose(AIchoose,AI_pokemon); } return AIchoose; } double damage_coeff(Type type1,Type type2)//计算攻击时伤害加成系数,type1为招式属性,type2为pokemon属性 { if(type1==normal) { return 1; } if(type1==grass) { switch(type2) { case grass: return 0.5; break; case fire: return 0.5; break; case water: return 2; break; } } if(type1==fire) { switch(type2) { case grass: return 2; break; case fire: return 0.5; break; case water: return 0.5; break; } } if(type1==water) { switch(type2) { case grass: return 0.5; break; case fire: return 2; break; case water: return 0.5; break; } } } void duel(pokemon p_pokemon,pokemon AI_pokemmon)//战斗流程函数 { using namespace std; while(p_pokemon.hp>0&&AI_pokemmon.hp>0)//双方HP均大于0时继续战斗 { //显示双方相关信息 cout <<"Your HP:"< 0) { cout <<"You use "< 0) { cout <<"You win!"< 0&&p_pokemon.hp<=0) { cout <<"You have been defeated!"<



