陕西咸阳做网站的公司,手机如何做软件,网站建设品牌策,wordpress页面文本编辑器说明#xff1a;一年前写的作业#xff0c;感觉挺有意思的#xff0c;将源码分享给大家。 刚开始看题也觉得很难#xff0c;不过写着写着思路更加清晰#xff0c;发现也没有想象中的那么难。
一、作业题目描述#xff1a;
题目#xff1a;模拟游戏玩家战斗
1.1 基础功…说明一年前写的作业感觉挺有意思的将源码分享给大家。 刚开始看题也觉得很难不过写着写着思路更加清晰发现也没有想象中的那么难。
一、作业题目描述
题目模拟游戏玩家战斗
1.1 基础功能描述
假设有两个玩家控制的角色 A 和 B存在一个怪物 MA 和 B 的任务是要击败怪物 M获得胜利。A、B 和 M 的信息如下角色 A 生命值100 初始攻击力数值10一次只攻击一个目标初始防御力数值2 当前经验值1000
当前等级10 攻击目标时触发暴击的概率为 20%触发后攻击力增加 50% 受击时触发护盾的概率为 20%触发后防御力增加 10% 角色 B 生命值110 初始攻击力数值12一次只攻击一次目标 初始防御力数值3 当前经验值2000 当前等级15 攻击目标时触发暴击的概率为 25%触发后攻击力增加 30% 受击时触发护盾的概率为 30%触发后防御力增加 15% 怪物 M
生命值200 初始攻击力数值8一次攻击可对多个目标造成同等伤害 初始防御力数值5 攻击目标时触发暴击的概率为 20%触发后攻击力增加 50% 受击时触发护盾的概率为 10%触发后防御力增加 10% 1.2 奖励功能描述 只有角色战斗胜利时才可发放奖励。 奖励有两种方案rwd-a 和 rwd-b其中触发 rwd-a 的概率是 40%触发 rwd-b 的概率是 60% 奖励方案 rwd-a 在以下 5 种物品中根据概率抽取一个奖励给玩家同时获得 200*当前等级 的经验值。物品列表和概率如下 物品 概率 金刚石 20% 红宝石 20% 乾坤袋 10% 如意丹 20% 金柳露 30% 奖励方案 rwd-b 在以下 6 种奖励中根据概率抽取一个奖励给玩家同时获得 100*当前等级 的经验值。物品列表和概率如下 物品 概率 净瓶甘露 10% 人参果 10% 藏宝图 30% 黑宝石 20% 上古灵符 15% 避水珠 15%
1.3 战斗规则
从 main 方法主入口开启模拟战斗 当怪物 M 的生命值为 0 时战斗胜利调用奖励系统给角色 A 和 B 发放奖励发放逻辑见上述的奖励系统描述程序结束 当角色 A 和 B 的生命值都为 0 时战斗失败程序结束 当某个对象生命值为 0且战斗未结束时该对象不能再进行攻击 每次被攻击对象受到的伤害值 攻击者当前的攻击力 – 被攻击者当前的防御力 同时攻击力和暴击概率有关防御力和护盾概率有关每次攻击时要重新计算伤害值 A、B 和 M 每次的出手攻击顺序可以指定顺序也可以随机顺序 1.4 作业要求
使用 Java 面向对象的程序设计方式包含封装、继承和多态特性模拟实现上述战斗逻辑 将每次攻击的过程A、B 和 M 的攻击力防御力受到攻击的伤害值和剩余的生命值以及攻击对象打印出来输出格式不限但要清晰直观 战斗胜利时可自行调整数值一定要跑到一次战斗胜利将奖励信息打印出来包括调用了哪种奖励方案最终获得了哪些奖励输出格式不限但要清晰直观 二、写作业
说明当时只想着快点写完所以写的比较冗余各角色的操作直接写在了Main.java中了最后也是用了一个多小时完成了。
2.1 文件格式
|---- gameFight |---- src |---- role |---- role.java |---- roleMonster.java |---- rolePlayer.java |---- Main.java 2.2 代码
2.2.1 role.java
package role;public class role {private String name;private float health; //生命值private float primaryAttack; //初始攻击力private float pirmaryDefense; //初始防御private float criticalAttack; //暴击时的攻击力private float criticalDefense; //触发防御加强public String getName() {return name;}public void setName(String name) {this.name name;}public float getHealth() {return health;}public void setHealth(float health) {this.health health;}public float getPrimaryAttack() {return primaryAttack;}public void setPrimaryAttack(float primaryAttack) {this.primaryAttack primaryAttack;}public float getPirmaryDefense() {return pirmaryDefense;}public void setPirmaryDefense(float pirmaryDefense) {this.pirmaryDefense pirmaryDefense;}public float getCriticalAttack() {return criticalAttack;}public void setCriticalAttack(float criticalAttack) {this.criticalAttack criticalAttack;}public float getCriticalDefense() {return criticalDefense;}public void setCriticalDefense(float criticalDefense) {this.criticalDefense criticalDefense;}}2.2.2 roleMonster.java
package role;public class roleMonster extends role{public roleMonster(String name,float health,float primaryAttack,float primaryDefense,float criticalAttack,float criticalDenfense) {this.setName(name);this.setHealth(health);this.setPrimaryAttack(primaryAttack);this.setPirmaryDefense(primaryDefense);this.setCriticalAttack(criticalAttack);this.setCriticalDefense(criticalDenfense);}}2.2.3 rolePlayer.java
package role;public class rolePlayer extends role{private int experience; //当前经验值private int grade; //当前等级public rolePlayer(String name,float health,float primaryAttack,float primartDefense,int experience, int grade ,float criticalAttack,float criticalDenfense) {this.setName(name);this.setHealth(health);this.setPrimaryAttack(primaryAttack);this.setPirmaryDefense(primartDefense);this.experience experience;this.grade grade;this.setCriticalAttack(criticalAttack);this.setCriticalDefense(criticalDenfense);}public int getExperience() {return experience;}public void setExperience(int experience) {this.experience experience;}public int getGrade() {return grade;}public void setGrade(int grade) {this.grade grade;}}2.2.4 Main.java
import role.roleMonster;
import role.rolePlayer;import java.util.Random;public class Main {public static void main(String[] args) {//创建玩家roleA,roleB 怪兽roleMroleMonster roleM new roleMonster(roleM,200,8,5, (float) (8*1.5), (float) (5*1.1));rolePlayer roleA new rolePlayer(roleA,100,10,2,1000,10,(float)(10*1.5),(float)(2*1.1));rolePlayer roleB new rolePlayer(roleB,110,12,3,2000,15,(float) (12*1.3),(float) (3*1.15));//战斗过程fightProcess(roleA,roleB,roleM);//结束战斗过程后如果怪兽roleM的生命值还大于0则存活说明玩家被怪兽打败玩家拿不到奖励if (roleM.getHealth()0){System.out.println(战斗失败);}else{System.out.println(战斗成功);//结束战斗后如果玩家roleA还存活则获得奖品getReward(roleA);//结束战斗后如果玩家roleB还存活则获得奖品getReward(roleB);}}//p1代表攻击目标时触发暴击的概率,因为p的取值为为0-1,如果p1大于p的取值范围则不触发小于等于则触发static boolean raiseAttack(double p1){Random rand new Random();float p rand.nextFloat();if(pp1){return false;}else{return true;}}//p2代表受击时触发护盾的概率,因为p的取值为为0-1,如果p2大于p的取值范围则不触发小于等于则触发static boolean raiseDefense(double p2){Random rand new Random();float p rand.nextFloat();if(pp2){return false;}else{return true;}}static void fightProcess(rolePlayer roleA,rolePlayer roleB,roleMonster roleM){boolean raiseAttack;boolean raiseDefense;//结束条件是玩家roleA和玩家roleB的都为死亡状态或者怪兽roleM为死亡状态 (血量同时小于等于0为死亡状态)while((roleA.getHealth()0||roleB.getHealth()0)roleM.getHealth()0){//因为可以指定攻击顺序这里我就让指定攻击顺序为roleA,roleB,roleM//如果玩家roleA存在和怪兽roleM都存在,roleA才能对怪兽roleM进行攻击if(roleA.getHealth()0roleM.getHealth()0){raiseAttackraiseAttack(0.2); //roleA攻击目标时触发暴击的概率为 20%raiseDefenseraiseDefense(0.1); //roleM受击时触发护盾的概率为 10%//如果roleA不触发暴击攻击和roleM不触发提高防御if(!raiseAttack !raiseDefense){roleM.setHealth(roleM.getHealth()-(roleA.getPrimaryAttack()-roleM.getPirmaryDefense()));printProcess(roleA,roleM,000);}//如果roleA不触发暴击攻击和roleM触发提高防御if(!raiseAttack raiseDefense) {roleM.setHealth(roleM.getHealth()-(roleA.getPrimaryAttack()-roleM.getCriticalDefense()));printProcess(roleA,roleM,001);}//如果roleA触发暴击攻击和roleM不触发提高防御if(raiseAttack !raiseDefense){roleM.setHealth(roleM.getHealth()-(roleA.getCriticalAttack()-roleM.getPirmaryDefense()));printProcess(roleA,roleM,010);}//如果roleA触发暴击攻击和roleM触发提高防御if(raiseAttack raiseDefense){roleM.setHealth(roleM.getHealth()-(roleA.getCriticalAttack()-roleM.getCriticalDefense()));printProcess(roleA,roleM,011);}}//如果玩家roleB存在和怪兽roleM都存在,roleB才能对怪兽roleM进行攻击if(roleB.getHealth()0roleM.getHealth()0){raiseAttackraiseAttack(0.25); //roleB攻击目标时触发暴击的概率为 25%raiseDefenseraiseDefense(0.1); //roleM受击时触发护盾的概率为 10%//如果roleB不触发暴击攻击和roleM不触发提高防御if(!raiseAttack !raiseDefense){roleM.setHealth(roleM.getHealth()-(roleB.getPrimaryAttack()-roleM.getPirmaryDefense()));printProcess(roleB,roleM,000);}//如果roleB不触发暴击攻击和roleM触发提高防御if(!raiseAttack raiseDefense){roleM.setHealth(roleM.getHealth()-(roleB.getPrimaryAttack()-roleM.getCriticalDefense()));printProcess(roleB,roleM,001);}//如果roleB触发暴击攻击和roleM不触发提高防御if(raiseAttack !raiseDefense){roleM.setHealth(roleM.getHealth()-(roleB.getCriticalAttack()-roleM.getPirmaryDefense()));printProcess(roleB,roleM,010);}//如果roleB触发暴击攻击和roleM触发提高防御if(raiseAttack raiseDefense){roleM.setHealth(roleM.getHealth()-(roleB.getCriticalAttack()-roleM.getCriticalDefense()));printProcess(roleB,roleM,011);}}//若怪兽还存活则进行攻击玩家,玩家roleA还存活则受到怪兽roleM的攻击if(roleM.getHealth()0roleA.getHealth()0){raiseAttackraiseAttack(0.2); roleM攻击目标时触发暴击的概率为 20%raiseDefenseraiseDefense(0.2); //roleA受击时触发护盾的概率为 20%//如果roleM不触发暴击攻击和roleA不触发提高防御if(!raiseAttack !raiseDefense){roleA.setHealth(roleA.getHealth()-(roleM.getPrimaryAttack()-roleA.getPirmaryDefense()));printProcess(roleA,roleM,100);}//如果roleM不触发暴击攻击和roleA触发提高防御if(!raiseAttack raiseDefense){roleA.setHealth(roleA.getHealth()-(roleM.getPrimaryAttack()-roleA.getCriticalDefense()));printProcess(roleA,roleM,101);}//如果roleM触发暴击攻击和roleA不触发提高防御if(raiseAttack !raiseDefense){roleA.setHealth(roleA.getHealth()-(roleM.getCriticalAttack()-roleA.getPirmaryDefense()));printProcess(roleA,roleM,110);}//如果roleM触发暴击攻击和roleA触发提高防御if(raiseAttack raiseDefense){roleA.setHealth(roleA.getHealth()-(roleM.getCriticalAttack()-roleA.getCriticalDefense()));printProcess(roleA,roleM,111);}}//若怪兽还存活则进行攻击玩家,玩家roleB还存活则受到怪兽roleM的攻击if(roleM.getHealth()0roleB.getHealth()0){raiseAttackraiseAttack(0.2); //roleM攻击目标时触发暴击的概率为 20%raiseDefenseraiseDefense(0.3); //roleB受击时触发护盾的概率为 30%//如果roleM不触发暴击攻击和roleB不触发提高防御if(!raiseAttack !raiseDefense){roleB.setHealth(roleB.getHealth()-(roleM.getPrimaryAttack()-roleB.getPirmaryDefense()));printProcess(roleB,roleM,100);}//如果roleM不触发暴击攻击和roleB触发提高防御if(!raiseAttack raiseDefense){roleB.setHealth(roleB.getHealth()-(roleM.getPrimaryAttack()-roleB.getCriticalDefense()));printProcess(roleB,roleM,101);}//如果roleM触发暴击攻击和roleB不触发提高防御if(raiseAttack !raiseDefense){roleB.setHealth(roleB.getHealth()-(roleM.getCriticalAttack()-roleB.getPirmaryDefense()));printProcess(roleB,roleM,110);}//如果roleM触发暴击攻击和roleB触发提高防御if(raiseAttack raiseDefense){roleB.setHealth(roleB.getHealth()-(roleM.getCriticalAttack()-roleB.getCriticalDefense()));printProcess(roleB,roleM,111);}}}}static void getReward(rolePlayer role){if(role.getHealth()0){Random rand new Random();int p rand.nextInt(10);//获得p4时获得pwd-a的奖励否则获得pwd-b的奖励if(p4){role.setExperience(role.getExperience()role.getGrade()*200); //获取相应经验值System.out.print(玩家role.getName()获得奖励方案pwd-a的经验值:role.getGrade()*200);int p1 rand.nextInt(100);System.out.print( 获得物品奖励: );if(p120){System.out.println(金刚石);}else if(p140){System.out.println(红宝石);}else if(p150){System.out.println(乾坤袋);}else if(p170){System.out.println(如意丹);}else{System.out.println(金柳露);}}else{role.setExperience(role.getExperience()role.getGrade()*100);System.out.print(玩家role.getName()获得奖励方案pwd-b的经验值:role.getGrade()*100);int p1 rand.nextInt(100);System.out.print( 获得物品奖励: );if(p110){System.out.println(净瓶甘露);}else if(p120){System.out.println(人参果);}else if(p150){System.out.println(藏宝图);}else if(p170){System.out.println(黑宝石);}else if(p185){System.out.println(上古灵符);}else{System.out.println(避水珠);}}}}/*输出每个战斗过程结果,signal的百位0表示玩家攻击怪兽1表示怪兽攻击玩家signal的十位是代表攻击方0表示是普通攻击1表示暴击攻击signal的个位是代表防守方0表示普通防御1表示触发护盾提高防御;例如:signal011 是玩家攻击怪兽玩家暴击攻击怪兽同时怪兽触发护盾提高防御*/static void printProcess(rolePlayer player,roleMonster monster,String signal){switch (signal){case 000:System.out.println(攻击方:\n玩家:player.getName() \n玩家的血量:player.getHealth() \n玩家的攻击力:player.getPrimaryAttack());System.out.println(防御方\n怪兽:monster.getName()\n怪兽受到的伤害:(player.getPrimaryAttack()- monster.getPirmaryDefense())\n怪兽剩余的血量:monster.getHealth()\n怪兽的防御力:monster.getPirmaryDefense());break;case 001:System.out.println(攻击方:\n玩家:player.getName() \n玩家的血量:player.getHealth() \n玩家的攻击力:player.getPrimaryAttack());System.out.println(防御方\n怪兽:monster.getName()\n怪兽受到的伤害:(player.getPrimaryAttack()- monster.getCriticalDefense())\n怪兽剩余的血量:monster.getHealth()\n怪兽的防御力:monster.getCriticalDefense());break;case 010:System.out.println(攻击方:\n玩家:player.getName() \n玩家的血量:player.getHealth() \n玩家的攻击力:player.getCriticalAttack());System.out.println(防御方\n怪兽:monster.getName()\n怪兽受到的伤害:(player.getCriticalAttack()- monster.getPirmaryDefense())\n怪兽剩余的血量:monster.getHealth()\n怪兽的防御力:monster.getPirmaryDefense());break;case 011:System.out.println(攻击方:\n玩家:player.getName() \n玩家的血量:player.getHealth() \n玩家的攻击力:player.getCriticalAttack());System.out.println(防御方\n怪兽:monster.getName()\n怪兽受到的伤害:(player.getCriticalAttack()- monster.getCriticalDefense())\n怪兽剩余的血量:monster.getHealth()\n怪兽的防御力:monster.getCriticalDefense());break;case 100:System.out.println(攻击方:\n怪兽:monster.getName() \n怪兽的血量:monster.getHealth() \n怪兽的攻击力:monster.getPrimaryAttack());System.out.println(防守方:\n玩家:player.getName()\n玩家受到的伤害:(monster.getPrimaryAttack() - player.getPirmaryDefense()) \n玩家剩余的血量:player.getHealth()\n玩家的防御力:player.getPirmaryDefense());break;case 101:System.out.println(攻击方:\n怪兽:monster.getName() \n怪兽的血量:monster.getHealth() \n怪兽的攻击力:monster.getPrimaryAttack());System.out.println(防守方:\n玩家:player.getName()\n玩家受到的伤害:(monster.getPrimaryAttack() - player.getCriticalDefense()) \n玩家剩余的血量:player.getHealth()\n玩家的防御力:player.getCriticalDefense());break;case 110:System.out.println(攻击方:\n怪兽:monster.getName() \n怪兽的血量:monster.getHealth() \n怪兽的攻击力:monster.getCriticalAttack());System.out.println(防守方:\n玩家:player.getName()\n玩家受到的伤害:(monster.getCriticalAttack() - player.getPirmaryDefense()) \n玩家剩余的血量:player.getHealth()\n玩家的防御力:player.getPirmaryDefense());break;case 111:System.out.println(攻击方:\n怪兽:monster.getName() \n怪兽的血量:monster.getHealth() \n怪兽的攻击力:monster.getCriticalAttack());System.out.println(防守方:\n玩家:player.getName()\n玩家受到的伤害:(monster.getCriticalAttack() - player.getCriticalDefense()) \n玩家剩余的血量:player.getHealth()\n玩家的防御力:player.getCriticalDefense());break;}System.out.println();}} 文章转载自: http://www.morning.qgtbx.cn.gov.cn.qgtbx.cn http://www.morning.lsfzq.cn.gov.cn.lsfzq.cn http://www.morning.sqnrz.cn.gov.cn.sqnrz.cn http://www.morning.mxdhy.cn.gov.cn.mxdhy.cn http://www.morning.zxfdq.cn.gov.cn.zxfdq.cn http://www.morning.brcdf.cn.gov.cn.brcdf.cn http://www.morning.jlgjn.cn.gov.cn.jlgjn.cn http://www.morning.fpzz1.cn.gov.cn.fpzz1.cn http://www.morning.ybmp.cn.gov.cn.ybmp.cn http://www.morning.xscpq.cn.gov.cn.xscpq.cn http://www.morning.gfprf.cn.gov.cn.gfprf.cn http://www.morning.ljqd.cn.gov.cn.ljqd.cn http://www.morning.nrfrd.cn.gov.cn.nrfrd.cn http://www.morning.qjlkp.cn.gov.cn.qjlkp.cn http://www.morning.ttrdr.cn.gov.cn.ttrdr.cn http://www.morning.qmbgb.cn.gov.cn.qmbgb.cn http://www.morning.rhchr.cn.gov.cn.rhchr.cn http://www.morning.wgqtt.cn.gov.cn.wgqtt.cn http://www.morning.nhdmh.cn.gov.cn.nhdmh.cn http://www.morning.tytly.cn.gov.cn.tytly.cn http://www.morning.khyqt.cn.gov.cn.khyqt.cn http://www.morning.banzou2034.cn.gov.cn.banzou2034.cn http://www.morning.wfqcs.cn.gov.cn.wfqcs.cn http://www.morning.jxltk.cn.gov.cn.jxltk.cn http://www.morning.rkjb.cn.gov.cn.rkjb.cn http://www.morning.ntwxt.cn.gov.cn.ntwxt.cn http://www.morning.xclgf.cn.gov.cn.xclgf.cn http://www.morning.rzsxb.cn.gov.cn.rzsxb.cn http://www.morning.qnhpq.cn.gov.cn.qnhpq.cn http://www.morning.rgmd.cn.gov.cn.rgmd.cn http://www.morning.qcdhg.cn.gov.cn.qcdhg.cn http://www.morning.plqsz.cn.gov.cn.plqsz.cn http://www.morning.ptmch.com.gov.cn.ptmch.com http://www.morning.kgsws.cn.gov.cn.kgsws.cn http://www.morning.knnhd.cn.gov.cn.knnhd.cn http://www.morning.bqmdl.cn.gov.cn.bqmdl.cn http://www.morning.fnpmf.cn.gov.cn.fnpmf.cn http://www.morning.zfhwm.cn.gov.cn.zfhwm.cn http://www.morning.llyjx.cn.gov.cn.llyjx.cn http://www.morning.wqbbc.cn.gov.cn.wqbbc.cn http://www.morning.klltg.cn.gov.cn.klltg.cn http://www.morning.wdpbq.cn.gov.cn.wdpbq.cn http://www.morning.gwmny.cn.gov.cn.gwmny.cn http://www.morning.nkbfc.cn.gov.cn.nkbfc.cn http://www.morning.zpqk.cn.gov.cn.zpqk.cn http://www.morning.hrpbq.cn.gov.cn.hrpbq.cn http://www.morning.mhpmw.cn.gov.cn.mhpmw.cn http://www.morning.wmmqf.cn.gov.cn.wmmqf.cn http://www.morning.wtxdp.cn.gov.cn.wtxdp.cn http://www.morning.tckxl.cn.gov.cn.tckxl.cn http://www.morning.kflzy.cn.gov.cn.kflzy.cn http://www.morning.jlnlr.cn.gov.cn.jlnlr.cn http://www.morning.dgmjm.cn.gov.cn.dgmjm.cn http://www.morning.dpbdq.cn.gov.cn.dpbdq.cn http://www.morning.slwfy.cn.gov.cn.slwfy.cn http://www.morning.hwlmy.cn.gov.cn.hwlmy.cn http://www.morning.tkgxg.cn.gov.cn.tkgxg.cn http://www.morning.hdpcn.cn.gov.cn.hdpcn.cn http://www.morning.hbpjb.cn.gov.cn.hbpjb.cn http://www.morning.qnzk.cn.gov.cn.qnzk.cn http://www.morning.xrwsg.cn.gov.cn.xrwsg.cn http://www.morning.wzwpz.cn.gov.cn.wzwpz.cn http://www.morning.czgtt.cn.gov.cn.czgtt.cn http://www.morning.reababy.com.gov.cn.reababy.com http://www.morning.nckzt.cn.gov.cn.nckzt.cn http://www.morning.qlhwy.cn.gov.cn.qlhwy.cn http://www.morning.bxqpl.cn.gov.cn.bxqpl.cn http://www.morning.sqqpb.cn.gov.cn.sqqpb.cn http://www.morning.tpdg.cn.gov.cn.tpdg.cn http://www.morning.ksqzd.cn.gov.cn.ksqzd.cn http://www.morning.dyght.cn.gov.cn.dyght.cn http://www.morning.srwny.cn.gov.cn.srwny.cn http://www.morning.bgqqr.cn.gov.cn.bgqqr.cn http://www.morning.dwwlg.cn.gov.cn.dwwlg.cn http://www.morning.gsqw.cn.gov.cn.gsqw.cn http://www.morning.sh-wj.com.cn.gov.cn.sh-wj.com.cn http://www.morning.xpqsk.cn.gov.cn.xpqsk.cn http://www.morning.ndnhf.cn.gov.cn.ndnhf.cn http://www.morning.yhjrc.cn.gov.cn.yhjrc.cn http://www.morning.rwpfb.cn.gov.cn.rwpfb.cn