Java 练习之回合制游戏,练习接口,随机,数组,可变参数
weapon
定义一个武器类,武器需要具有武器的名称,武器的伤害值
equipment
定义一个装备类,武器需要含有装备名称,装备的防御值
character
定义一个角色类,角色含有角色名称和角色ID
skill
定义一个技能类,具备法术攻击和物理攻击的功能
hero
定义一个英雄类,英雄含有英雄名称,英雄的角色,英雄的生命值,英雄需要含有武器属性,含有装备属性
需要具备攻击功能, 切换 技能功能 ,具备添加穿戴装备的功能游戏开始时,某些英雄登场,这些英雄需要穿戴一些装备和武器,
显示某某英雄开始交战,
某某英雄释放了,某些技能,造成了对方多大的伤害,
当某一个英雄的血量低于10% 提醒,血量过低,建议切换技能或者加血动作,
当全场只剩一个英雄的时候,其他英雄全部血量为0的时候,结束``````java思路:
1.初始化
业务内容:明确参与战斗的对象数量,以及对象的属性(装备.技能等)
开发内容:
创建人物类
人物类中包含人物的基本信息: 姓名,HP(血),MP(魔法)
人物类中包含装备属性:武器(攻击值),护具(防御值(减伤效果))
人物类中包含技能属性:物理攻击(伤害值),魔法攻击(伤害值)2.确定行为
明确任何交战,如何释放技能,
如随机释放技能,按照概率释放被动,
如不需要参与者随机战斗
开发内容:
创建一个容器,存放所有要参战的人物队列3.明确关系
是回合制还是混战,是一对多,还是多对多,还是随机匹配
如回合制,一对多随机匹配
开发内容:
遍历容器
判断容器中的对象的属性值HP,是否 <= 0
如果小于0,则不参与下次属性赋值
从容器中取出一个对象,随机遍历多个对象,按照属性赋值
------------------------------------------------
如果是混战则需要每个对象,按照攻击方式的不同(AOE或者单体伤害),决定随机多少对象来进行赋值4.明确结束的条件
是小队存活,还是生存数量,还是最后一人
如最后一人存活
开发内容
当容器中仅剩 1个对象的属性值 HP > 0 时,结束循环,打印结果
weapon
定义一个武器类,武器需要具有武器的名称,武器的伤害值
private String weaponName; // 武器的名称private double injuryValue; // 武器的伤害值
equipment
定义一个装备类,武器需要含有装备名称,装备的防御值
private String equipName;private double defenceValue;
character
定义一个角色类,角色含有角色名称和角色ID
private String characterName; // 角色名称private String charID;
skill
定义一个技能类,具备法术攻击和物理攻击的功能
//skill
//定义一个技能类,具备法术攻击和物理攻击的功能
public interface Skill {void physicsAttack(Hero ... heroes); //物理攻击void magicAttack(Hero ... heroes); //法术攻击
}
hero
定义一个英雄类,英雄含有英雄名称,英雄的角色,英雄的生命值,英雄需要含有武器属性,含有装备属性
需要具备攻击功能, 切换 技能功能 ,具备添加穿戴装备的功能
package todayHw;import java.util.Random;/*
定义一个英雄类,英雄含有英雄名称,英雄的角色,英雄的生命值,
英雄需要含有武器属性,含有装备属性
需要具备攻击功能, 切换 技能功能 ,具备添加穿戴装备的功能*/
public class Hero extends Character implements Skill {// 继承自 角色类// 英雄名称// 英雄的角色private double HP; // 血量 HP=health pointprivate Weapon weapon; // 武器属性private Equipment equip; // 装备属性public int addHP() {int temp = new Random().nextInt(50);System.out.println("本次加血" + temp + "点");return temp;}/*** 减去对方英雄的HP** @param heroes*/// 实现一下 接口中的 物理攻击 和 法术攻击@Overridepublic void physicsAttack(Hero... heroes) {// 物理攻击System.out.println("===================================");// 输出获取武器的伤害值double weaponThisInjury = weapon.getInjuryValue();// 减去对方英雄的HPfor (int i = 0; i < heroes.length; i++) {// 1. 判断对方的血量是否为 0if (heroes[i].getHP() > 0 && this.getHP() > 0) {// 0.8 ~ 1.5之间随机// 武器造成的伤害值 = 武器的伤害值(80% - 150%) - 防御值Random r = new Random();weaponThisInjury = (int) (weaponThisInjury * r.nextDouble() * 1.5) - heroes[i].getEquip().getDefenceValue();// 如果伤害值 经过 防具减伤后 攻击值小于0,则不减少 HPif (weaponThisInjury < 0) {System.out.println(" 格挡掉了本次所造成的所有伤害");} else {// 显示盾牌System.out.println(heroes[i].getCharacterName()+ " 装备了 "+ heroes[i].getEquip().getEquipName()+ "格挡掉了 , 来自"+ this.getCharacterName()+ " 的 "+ heroes[i].getEquip().getDefenceValue()+ " 点 伤害值! ");System.out.println(this.getCharacterName()+ " 使用 "+ this.getWeapon().getWeaponName()+ " 对 "+ heroes[i].getCharacterName()+ " 本次物理攻击的伤害值是: " + weaponThisInjury + " HP");heroes[i].setHP(heroes[i].getHP() - weaponThisInjury);}// 判断此次攻击后 血量是否 小于 10if (isLowerThenTen(heroes[i])) {System.out.println(heroes[i].getCharacterName() + " 发动被动魔法攻击");magicAttack(this);}// 判断此次攻击后, 血量是否为 0isEmpty(heroes[i]);// 输出对方的英雄剩余的HPif (heroes[i].getHP() > 0) {System.out.println("对方 " + heroes[i].getCharacterName() + " 还剩余 " + heroes[i].getHP() + " HP");}// 输出己方的血量System.out.println("己方 " + this.getCharacterName()+ " 还剩余 "+ this.getHP()+ " 点血量 ");}}System.out.println("===================================");}// 判断对方血量是否低于 10public boolean isLowerThenTen(Hero hero) {//if (hero.getHP() < 10 && hero.getHP() > 0) {System.out.println(hero.getCharacterName() + " 血量低于10");System.out.println("建议 " + hero.getCharacterName() + " 转换技能或者加血!!!");boolean addOrMagic = new Random().nextBoolean();if (addOrMagic) {System.out.println(hero.getCharacterName() + " 使用加血功能 ");int tempAddHP = addHP();hero.setHP(hero.getHP() + tempAddHP);System.out.println(hero.getCharacterName() + " 加血 " + tempAddHP + "点");}return true;} else {return false;}}// 判断对象经过本次攻击后,血量是否小于 0;public void isEmpty(Hero hero) {//if (hero.getHP() < 0) {System.out.println(hero.getCharacterName() + " 的血量低于0 " + " 结束本次战斗");System.out.println("造成 " + Math.abs(hero.getHP()) + " 点,过量伤害!!!");return;}}@Overridepublic void magicAttack(Hero... heroes) {// 魔法攻击/*1.判断血量是否为 02.攻击对方*/for (int i = 0; i < heroes.length; i++) {// 1. 判断对方的血量是否为 0if (heroes[i].getHP() > 0) {// 2. 获取对方的血量// 3. 以对方血量为随机数,对 对方 造成伤害int magicInjury = new Random().nextInt((int) heroes[i].getHP());System.out.println("对 "+ heroes[i].getCharacterName()+ "造成"+ magicInjury+ " 点 魔法伤害 ");// 4.减掉血量heroes[i].setHP(heroes[i].getHP() - magicInjury);}// 判断此次攻击后 血量是否 小于 10isLowerThenTen(heroes[i]);// 判断此次攻击后, 血量是否为 0isEmpty(heroes[i]);// 输出对方的英雄剩余的HPif (heroes[i].getHP() > 0) {System.out.println(heroes[i].getCharacterName() + " 还剩余 " + heroes[i].getHP() + " HP");}}}// 空参构造public Hero() {}// 构造方法public Hero(double HP, Weapon weapon, Equipment equip) {this.HP = HP;this.weapon = weapon;this.equip = equip;}// 全参构造public Hero(String characterName, String charID, double HP, Weapon weapon, Equipment equip) {super(characterName, charID);this.HP = HP;this.weapon = weapon;this.equip = equip;}public double getHP() {return HP;}public void setHP(double HP) {this.HP = HP;}public Weapon getWeapon() {return weapon;}public void setWeapon(Weapon weapon) {this.weapon = weapon;}public Equipment getEquip() {return equip;}public void setEquip(Equipment equip) {this.equip = equip;}
}
游戏开始时,某些英雄登场,这些英雄需要穿戴一些装备和武器,
显示某某英雄开始交战,
某某英雄释放了,某些技能,造成了对方多大的伤害,
当某一个英雄的血量低于10% 提醒,血量过低,建议切换技能或者加血动作,
当全场只剩一个英雄的时候,其他英雄全部血量为0的时候,结束
package todayHw;public class Battle {public static void main(String[] args) {Hero h = new Hero(" A ", "100", 100,new Weapon(" 埃辛诺斯双刃 ", 35),new Equipment(" 埃辛诺斯盾牌 ",10));Hero h2 = new Hero(" B ", "101", 100,new Weapon(" 风剑 ", 25),new Equipment(" 橡木盾 ",5));Hero h3 = new Hero(" C ", "102", 100,new Weapon(" 战斧 ", 15),new Equipment(" 复活甲 ",2));boolean flag = true;int count = 1;while (flag) {//System.out.println("第" + count++ +" 回合");System.out.println("A 攻击 BC");h.physicsAttack(h2,h3);System.out.println("B 攻击 AC");h2.physicsAttack(h,h3);System.out.println("C 攻击 AB");h3.physicsAttack(h,h2);if((h.getHP() < 0 && h2.getHP()< 0)||(h2.getHP() < 0 && h3.getHP()< 0)||(h.getHP() < 0 && h3.getHP()< 0)){flag = false;}}}
}
Java 练习之回合制游戏,练习接口,随机,数组,可变参数相关推荐
- java模拟回合制游戏大小姐_[源码和文档分享]基于java的RPG回合制游戏
一.工作积累总结 1.1 简介 该项目是一个回合制RPG游戏,讲述了动物主角对抗人类,自逃出动物园开始,一路与人类对抗,提升能力,并寻找新队友组成团体,逼得人类不得不与之谈判,最终与人类达成了和平协议 ...
- java rpg对战_[源码和文档分享]基于java的RPG回合制游戏
一.工作积累总结 该项目是一个回合制RPG游戏,讲述了动物主角对抗人类,自逃出动物园开始,一路与人类对抗,提升能力,并寻找新队友组成团体,逼得人类不得不与之谈判,最终与人类达成了和平协议的故事.玩家可 ...
- java机甲类回合制游戏,2018经典机甲游戏有哪些_好玩的机甲类游戏推荐
战争机甲:战术 <战争机甲:战术>改编自Privateer Press的同名桌游,后者是一款奇幻题材战棋游戏(它和Gamesworkshop家的<中古战锤>系列很像),玩家要代 ...
- 用Java写一个简单的回合制游戏
用Java写一个简单的回合制游戏 创建基本属性,血量,名字,技能,技能伤害. 如下: public class One3 {//创建三个属性private String name;private St ...
- Java实现简单的回合制游戏
实现简单的回合制游戏 测试类 方法类 角色类 玩家类 测试类 package turn_base;import javax.security.sasl.SaslServer;/** 回合制游戏的需求* ...
- 用java搭建一个类似「崩坏:星穹铁道」的简单回合制游戏
前不久,崩坏:星穹铁道刚刚上线公测了,我也第一时间体验了这款游戏.在游戏的过程中,我偶然注意到,对局界面的左上角角色行动顺序,似乎和队列的模型比较类似(相同于队列的地方在于从队首选取下一个行动的单位, ...
- 两个阵营互打的回合制游戏
两个阵营互打的回合制游戏 定义一个游戏生物基类(Sprite) 下面有4种继承:英雄(Hero),远程-弓箭手(Archer),哥布林(Goblin),远程-哥布林投矛手(GoblinHunter) ...
- 回合制游戏网络通信协议及心跳机制调研
回合制策略游戏 游戏后台网络通讯 游戏通信协议 网络同步 TCP UDP 心跳机制 原理 心跳检测步骤 应用层发送心跳包的技术 要关闭掉线的TCP连接 UDP与心跳 心跳包和轮询的区别 客户端如何快速 ...
- 游戏和服务器的协议,为回合制游戏服务器选择哪种协议
我正在为使用Java的回合制游戏编写游戏服务器. 这些都是事实:为回合制游戏服务器选择哪种协议 游戏的速度是缓慢的,所以客户端需要发送的数据,让我们每8秒多说了,这些数据是大多数时间只有一个小的增量更 ...
最新文章
- MapReduce基础开发之十二ChainMapper和ChainReducer使用
- 冷却负载、人为因素影响传统数据中心效率
- php background-color:,background-color属性怎么用
- ios点击大头针气泡不弹出_画家双手抖不停,画不了画丢了工作,却迎合抖动创造出一个个奇迹...
- android串口工具apk_【APK】一个强大的Android开发工具!
- 微课|中学生可以这样学Python(例5.4):计算决赛现场选手得分
- 开箱即用的 Prometheus 告警规则集
- 废旧 Android 手机如何改造成 Linux 服务器?
- 上海车展自动驾驶产业链盘点
- 基于环信的开源即时通讯项目
- Xcode iOS 工程目录结构解析
- 8、开发工具软件 - 软件技术系列文章
- Adobe年底推出Creative Suite 3?
- 新年上班第一天生产环境分布式文件系统崩了!!
- 网络安全从业人员能力图谱
- 解决WinCE内存不足问题
- 自己写的融资金融系统的js
- javax.net.ssl.SSLException: hostname in certificate didn't match:
- linux禁止ping, 服务器防止ping拒绝服务网络攻击
- 运用大数据服务环境质量改善