(連載)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!
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章