一、首先创建一个玩家类,里边有相对应的属性值
闪避率和暴击率同理但是没有写
/**
* 玩家类
* 属性 名字 类型 生命值 防御值 攻击力
* 方法 自我介绍 pk 斗殴
*/
public class Player {
//分装:把属性设为private,提供公共的get和set方法,提高安全性
private String name; //姓名
private String type; //类型 战士 法师
private int hp; //生命值
private int defense; //防御值
private int attack; //攻击力
private int baoji; //暴击率
private double miss; //闪避率
private String[] zhuanbei;
// 一般定义了有参的构造器,一定也要定义一个无参的
//有参
public Player(String name, String type, int hp, int defense, int attack, int baoji, double miss, String[] zhuanbei) {
this.name = name;
this.type = type;
this.hp = hp;
this.defense = defense;
this.attack = attack;
this.baoji = baoji;
this.miss = miss;
this.zhuanbei = zhuanbei;
}
//无参
public Player() {
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getType() {
return type;
}
public void setType(String type) {
this.type = type;
}
public int getHp() {
return hp;
}
public void setHp(int hp) {
this.hp = hp;
}
public int getDefense() {
return defense;
}
public void setDefense(int defense) {
this.defense = defense;
}
public int getAttack() {
return attack;
}
public void setAttack(int attack) {
this.attack = attack;
}
public double getBaoji() {
return baoji;
}
public void setBaoji(int baoji) {
this.baoji = baoji;
}
public double getMiss() {
return miss;
}
public void setMiss(double miss) {
this.miss = miss;
}
public String[] getZhuanbei() {
return zhuanbei;
}
public void setZhuanbei(String[] zhuanbei) {
this.zhuanbei = zhuanbei;
}
二、定义方法
1、定义介绍方法,该方法输出对应玩家的属性值
/**
* 描述自己的属性
*/
public void introduce(){
System.out.println("我叫" + name + ",是一个" + type);
System.out.println(",生命值高达" + hp + ",防御值" + defense + ",攻击力" + attack);
}
2、创建Rate类,并创建计算暴击率和掉落率的方法
1、创建rateCheck方法,判断是否触发暴击和掉落
public boolean rateCheck(int rate){
float ran = random.nextFloat() * 101; //[0,101)
if (ran < rate) //当随机的数小于既定的rate则判定触发
return true;
else
return false;
}
2、创建暴击伤害计算方法
public int baojishanghai(int baojilv, int attack){
int bjtest = 0; //暴击伤害
boolean isBaojilv = rateCheck(baojilv); //判断是否触发暴击
if (isBaojilv){
System.out.println("触发暴击");
bjtest = attack * 2; //当触发暴击时,伤害为2倍的基伤并无视防御
}
return bjtest; //返回暴击伤害
}
3、创建随机掉落物品计算方法
/**
* 掉落并不是百分百掉落
*/
public void fall(int fallRate, int len, String arr[]){
int i = 0;
Boolean fall = rateCheck(fallRate); //每个玩家都有自己的掉落率,判断是否触发掉落
if (fall){
i = (int)random.nextFloat() * len; //如果掉落,则在装备数组里随机掉落一个
System.out.println("掉落" + arr[i]);
}
}
3、定义PK方法
/**
* pk
* 我方开始的战斗
* @param p 敌对玩家
*/
public void pk(Player p){
int flag = 0; //标识
Rate bj = new Rate(); //new一个计算暴击掉落的类的对象
while(true){
//显示当前战斗人员的信息
this.introduce();
p.introduce();
int bjsh = 0; //暴击伤害
// 定义一个标记 0 我方攻击 1 敌方攻击
if (flag == 0){
//战斗 我方攻击力减去敌方防御力
int harm = this.attack - p.defense;
bjsh = bj.baojishanghai(this.baoji,this.attack); //判断是否暴击,如果发生暴击则计算暴击伤害
if (bjsh > 0) //上一步如果发生暴击,则暴击伤害>0
harm = bjsh; //造成的伤害为暴击伤害
System.out.println(p.name + "掉血" + harm);
p.hp -= harm; //让敌方生命值-伤害值
flag = 1; //改变标记
}else {
//战斗 敌方攻击力减去我方防御力
int harm = p.attack - this.defense;
bjsh = bj.baojishanghai(p.baoji,p.attack);
if (bjsh > 0)
harm = bjsh;
System.out.println(this.name + "掉血" + harm);
this.hp -= harm; //让敌方生命值-伤害值
flag = 0; //改变标记
}
/**
* 死亡机制 当一个人血量为零,则pk结束
*/
if (p.hp <= 0){
System.out.println("我方击败" + p.name);
bj.fall(50,p.zhuanbei.length,p.zhuanbei);
break;
}
if (this.hp <= 0){
System.out.println(p.name + "击败" + this.name);
bj.fall(50,this.zhuanbei.length,this.zhuanbei);
break;
}