2018/2/16
java
package package2;
/*英雄类 父类*/
public abstract class Hero {
private long id;
private String name;
private int level;
private int maxHp;
private int hp;
private int attack;
private int x;
private int y;
/*计算两个英雄的距离*/
protected double getDistance(int x1,int y1,int x2,int y2)
{
return Math.sqrt(Math.pow(x2-x1, 2)+Math.pow(y2-y1, 2));
}
public Hero()
{
setMaxHp(100);
setHp(100);
}
public Hero(long id,String name)
{
this();
setId(id);
setName(name);
}
/*父类使用模板模式进行对战
* 规定默认情况下的流程*/
public void PK(Hero hero)
{
//1.计算距离是否可以攻击对方
if(canFightByDistance(hero)&&hp>0&&hero.getHp()>0)
{
fight(hero);
}
else
{
System.out.println("抱歉,距离不够哟");
}
//2.如果可以攻击,调用攻击方法
//3.打印结果
System.out.println("两位英雄的当前状态");
System.out.println("名称\tHP\tX坐标\tY坐标");
System.out.println(name+"\t"+hp+"\t"+x+"\t"+y);
System.out.printf("%s\t%d\t%d\t%d",hero.getName(),hero.getHp(),hero.getX(),hero.getY());
}
/*判断英雄的距离,是否可以被攻击*/
public abstract boolean canFightByDistance(Hero hero);
public abstract void fight(Hero hero);
public long getId() {
return id;
}
public void setId(long id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getLevel() {
return level;
}
public void setLevel(int level) {
if(level<0&&level>100)
{
this.level=1;
}
else {
this.level = level;
}
}
public int getMaxHp() {
return maxHp;
}
public void setMaxHp(int maxHp) {
this.maxHp = maxHp;
}
public int getHp() {
return hp;
}
public void setHp(int hp) {
this.hp = hp;
}
public int getAttack() {
return attack;
}
public void setAttack(int attack) {
this.attack = attack;
}
public int getX() {
return x;
}
public void setX(int x) {
this.x = x;
}
public int getY() {
return y;
}
public void setY(int y) {
this.y = y;
}
}
package package2;
/*战士类*/
public class Warrior extends Hero {
public Warrior() {
super();
setName("默认英雄");
}
public Warrior(long id,String name,int x,int y)
{
super(id,name);//继承父类构造
setX(x);
setY(y);
}
@Override
public boolean canFightByDistance(Hero hero) {
double distance=getDistance(getX(), getY(), hero.getX(), hero.getY());
//假设战士的攻击距离为100
return distance<=100;
}
@Override
public void fight(Hero hero) {
//生成随机的攻击力
//减掉传入英雄对象的hp
int attack=(int)(Math.random()*1000)%51+20;//20到70
setAttack(attack);
hero.setHp(hero.getHp()-attack);
System.out.println();
System.out.println(getName()+"成功实现了一次攻击");
System.out.println();
System.out.println("当前英雄"+getName()+"的攻击力为"+attack);
System.out.println();
}
}
package package2;
public class heroText {
public static void main(String[] args) {
Hero hero1=new Warrior(1,"典韦",0,0);
Hero hero2=new Warrior(2,"曹操",50,50);
System.out.println("比赛开始");
while(true)
{
hero1.PK(hero2);
hero2.PK(hero1)
System.out.println();
if(hero1.getHp()<0)
{
hero1.PK(hero2);
System.out.println();
System.out.println(hero2.getName()+"获胜");
}
else
{
hero1.PK(hero2);
System.out.println();
System.out.println(hero1.getName()+"获胜");
}
break;
}
}
}