C++里面程序设计实践里面石头剪刀布版的王者农药实例:

算法分析:

我们需要构造一个英雄类,里面包含英雄的名字,使用次数以及血量(由于第一次使用,所以暂时没有血量)`

class Hero {private:string name;int times;int blood;
public:Hero();Hero(string n, int t, int b) {name = n; times = t; blood = b;}void CreateHero();void PlayGames();bool isWin(int a, int b);bool isEnd(int a);int Score(int a,int b,int c);void Game();void Start();void Rules();
};

调用构造函数:

Hero::Hero() {}
Hero hero[N] = { Hero("赵云",10,120),Hero("宫本武藏",10,120),Hero("凯",10,120),Hero("白起",10,120),Hero("韩信",10,120),Hero("诸葛亮",10,120),Hero("刘邦",10,120),Hero("妲己",10,120),Hero("安琪拉",10,120),Hero("貂蝉",10,120),Hero("露娜",10,120),Hero("不知火舞",10,120),Hero("蔡文姬",10,120),Hero("鲁班七号",10,120),Hero("后羿",10,105),Hero("扁鹊",10,115),Hero("马可波罗",10,150),Hero("李白",10,150),Hero("关羽",10,160),Hero("曹操",10,100)};
void Hero::CreateHero() {cout << "序号" << " " << "名字" << " " << "次数" << " " << "血量" << endl;for (int i = 0; i < N; i++) {if (hero[i].times == 0) hero[i].times += 10;cout <<" "<< i+1 << ":"<<hero[i].name << "," << hero[i].times <<  "," <<hero[i].blood << endl;}

关键部分需要

以上是进行初始化以及英雄的创建
现在开始玩游戏以及正片。
首先定义招法:石头剪刀布,参照所学知识以及翻阅相应资料得:

const int N = 20;//这里由于有20个英雄所以就这么定义无法修改。以免混淆
enum Choice{Rocks,Scissors,Papers};
enum Result{You,Me,Tie};

游戏主算法:

void Hero::PlayGames() {Hero *h;h = hero;//int x, y, z;Choice machine, index; Result winner = You;int count1 = 0, count2 = 0,count3 = 0;int count = 0;int b[5];int x = 0;int c;cout << "Please input the number of players to start 3 or 5" << endl;cin >> c;cout << "please make your choice except for machine that has chosen form hero" << endl;for (int j = 0; j < c; j++)cin >> b[j];for (int j = 0; j < c; j++)cout << h[b[j]-1].name << ","<<h[b[j]-1].times << ","<<h[b[j]-1].blood << endl;int i;//上述部分是建立游戏的开始switch (c) {case 3:cout << "Please input n for the first player." << endl;cin >> i;system("cls");switch (i) {case 1:cout << h[b[0] - 1].name << "," << h[b[0] - 1].times << "," << h[b[0] - 1].blood << endl;break;case 2:cout << h[b[1] - 1].name << "," << h[b[1] - 1].times << "," << h[b[1] - 1].blood << endl;break;case 3:cout << h[b[2] - 1].name << "," << h[b[2] - 1].times << "," << h[b[2] - 1].blood << endl;break;}break;
case 5:cout << "Please input n for the first player." << endl;cin >> i;system("cls");switch (i) {case 1:cout << h[b[0] - 1].name << "," << h[b[0] - 1].times << "," << h[b[0] - 1].blood << endl;break;case 2:cout << h[b[1] - 1].name << "," << h[b[1] - 1].times << "," << h[b[1] - 1].blood << endl;break;case 3:cout << h[b[2] - 1].name << "," << h[b[2] - 1].times << "," << h[b[2] - 1].blood << endl;break;case 4:cout << h[b[3] - 1].name << "," << h[b[3] - 1].times << "," << h[b[3] - 1].blood << endl;break;case 5:cout << h[b[4] - 1].name << "," << h[b[4] - 1].times << "," << h[b[4] - 1].blood << endl;break;}break;}//选择三人模式还是五人模式
system("pause");cout << "Start now" << endl;//以下是正片while (true) {string str;char ch;char winner='M';cout << h[b[i - 1]-1].name << "," << h[b[i - 1]-1].times << "," << h[b[i - 1]-1].blood << endl;cout << "Press R/P/S to VS.(R for Rocks,P for Paper and S for Scissors)" << endl;cin >> ch;//人工操作switch (ch) {case 'R':case 'r':index = Rocks;break;case 'P':case 'p':index = Papers;break;case 'S':case 's':index = Scissors;break;default:continue;}int n = rand() % 3;switch (n)//机器输入{case 0:machine = Scissors; str = "Scissors";break;case 1:machine = Papers; str = "Papers";break;case 2:machine = Rocks; str = "Rocks";break;}cout << str << endl;if (index == Scissors && machine == Rocks || index == Rocks && machine == Papers || index == Papers && machine == Scissors)//判断胜负的算法winner = You;else if (index == Scissors && machine == Papers || index == Papers && machine == Rocks || index == Rocks && machine == Scissors)winner = Me;else if (index == machine)winner = Tie;switch (winner) {case Me:cout << "You Win!" << endl << endl; count1++; break;case You:cout << "You Lose!" << endl << endl; count2++; break;case Tie:cout << "It is a tie!" << endl << endl; count3++; break;}h[b[i-1]-1].times--;if (h[b[i-1]-1].times == 0 ) {for (int j = 0; j < c; j++) {if (h[b[j]-1].times == 0)cout << (j + 1) << "," << h[b[j]-1].name << "OUT!" << endl;}cout << "You have just used all your chances for your current hero! make your choice.\a" << endl;cin >> i;count++;if (i != 1 && i != 2 && i != 3 && h[b[i-1]-1].times==0) continue;//以防重复选取}if (count==c) break;x++;if( x % 7 == 0 )//由于会有太多,所以清个屏system("cls");}int total = Score(count1, count2, count3);cout << "You have just won " << total << " points" << endl;//判断得分if (isWin(count1, count2))//判断胜负cout << "You Win!" << endl;elsecout << "You Lose!" << endl;
}

其他函数辅助

1.开始函数(进行开始界面)

void Hero::Start() {cout << "Press numbers to choose menu." << endl;cout << "1.Start game" << endl;cout << "2.Record" << endl;cout << "3.Rules" << endl;Hero hero;int a;cin >> a;switch (a) {case 1:system("cls");hero.Game();break;case 2:break;case 3:system("cls");hero.Rules();break;}
}

就是怎么来让已经使用的英雄招法次数恢复默认有点问题,我只能使用加回去方法,恳请诸位大佬进行指点江山。

2.进行相应函数创建

void Hero::Rules() {cout << "It is like RPS games." << endl;cout << "R is for Rocks." << endl;cout << "P is for Paper." << endl;cout << "S is for Scissors" << endl;cout << "According to the rules for RPS to judge win or lose to calculate marks." << endl;
}
bool Hero::isWin(int a, int b) {//判断你输了还是你赢了return a > b;
}
bool Hero::isEnd(int a) {//当最后一名玩家招法用完时候游戏结束,即次数够了就结束了return a == 0;
}
void Hero::Game() {//游戏创建this->CreateHero();this->PlayGames();
}
int Hero::Score(int a, int b,int c) {//分数计算方法int sum=0;sum = a * 5 - b * 3 + c * 2;return sum;
}

主函数

主函数由于不要太长就这样了

int main()
{char ch='x';char b;while (true) {cout << "\t\t\t\tRPS for 王者农药 1.0.9 version" << endl;cout << "\t\t\t\t-------Author YYH" << endl;cout << "\t\t\t\tPress random button for start" << endl;_getch();//按任意键进行开始while (ch == 'x') {Hero hero;//建立一个hero对象system("cls");hero.Start();//游戏进行cout << "Continue?(Y for yes N for no)" << endl;//游戏结束cin >> b;if (b == 'n' || b == 'N')break;}cout << "Press E for exit game." << endl;char a;cin >> a;if (a == 'E' || a == 'e')exit(0);//程序退出else continue;}return 0;
}

这是我第一次上传博客,基于程序设计实践进行的操作,是我学习C++一个月以来进行的,里面仍有不完善的地方,恳请诸位大佬指点江山,非常感谢各位大佬进行指点,如果有意见,恳请留言或发送邮箱至2455219437@qq.com

C++程序设计实践里面石头剪刀布版王者农药实例相关推荐

  1. RoboMaster 2017:机器人版的「王者农药」,工程师们的竞技时代

    8月6日晚,第十六届全国大学生机器人大赛 RoboMaster 2017机甲大师赛在华润深圳湾体育中心"春茧"体育馆举行,关于这个比赛的盛况已经无需赘述,去年雷锋网参加上届比赛时, ...

  2. 王者荣耀(王者农药)小程序版加符文模拟器我来了

    王者荣耀(王者农药)小程序版加铭文模拟器我来了 欢迎一起观摩探讨交流[ 大家赶快来@一下吧 ]

  3. 以实用著称的《PHP与MySQL程序设计(第3版)》问世啦!

    <PHP与MySQL程序设计(第3版)> 最好的编程图书应该不是纯粹地讲述理论,而是要切合实际.作者在写书过程中,一直都以此为目标,努力让所写的内容能用到实处.以本书的篇幅来看,很明显,他 ...

  4. python语言程序设计实践教程答案实验六_Python程序设计实践教程

    书名:Python程序设计实践教程 定价:29.8 ISBN:9787115532602 作者:储岳中 薛希玲 版次:*1版 出版时间:2020-04 内容提要: 本书是Python语言程序设计的配套 ...

  5. python程序设计实践教程答案-Python程序设计实践教程

    书名:Python程序设计实践教程 定价:29.8 ISBN:9787115532602 作者:储岳中 薛希玲 版次:*1版 出版时间:2020-04 内容提要: 本书是Python语言程序设计的配套 ...

  6. java程序设计 第三版_清华大学出版社-图书详情-《Java语言程序设计(第3版)》...

    第3版前言 Java语言是目前应用最广泛的编程语言之一,学习和使用Java的人越来越多.为了帮助初学者尽快掌握Java编程,感受到Java语言的魅力,领会到Java编程的快乐,笔者根据长期Java授课 ...

  7. 《Oracle PL/SQL程序设计(第5版)》一一2.4 执行必要的PL/SQL任务

    本节书摘来自异步社区出版社<Oracle PL/SQL程序设计(第5版)>一书中的第2章,第2.4节,作者:[美]Steven Feuerstein , Bill Pribyl,更多章节内 ...

  8. java6程序设计实践教程_Java 6 程序设计实践教程

    本书当前实时库存为: 本 书名:Java程序设计与实践教程 ISBN:9787115360458 出版社:人民邮电出版社 作者:张勇 页数:218 出版日期:2014年09月 参考重量:0.330Kg ...

  9. JavaScript语言精髓与编程实践(第2版)

    JavaScript语言精髓与编程实践(第2版)  周爱民 著 ISBN 978-7-121-15640-3 2012年3月出版 定价:79元 16开 476页 宣传语:以JavaScript视角看整 ...

最新文章

  1. CentOS内核优化提示:cannot stat /proc/sys/net/bridge/bridge-nf-call-ip6tables: 没有那个文件或目录...
  2. 1.Hadoop初步环境搭建(ssh无密码通信)
  3. POJ 1523 SPF 割点与桥的推断算法-Tarjan
  4. grldr 和 grldr.mbr 区别
  5. 【问链财经-区块链基础知识系列】 第二十一课 区块链应用于大宗商品供应链金融
  6. c#图片base64去转义字符_C#实现字符串与图片的Base64编码转换操作示例
  7. ZOJ 1048|POJ 1004|HDU1064 Financial Management
  8. JavaScript学习笔记07【6个经典案例——电灯开关、轮播图、自动跳转首页、动态表格、表格全选、表单验证】
  9. LeetCode MySQL 1212. 查询球队积分
  10. 论文浅尝 | 知识图谱相关实体搜索
  11. php日志缓存,php – Symfony和Docker – 缓存和日志目录权...
  12. oracle数据库建表、修改字段名称类型、增加字段、ID自动增长写法
  13. windows系统bat批处理 一键配置java jdk环境变量
  14. C++ vector 类学习笔记(转)
  15. python从字符串中删除字符_在Python中从字符串中删除字符
  16. 区间直觉模糊集相似度及matlab应用
  17. android打印机驱动4521,三星scx4521f驱动下载
  18. 第五人格显示服务器维护中请稍后登录怎么办,《第五人格》未知异常 请稍后重试登不上去如何解决...
  19. 质量评估:如何全面评价一份数据的质量高低?
  20. 我能够快速读书的秘密:主要靠“猜”!

热门文章

  1. 邵老师计算机,《计算机公课核心讲义》—邵老师主编.doc
  2. 告别2022,重新出发
  3. jsp上传文件到服务器
  4. 区块链基于WebSocket 构建P2P网络
  5. IOS开发之滤镜 CIImage、CIFilter
  6. idea maven项目无法下载自定义的仓库完美解决办法
  7. Ping通Tlenet不通,如何解决?
  8. Lenovo启天M437 黑苹果efi引导文件
  9. Pyqt qtableview 大量动态刷新数据
  10. java断路器原理_Netflix Hystrix断路器原理分析