PK游戏引出的继承问题

PK游戏中,人物有不同的属性数值以及不同的技能, 能用以下代码实现简单的PK游戏

public void attck(lvbu lb){
        int num=(int)(160 + lv * 40 + 0.5 * ad);
        lb.hp-=num;
        System.out.println(name + playerID + "攻击了" + lb.name + lb.playerID +
                "使其失去了" + num + "点HP,其还剩下" + lb.hp + "点HP");
    }

可是在编写程序的途中我们发现,一个英雄在对不同的英雄释放技能时我们需要对所有不同的对象进行一段代码的编写,这样会导致我们的代码出现大量重复代码,所以我们想到使用继承的方法来进行对代码的修改,以保证我们的代码简单清晰。

继承

继承就是一个子类继承了父类的属性和方法,使得子类对象具有和父类一样的属性以及方法。在编写PK游戏代码的过程中,我们发现不同的英雄虽然有不同的属性数值和技能,但是他们具有相同的类例如血量hp,攻击ad,等级lv,技能等,只是内容会有差别。所以我们可以利用继承的特性来编写代码以达到代码简单清晰的目的。

代码实现:

public class 父类(){}
public class 子类名 extends 父类父类名{}

例如:

package HXK1110;

public class Hero {
    String name;
    int hp;
    int ad;
    int lv;


}
package HXK1110;


public class HouYi extends Hero {
    public void atk(Hero hero){
        int num=(int)(200+200*lv+ad*0.4);
        hero.hp-=num;
        System.out.println(name + "攻击" + hero.name + "使其失去了" + num + "点Hp,其还剩 下" + hero.hp + "点Hp");
    }
    public void uplv(Hero hero){
        lv++;
        hero.ad+=100;
        hero.hp+=500;
        System.out.println(name+"等级为"+lv+"攻击力为"+ad+"血量为"+hp);
    }
}
package HXK1110;

public class LvBu extends Hero{
    public void atk_1(Hero hero){
        int num=(int)(400+300*lv+ad*0.6);
        hero.hp-=num;
        System.out.println(name + "攻击" + hero.name + "使其失去了" + num + "点Hp,其还剩 下" + hero.hp + "点Hp");
    }
    public void uplv_1(Hero hero){
        lv++;
        hero.ad+=200;
        hero.hp+=1000;
        System.out.println(name+"等级为"+lv+"攻击力为"+ad+"血量为"+hp);
    }
}
package HXK1110;

public class ZhangFei extends Hero {
    public void atk_2(Hero hero){
        int num=(int)(300+300*lv+ad*1);
        hero.hp-=num;
        System.out.println(name + "攻击" + hero.name + "使其失去了" + num + "点Hp,其还剩 下" + hero.hp + "点Hp");
    }
    public void uplv_2(Hero hero){
        lv++;
        hero.ad+=200;
        hero.hp+=800;
        System.out.println(name+"等级为"+lv+"攻击力为"+ad+"血量为"+hp);
    }
}
package HXK1110;

import java.util.Random;

public class PK {
    public static void main(String[] args) {
        LvBu lb1 = new LvBu();
        HouYi hy1 = new HouYi();
        ZhangFei zf1 = new ZhangFei();

        lb1.name = "吕布";
        lb1.hp = 3000;
        lb1.ad = 110;
        lb1.lv = 2;

        hy1.name = "后羿";
        hy1.hp = 2500;
        hy1.ad = 130;
        hy1.lv = 2;

        zf1.name = "张飞";
        zf1.hp = 3600;
        zf1.ad = 80;
        zf1.lv = 2;

        while (zf1.hp > 0 && lb1.hp > 0) {
            Hero h1 = zf1;// 自动转型
            lb1.atk_1(h1);
            zf1.atk_2(lb1);
        }
        if (zf1.hp > 0) {
            System.out.println(zf1.name + "Win!!! ");
            while (hy1.hp > 0 && zf1.hp > 0) {
                hy1.atk(zf1);
                zf1.atk_2(hy1);
            }
        } else {
            System.out.println(lb1.name + "Win!!");
            while (hy1.hp > 0 && lb1.hp > 0) {
                hy1.atk(lb1);
                lb1.atk_1(hy1);
            }
        }
    }
}

运行结果:

吕布攻击张飞使其失去了1066点Hp,其还剩 下2534点Hp
张飞攻击吕布使其失去了980点Hp,其还剩 下2020点Hp
吕布攻击张飞使其失去了1066点Hp,其还剩 下1468点Hp
张飞攻击吕布使其失去了980点Hp,其还剩 下1040点Hp
吕布攻击张飞使其失去了1066点Hp,其还剩 下402点Hp
张飞攻击吕布使其失去了980点Hp,其还剩 下60点Hp
吕布攻击张飞使其失去了1066点Hp,其还剩 下-664点Hp
张飞攻击吕布使其失去了980点Hp,其还剩 下-920点Hp
吕布Win!!

注意:1: 一个类只能有一个直系的父类 ,可以有多个父系类

2: 一个父类可以有多个子类

方法重写

格式: 方法格式需要与父类一致,方法的内容可以修改

例如:

public class A {
    public void good(){
        System.out.println("You are good!");
    }
    public void come(){
        System.out.println("come on!");
    }

}
class B extends A{
    public void good(){
        System.out.println("你真棒!");
    }
    public void come(){
        System.out.println("加油!");
    }
}

class C{
    public static void main(String[] args) {
        B b=new B();
        b.good();
        b.come();
    }
}

运行结果:

你真棒!
加油!

@Override// 注解 - 判断这个方法是不是重写

自动转型;向上转型;

B b=new B();

B b1=b;

可以使用一个父类类型对象变量名 存储一个子类对象的引用地址

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值