Java 练习之回合制游戏,练习接口,随机,数组,可变参数
程序员文章站
2022-07-04 21:03:10
weapon定义一个武器类,武器需要具有武器的名称,武器的伤害值private String weaponName; // 武器的名称 private double injuryValue; // 武器的伤害值equipment定义一个装备类,武器需要含有装备名称,装备的防御值 private String equipName; private double defenceValue;character定义一个角色类,角色含有角色名称和角色ID private St...
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 point
private Weapon weapon; // 武器属性
private Equipment equip; // 装备属性
public int addHP() {
int temp = new Random().nextInt(50);
System.out.println("本次加血" + temp + "点");
return temp;
}
/**
* 减去对方英雄的HP
*
* @param heroes
*/
// 实现一下 接口中的 物理攻击 和 法术攻击
@Override
public void physicsAttack(Hero... heroes) {
// 物理攻击
System.out.println("===================================");
// 输出获取武器的伤害值
double weaponThisInjury = weapon.getInjuryValue();
// 减去对方英雄的HP
for (int i = 0; i < heroes.length; i++) {
// 1. 判断对方的血量是否为 0
if (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,则不减少 HP
if (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);
}
// 判断此次攻击后 血量是否 小于 10
if (isLowerThenTen(heroes[i])) {
System.out.println(heroes[i].getCharacterName() + " 发动被动魔法攻击");
magicAttack(this);
}
// 判断此次攻击后, 血量是否为 0
isEmpty(heroes[i]);
// 输出对方的英雄剩余的HP
if (heroes[i].getHP() > 0) {
System.out.println("对方 " + heroes[i].getCharacterName() + " 还剩余 " + heroes[i].getHP() + " HP");
}
// 输出己方的血量
System.out.println("己方 " + this.getCharacterName()
+ " 还剩余 "
+ this.getHP()
+ " 点血量 "
);
}
}
System.out.println("===================================");
}
// 判断对方血量是否低于 10
public 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;
}
}
@Override
public void magicAttack(Hero... heroes) {
// 魔法攻击
/*
1.判断血量是否为 0
2.攻击对方
*/
for (int i = 0; i < heroes.length; i++) {
// 1. 判断对方的血量是否为 0
if (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);
}
// 判断此次攻击后 血量是否 小于 10
isLowerThenTen(heroes[i]);
// 判断此次攻击后, 血量是否为 0
isEmpty(heroes[i]);
// 输出对方的英雄剩余的HP
if (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;
}
}
}
}
本文地址:https://blog.csdn.net/HarrisJayce/article/details/110209375
上一篇: 八皇后问题 java实现
下一篇: 卡牌拖拽效果—自制卡牌游戏之旅