(连载)Java基础学习008

面对象编程

练习:模拟游戏

英雄类

package com.lovoinfo;

/**
 * 英雄
 * 
 * @author zenghao
 *
 */
public class Zhaoxin {
    private static final int MAX_MAGIC = 100;
    private String name; // 姓名
    private int hp; // 血条
    private int mp; // 蓝条

    /**
     * 构造器
     * 
     * @param name
     */
    public Zhaoxin(String name) {

        this.name = name;
        this.hp = 300;
        this.mp = MAX_MAGIC;
    }

    /**
     * 普通攻击
     * 
     * @param m
     *            怪兽
     */
    public void attack(Monster m) {
        int injury = (int) (Math.random() * 18 + 10);
        m.setHp(m.getHp() - injury);

    }

    public int getMp() {// 访问蓝条
        return mp;
    }

    public void setMp(int mp) {// 修改蓝条
        this.mp = mp < MAX_MAGIC ? mp : MAX_MAGIC;
    }

    /**
     * 技能攻击
     * 
     * @param m
     *            怪兽
     */
    public void skill(Monster m) {
        m.setHp(m.getHp() - 50);
    }

    /**
     * 魔法攻击
     * 
     * @param ms
     *            怪兽的数组
     */
    public void magiskll(Monster[] ms) {
        mp -= 30;// 魔法每用一次减30
        for (int i = 0; i < ms.length; i++) {
            Monster m = ms[i];
            if (m.isAlive()) {
                m.setHp(getHp() - 30);
            }// 魔法伤害对活着的怪兽都造成一次伤害。
        }
    }

    public int getHp() {// 访问血条
        return hp;
    }

    public void setHp(int hp) {// 修改血条
        this.hp = hp > 0 ? hp : 0;
    }

    public String toString() {// 打印英雄的姓名和生命和魔法值。
        return name + "生命值:" + hp + "魔法值:" + mp;
    }
}package com.lovoinfo;

/**
 * 英雄
 * 
 * @author zenghao
 *
 */
public class Zhaoxin {
    private static final int MAX_MAGIC = 100;
    private String name; // 姓名
    private int hp; // 血条
    private int mp; // 蓝条

    /**
     * 构造器
     * 
     * @param name
     */
    public Zhaoxin(String name) {

        this.name = name;
        this.hp = 300;
        this.mp = MAX_MAGIC;
    }

    /**
     * 普通攻击
     * 
     * @param m
     *            怪兽
     */
    public void attack(Monster m) {
        int injury = (int) (Math.random() * 18 + 10);
        m.setHp(m.getHp() - injury);

    }

    public int getMp() {// 访问蓝条
        return mp;
    }

    public void setMp(int mp) {// 修改蓝条
        this.mp = mp < MAX_MAGIC ? mp : MAX_MAGIC;
    }

    /**
     * 技能攻击
     * 
     * @param m
     *            怪兽
     */
    public void skill(Monster m) {
        m.setHp(m.getHp() - 50);
    }

    /**
     * 魔法攻击
     * 
     * @param ms
     *            怪兽的数组
     */
    public void magiskll(Monster[] ms) {
        mp -= 30;// 魔法每用一次减30
        for (int i = 0; i < ms.length; i++) {
            Monster m = ms[i];
            if (m.isAlive()) {
                m.setHp(getHp() - 30);
            }// 魔法伤害对活着的怪兽都造成一次伤害。
        }
    }

    public int getHp() {// 访问血条
        return hp;
    }

    public void setHp(int hp) {// 修改血条
        this.hp = hp > 0 ? hp : 0;
    }

    public String toString() {// 打印英雄的姓名和生命和魔法值。
        return name + "生命值:" + hp + "魔法值:" + mp;
    }
}

怪兽类

package com.lovoinfo;

/**
 * 小怪
 * 
 * @author zenghao
 *
 */
public class Monster {
    private String name;// 姓名
    private int hp; // 血条

    /**
     * 构造器
     * 
     * @param name
     */
    public Monster(String name) {
        super();
        this.name = name;
        this.hp = 300;
    }

    /**
     * 普通攻击
     * 
     * @param u
     *            英雄
     */
    public void attack(Zhaoxin u) {
        int injury = (int) (Math.random() * 15 + 5);
        u.setHp(u.getHp() - injury);

    }

    public int getHp() {// 访问血条
        return hp;
    }

    public void setHp(int hp) {// 修改血条
        this.hp = hp > 0 ? hp : 0;
    }

    public String toString() {// 打印小怪兽的名字和血条。~!
        return "小怪兽" + name + "生命值:" + hp;
    }

    /**
     * 用布尔来判断死活
     * 
     * @return 活着返回true死了返回false
     */
    public boolean isAlive() {

        return hp > 0;
    }

    public String getName() {// 访问名字
        return name;
    }

}

PK代码main方法

package com.lovoinfo;

/**
 * 赵信VS怪
 * 
 * @author zenghao
 *
 */
public class PK {
    /**
     * 判断十分至少有一只小怪是活着的
     * 
     * @param ms
     *            小怪兽的数组
     * @return 有活着的小怪兽返回true否则返回false
     */
    public static boolean hasAliveMonster(Monster[] ms) {
        for (int i = 0; i < ms.length; i++) {
            if (ms[i].isAlive()) {
                return true;
            }
        }
        return false;
    }

    public static void main(String[] args) {
        Zhaoxin u = new Zhaoxin("赵信");
        Monster[] ms = { new Monster("双头巨人"),
                new Monster("龙"),
                new Monster("三头狼"), 
                new Monster("炮兵"),
                new Monster("内向哥")
        };

        int round = 1;
        do {
            System.out.println("====第" + round++ + "回合====");
            Monster m = null;
            do {
                int mIndex = (int) (Math.random() * ms.length);
                m = ms[mIndex];// 随机一个怪兽对英雄攻击。
            } while (!m.isAlive());
            System.out.println(m.getName() + "小怪兽攻击赵信!");
            m.attack(u);
            System.out.println(u);
            if (u.getHp() > 0) {
                double rate = Math.random();
                if (rate <= 0.8) {
                    System.out.println("赵信使用普通攻击小怪兽!");
                    u.attack(m);
                } else if (rate <= 0.9) {
                }
                System.out.println("赵信使用\n枪出如龙\n攻击小怪兽!");
                u.skill(m);
            } else {
                if (u.getMp() >= 30) {
                    System.out.println("赵信使用\n新月横扫\n攻击小怪兽!");
                    u.magiskll(ms);
                } else {
                    System.out.println("MP不足!");
                }

            }
            for (Monster termpMonster : ms)
                System.out.println(termpMonster);
        } while (u.getHp() > 0 && hasAliveMonster(ms));
        if (u.getHp() > 0) {
            System.out.println("赵信胜利!");
        } else {
            System.out.println("赵信OVER了。");
        }
    }
}

自我总结

1.加深了对面对象编程的了解。
每一个对象都是由属性(数据抽象),构造器,方法(行为抽象)组成。
对象有属于自己的类。
对象都有自己的属性和行为。
2.Arrags自动排序功能。(Java还是很强大HOHO~~~)yy下。。
Arrags.sort(数组),规则
3.在Source菜单选项里选中Generate Getters and Setters。。。。调用get..访问器,set..修改器。
4.在Source菜单选项里选中Generate Constructor using Fields…调出构造器。

还待加强

1.对循环调用不是那么的随心所欲,感觉就是很蹩脚。(感觉就像是废了的样子。呵呵)
2.boolean该放在那里很模糊。
3.对数据抽象和行为抽象还不够那么清晰的表达。和一个好的思路。
4.单词量。

                                                    晚安吧。!Java!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值