最近想到了用C++写个小时候课间嘴上玩的那种宝可梦游戏,先试写了个demo,只有早期的三个宝可梦和基础招式,感兴趣的朋友可以再自己添加,也没有各种物防特攻数值啥的,等以后会搞图形化界面了再做个复杂的,功能完善的。

玩法就是选择宝可梦和电脑对战,除了攻击还有三次防御的机会,可以完全抵消对面这轮的攻击,增加了一点博弈的感觉(其实和电脑也没啥好博弈的)

上代码

#include<iostream>
#include<windows.h>
#include<ctime>
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到4Atk 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;//设定循环游戏的flagwhile(cont==1){system("cls");//新游戏开始时清屏//初始化各个招式与pokemonAtk 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);//确定双方选择的pokemonswitch(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 "<<p_pokemon.name<<" and your opponent choose "<<AI_pokemon.name<<endl;duel(p_pokemon,AI_pokemon);cout <<"If you want to play another round,enter number 1,or enter others number to quit:"<<endl;cin >>cont;}cin.get();return 0;
}void initial()//初始化界面
{using namespace std;cout <<"Welcome to the pokemon duel!"<<endl;cout <<"Your pokemon has 3 chances to defend.Once you decide to defend,you will not get damage this turn."<<endl;cout <<"But also,you can not attack this turn."<<endl;cout <<"Now choose your pokemon by enter the number:";cout <<"1.bulbasaur 2.charmander 3.squirtle";
}
int choose(int Num)//玩家选择pokemon,利用递归让玩家正确输入
{using namespace std;cin >>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"<<endl;pchoose=p_choose(pchoose,p_pokemon);}if(pchoose==2&&p_pokemon.atk2.pp<=0){cout <<"You don't have enough pp"<<endl;pchoose=p_choose(pchoose,p_pokemon);}if(pchoose==3&&p_pokemon.atk3.pp<=0){cout <<"You don't have enough pp"<<endl;pchoose=p_choose(pchoose,p_pokemon);}if(pchoose==4&&p_pokemon.atk4.pp<=0){cout <<"You don't have enough pp"<<endl;pchoose=p_choose(pchoose,p_pokemon);}if(pchoose==5&&p_pokemon.def<=0){cout <<"You don't have enough pp"<<endl;pchoose=p_choose(pchoose,p_pokemon);}if(pchoose>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:"<<p_pokemon.hp<<" Your opponent's HP:"<<AI_pokemmon.hp<<endl<<endl;cout <<"Choose your action this turn by ernter the number:"<<endl;cout <<"1."<<p_pokemon.atk1.name<<" PP:"<<p_pokemon.atk1.pp<<endl;cout <<"2."<<p_pokemon.atk2.name<<" PP:"<<p_pokemon.atk2.pp<<endl;cout <<"3."<<p_pokemon.atk3.name<<" PP:"<<p_pokemon.atk3.pp<<endl;cout <<"4."<<p_pokemon.atk4.name<<" PP:"<<p_pokemon.atk4.pp<<endl;cout <<"5.deffense PP:"<<p_pokemon.def;Atk this_turn_p_atk;//定义玩家本轮所选招式Atk this_turn_AI_atk;//定义电脑本轮所选招式int pchoose;pchoose=p_choose(pchoose,p_pokemon);int AIchoose;AIchoose=AI_choose(AIchoose,AI_pokemmon);switch(pchoose){case 1:p_pokemon.atk1.pp=p_pokemon.atk1.pp-1;this_turn_p_atk=p_pokemon.atk1;break;case 2:p_pokemon.atk2.pp=p_pokemon.atk2.pp-1;this_turn_p_atk=p_pokemon.atk2;break;case 3:p_pokemon.atk3.pp=p_pokemon.atk3.pp-1;this_turn_p_atk=p_pokemon.atk3;break;case 4:p_pokemon.atk4.pp=p_pokemon.atk4.pp-1;this_turn_p_atk=p_pokemon.atk4;break;case 5:p_pokemon.def=p_pokemon.def-1;this_turn_p_atk=def;break;}switch(AIchoose){case 0:AI_pokemmon.atk1.pp=AI_pokemmon.atk1.pp-1;this_turn_AI_atk=AI_pokemmon.atk1;break;case 1:AI_pokemmon.atk2.pp=AI_pokemmon.atk2.pp-1;this_turn_AI_atk=AI_pokemmon.atk2;break;case 2:AI_pokemmon.atk3.pp=AI_pokemmon.atk3.pp-1;this_turn_AI_atk=AI_pokemmon.atk3;break;case 3:AI_pokemmon.atk4.pp=AI_pokemmon.atk4.pp-1;this_turn_AI_atk=AI_pokemmon.atk4;break;case 4:AI_pokemmon.def=AI_pokemmon.def-1;this_turn_AI_atk=def;break;}system("cls");//判断是否有玩家本轮采取防御if(AIchoose==4&&pchoose!=5){cout <<"You use "<<this_turn_p_atk.name<<".";Sleep(500);cout <<"But your attack was defended!"<<endl;}else if(pchoose==5&&AIchoose!=4){cout <<"Your opponent use "<<this_turn_AI_atk.name<<".";Sleep(500);cout <<"But you defend the attack from the opponent!"<<endl;}else if(pchoose==5&&AIchoose==4){cout <<"You both defend this turn."<<endl;Sleep(250);}else//双方都没有防御的情况{int p_speed,AI_speed;double p_coeff,AI_coeff;//真正的速度为pokemon本身速度加招式速度p_speed=p_pokemon.speed+this_turn_p_atk.speed;//本轮玩家真正的速度AI_speed=AI_pokemmon.speed+this_turn_AI_atk.speed;//本轮电脑真正的速度//计算伤害系数p_coeff=damage_coeff(this_turn_p_atk.type,AI_pokemmon.type);AI_coeff=damage_coeff(this_turn_AI_atk.type,p_pokemon.type);//比较双方谁本轮速度快,判断先手if(AI_speed>p_speed){cout <<"Your opponent use "<<this_turn_AI_atk.name<<" !"<<endl;Sleep(500);p_pokemon.hp=p_pokemon.hp-this_turn_AI_atk.damage*AI_coeff;//计算收到的伤害,伤害为招式伤害乘以伤害系数if(p_pokemon.hp<=0){cout <<"You have been defeated!"<<endl;}else if(p_pokemon.hp>0){cout <<"You use "<<this_turn_p_atk.name<<" !"<<endl;Sleep(500);AI_pokemmon.hp=AI_pokemmon.hp-this_turn_p_atk.damage*p_coeff;if(AI_pokemmon.hp<=0){cout <<"You win!"<<endl;}    }}else if(AI_speed<p_speed){cout <<"You use "<<this_turn_p_atk.name<<" !"<<endl;Sleep(500);AI_pokemmon.hp=AI_pokemmon.hp-this_turn_p_atk.damage*p_coeff;if(AI_pokemmon.hp<=0){cout <<"You win!"<<endl;}else{cout <<"Your opponent use "<<this_turn_AI_atk.name<<" !"<<endl;Sleep(500);p_pokemon.hp=p_pokemon.hp-this_turn_AI_atk.damage*AI_coeff;if(p_pokemon.hp<=0){cout <<"You have been defeated!"<<endl;}}}else if(AI_speed==p_speed){cout <<"You both attack at the same time!"<<endl;Sleep(500);cout <<"You use "<<this_turn_p_atk.name<<" !"<<endl;Sleep(500);cout <<" Your opponent use "<<this_turn_AI_atk.name<<" !"<<endl;Sleep(500);p_pokemon.hp=p_pokemon.hp-this_turn_AI_atk.damage*AI_coeff;AI_pokemmon.hp=AI_pokemmon.hp-this_turn_p_atk.damage*p_coeff;if(AI_pokemmon.hp<=0&&p_pokemon.hp>0){cout <<"You win!"<<endl;}else if(AI_pokemmon.hp>0&&p_pokemon.hp<=0){cout <<"You have been defeated!"<<endl;}else if(AI_pokemmon.hp<=0&&p_pokemon.hp<=0){cout <<"Draw game!";}}}}
}

C++编写的简易宝可梦对战小游戏相关推荐

  1. Java简易版的对战小游戏(主题是三国类游戏对战)

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言 提示:今天写一个简易版的Java对战小游戏(主题是三国类游戏对战): 需要先写一个Person类(代表人),然后写一个 ...

  2. c语言精灵宝可梦对战游戏,精灵宝可梦:把游戏中的对战高玩,放到动画的世界里会是什么位置...

    <精灵宝可梦>系列,又名宠物小精灵.神奇宝贝.这可不仅仅是一代人的童年回忆,更是一部无论是游戏还是动漫都真正畅销全世界的作品.特别是游戏系列更是如此,纵观全世界,如果说能有一个游戏让大家有 ...

  3. Python Pygame 实现宝可梦对战场面

    宝可梦游戏是小时候最喜欢的掌机游戏之一,印象最深刻的是宝可梦(黄).宝可梦(金.银)还有红蓝宝石.游戏的设计很出色,画面精致,可以说是是掌机时代的代表了. 本篇文章使用Pygame实现宝可梦的战斗场景 ...

  4. Python编写人机对战小游戏(抓狐狸)(2)

    封面图片:<中学生可以这样学Python>,董付国.应根球著,清华大学出版社 =========== 很久很久以前,在公众号里推送过一个抓狐狸游戏,详见Python编写人机对战小游戏(抓小 ...

  5. java实现游戏对战过程_【Java实战】Java实现简易坦克对战小游戏

    //此程序用来实现一个简易的坦克对战小游戏! //Version:1.0 // @Author:Yongchun_zha package cha09; import javax.swing.*; im ...

  6. 【Java实战】Java实现简易坦克对战小游戏

    摘要:前期学习了Java入门的相关基础,现在通过这个小项目来熟悉巩固所学.该程序主要实现了一个简易的坦克对战小游戏,提供UI界面 //此程序用来实现一个简易的坦克对战小游戏! //Version:1. ...

  7. 如何编写和精灵宝可梦一样的 app?

    原文:How To Make An App Like Pokemon Go 作者:Jean-Pierre Distler 译者:kmyhy 如今最流行的一个手机游戏就是精灵宝可梦.它使用增强现实技术将 ...

  8. 给终端装上宝可梦主题!小姐姐路过都爱上了!

    大家好,我是TJ 一个励志推荐10000款开源项目与工具的程序员 就算不怎么玩游戏看动漫的小伙伴,多多少少也应该知道宠物小精灵,按现在的叫法,就是精灵宝可梦,知道那只黄色的会放电的看着毛茸茸超可爱的只 ...

  9. c语言精灵宝可梦对战游戏,精灵宝可梦究极日月模拟器金手指代码大全

    <精灵宝可梦究极日月>终于迎来了它的发售,相信许多玩家对于这款游戏的素质还是不用怀疑的吧.不过由于游戏的内容实在是太过丰富,许多玩家表示在游戏中许多要素都没法体验尽兴,以下就给大家分享具体 ...

最新文章

  1. 关于Transformer,那些的你不知道的事
  2. SAP QM 通过控制图 (Control Chart) 的实现提升企业质量管理水平
  3. 【 MATLAB 】使用 MATLAB 求某输入的稳态响应
  4. 博客网站源代码_网站建设技术--WORDPRESS
  5. Springboot 请求数据
  6. node.js mysql防注入_避免Node.js中的命令行注入安全漏洞
  7. c语言中 %s 占几个字节,printf(%*s%s%*s,——)是什么?
  8. 清除sqlserver日志方法(不适合always on)
  9. docker 运行mysql镜像_docker 生成mysql镜像启动时自动执行sql
  10. 【Mysql】存储emoji表情报错(Incorrect string value: ‘\xF0\x9F\x98\x82\xF0\x9F...‘)的解决方案
  11. Java实现自动映射原生JDBC查询出的数据库字段
  12. 8个PNG素材网站,每一个都让你觉得人生发亮
  13. Dennis Gabor与全息摄影
  14. android无法识别手机号码,Android手机号码获取问题
  15. 微信公众号整套逻辑的支付和退款
  16. 真·007!核酸采样机器人现身郑州;Python3面试准备与速查表;实时语音转文字工具库;AI绘画根据文本创建纹理;前沿论文 | ShowMeAI资讯日报
  17. 实现愤怒的小鸟:我们有很多种小鸟(Bird类),每种小鸟都有飞的行为(fly()方法),还有一个弹弓(Slingshot类),弹弓有一个弹射的行为(shot()方法:调用fly()方法)
  18. html伸缩布局,HTML-CSS:伸缩布局
  19. 北京智和信通受邀出席2022IT运维大会,荣获“2022智能运维星耀榜最具影响力企业”
  20. 【Unity】Inspector属性

热门文章

  1. 抖音账号矩阵系统源码搭建开发部署分析
  2. Linux系统克隆和快照
  3. MATLAB中eps使用
  4. 妖精的尾巴等待服务器响应,妖精的尾巴手游排队掉线、服务器断开、登录失败问题解决方法[多图]...
  5. CodingHorror终极开发人员钻机降落:第2部分
  6. 36岁转行学java_年纪大了还想转行当程序员,现在学java还来得及吗
  7. reactnative打包apk报错:failed parsing overlays.
  8. ubuntu net-tools
  9. 展厅智能中央控制服务器,展厅智能照明管理系统-智能中央控制系统
  10. 告别单身+成就霸业,男人们必知的人生定律