面對象編程
練習:模擬遊戲
英雄類
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!