c++自学笔记003-用选择,循环语句编写的模拟关羽和吕布战斗的控制台程序
2019-02-23 17:17
337 查看
#include <iostream> #include <cmath> #include <cstdio> #include <cstdlib> #include <ctime> using namespace std; int main() { //使用循环模拟游戏角色对战过程 //游戏角色双方生命值初始为1000,角色攻击力为100,角色防御为50(即可以减少防御/100)的伤害。 //角色攻击分为普通攻击,蓄力一击,致命一击,分别造成100%,150%,250%的伤害。概率分别为60%,30%,10% //角色每次攻击造成的实际伤害均有波动,范围在80%~120%之间。 //双方角色互相攻击一次为一个回合,回合内每次出招先后顺序随机判定 //在遭受对方先手攻击时,有30%几率闪避此次攻击。 srand(unsigned(time(NULL))); int i=1;//回合数 double r11,r21,r31,r41; //r11 攻击先后顺序,小于0.5角色A先手。r21攻击浮动范围,r31闪避概率判定,大于0.3则判定为有效。否则,被闪躲。r42决定普通攻击还是致命一击 double r12,r22,r32,r42; //同上 double hp1 = 1000.0, hp2 = 1000.0;//AB角色生命值 double attack1 = 100.0, attack2 = 100.0; //角色攻击力 double a1,a2; //角色每次攻击造成的实际伤害值 while (hp1>0 && hp2>0) { cout << endl << endl << endl << endl; cout << "回合:" << i <<endl; i++; r11 = rand()/(RAND_MAX + 1.0); r21 = rand()/(RAND_MAX + 1.0); r31 = rand()/(RAND_MAX + 1.0); r41 = rand()/(RAND_MAX + 1.0); r12 = rand()/(RAND_MAX + 1.0); r22 = rand()/(RAND_MAX + 1.0); r32 = rand()/(RAND_MAX + 1.0); r42 = rand()/(RAND_MAX + 1.0); if(r11>r22) //判断谁先手,是则关羽先手 { while(1) //计算关羽攻击是否命中 { a1 = 100*(0.8+(r21*0.4))/2; //A实际攻击伤害 //cout << a1 << endl; if(r31>=0.3)//判断攻击是否命中,为真则命中。 goto loop1; else { a1=0; hp2 -=a1; cout << "关羽的攻击被闪避了" << endl; cout << endl; break; } } while(1)//判断关羽伤害 { loop1: if(r41<=0.6) { a1 = a1*1; hp2 = hp2 - a1; cout << "关羽发动普通攻击,对吕布造成了" << a1 << "点伤害。" << endl; cout << endl; break; } else if(r41>0.6&&r41<=0.9) { a1 = a1*2.5; hp2 = hp2 - a1; cout << "关羽发动蓄力一击,对吕布造成了" << a1 << "点伤害!" << endl; cout << endl; break; } else if(r41>0.9) a1 = a1*6; hp2 = hp2 - a1; cout << "关羽发动致命一击,对吕布造成了" << a1 << "点伤害。" << endl; cout << endl; break; } if(hp1 <=0 || hp2 <=0) break; cout << "关羽:"<< hp1 << "," << "吕布:" << hp2 << endl; cout << endl; while(1) //计算吕布攻击效果是否命中 { //cout << r11 << "," << r21<< "," << r31<< "," << r41 <<endl; //cout << r12 << "," << r22 << "," << r32<< "," << r42 <<endl; a2 = 100*(0.8+(r22*0.4))/2; //B实际攻击伤害 //cout << a1 <<","<< a2 << endl; if(r32>=0.3)//判断攻击是否命中,为真则命中。 goto loop2; else { a2=0; hp1 -=a2; cout << "吕布的攻击被闪避了" << endl; cout << endl; break; } } while(1)//判断吕布伤害 { loop2: if(r42<=0.6) { a2 = a2*1; hp1 = hp1 - a2; cout << "吕布发动普通攻击,对关羽造成了" << a2 << "点伤害。" << endl; break; } else if(r42>0.6&&r42<=0.9) { a2 = a2*2.5; hp1 = hp1 - a2; cout << "吕布发动蓄力一击,对关羽造成了" << a2 << "点伤害!" << endl; break; } else if(r42>0.9) a2 = a2*6; hp1 = hp1 - a2; cout << "吕布发动致命一击,对关羽造成了" << a2 << "点伤害。" << endl; break; } cout << endl; cout << endl; if(hp1 <=0 || hp2 <=0) break; cout << "关羽:"<< hp1 << "," << "吕布:" << hp2 << endl; cout << endl; } else { while(1) //计算吕布攻击效果是否命中 { //cout << r11 << "," << r21<< "," << r31<< "," << r41 <<endl; //cout << r12 << "," << r22 << "," << r32<< "," << r42 <<endl; a2 = 100*(0.8+(r22*0.4))/2; //B实际攻击伤害 //cout << a1 <<","<< a2 << endl; if(r32>=0.3)//判断攻击是否命中,为真则命中。 goto loop3; else { a2=0; hp1 -=a2; cout << "吕布的攻击被闪避了" << endl; break; } } while(1)//判断吕布伤害 { loop3: if(r42<=0.6) { a2 = a2*1; hp1 = hp1 - a2; cout << "吕布发动普通攻击,对关羽造成了" << a2 << "点伤害。" << endl; cout << endl; break; } else if(r42>0.6&&r42<=0.9) { a2 = a2*2.5; hp1 = hp1 - a2; cout << "吕布发动蓄力一击,对关羽造成了" << a2 << "点伤害!" << endl; cout << endl; break; } else if(r42>0.9) a2 = a2*6; hp1 = hp1 - a2; cout << "吕布发动致命一击,对关羽造成了" << a2 << "点伤害。" << endl; cout << endl; break; } if(hp1 <=0 || hp2 <=0) break; cout << "关羽:"<< hp1 << "," << "吕布:" << hp2 << endl; cout << endl; while(1) //计算关羽攻击是否命中 { a1 = 100*(0.8+(r21*0.4))/2; //A实际攻击伤害 //cout << a1 << endl; if(r31>=0.3)//判断攻击是否命中,为真则命中。 goto loop4; else { a1=0; hp2 -=a1; cout << "关羽的攻击被闪避了" << endl; cout << endl; break; } } while(1)//判断关羽伤害 { loop4: if(r41<=0.6) { a1 = a1*1; hp2 = hp2 - a1; cout << "关羽发动普通攻击,对吕布造成了" << a1 << "点伤害。" << endl; break; } else if(r41>0.6&&r41<=0.9) { a1 = a1*2.5; hp2 = hp2 - a1; cout << "关羽发动蓄力一击,对吕布造成了" << a1 << "点伤害!" << endl; break; } else if(r41>0.9) a1 = a1*6; hp2 = hp2 - a1; cout << "关羽发动致命一击,对吕布造成了" << a1 << "点伤害。" << endl; break; } cout << endl; cout << endl; if(hp1 <=0 || hp2 <=0) break; cout << "关羽:"<< hp1 << "," << "吕布:" << hp2 << endl; cout << endl; } } if(hp1>0) cout << "关羽获胜!剩余" << hp1 << "生命值:" << endl; else cout << "吕布获胜!剩余" << hp2 << "生命值:" << endl; cout << endl; return 0; }
细节上面还有很多不足,先就这样吧,花了我半天时间。。。贴给未来的我看看。
相关文章推荐
- C++第12周报告(一)用循环控制语句编写程序,完成表达式的计算
- C++第14周报告(二)用循环控制语句编写程序,完成表达式的计算
- C++程序设计实验报告(十六)----用循环控制语句编写程序,完成表达式的计算
- C++输出回文数用循环控制语句编写程序,完成表达式的计算
- Python学习笔记(控制台程序):模拟登录
- Java自学笔记(第一天)安装Java8---配置运行环境---编写"hello world"程序---注释
- Linux学习笔记(十) -- 基于Code::Blocks开发调用C++静态链接库的控制台程序
- java学习笔记---循环与选择语句
- 简单编程(六)使用for循环语句 编写程序1+2+3+...........+100
- 黑马程序员_java基础学习笔记02_选择结构和循环语句语句
- 第02章 CORE C++_控制语句_选择_循环_分支_跳出_函数_声明_形参_返回值_重载_递归
- 问题:利用 C++的各种控制语句编写一个万年历程序。 要求:显示任何年份的日历,日历以月份顺序排列,每月以星期顺序排列,类似于一 般挂历上的格式。
- 编译原理语法分析对循环语句和条件判断语句编写词法分析编译程序,只能通过一遍扫描完成
- Linux学习笔记(十七) -- 运行Code::Blocks编写控制台程序,中文显示不完整问题的解决方案
- lua学习笔记---选择,循环语句
- 帮忙写下用for循环语句编写一程序 新手求助
- 10、bash脚本编程之程序语句选择执行、循环执行
- 第4章 流程控制----编写Java程序,使用while循环语句计算1+1/2!+1/3!+...+1/20!之和
- Java学习笔记6——Java控制语句(选择结构、循环结构、break语句和continue语句、带标签的break和continue、语句块)
- 73.笔记 MySQL学习——C编写MySQL程序六交互式语句执行