要求:运用面向对象的思想,创建奥特曼和小怪兽对象,实现奥特曼和一群小怪兽的PK,若奥特曼将所有小怪兽杀光,则奥特曼胜利,反之小怪兽胜利
1 创建奥特曼对象
package cn.libill;
/**
* 奥特曼
* @author libill
*
*/
public class Ultraman {
private static final int MAX_MAGIC = 100; //奥特曼最大魔法值
private static final int MAX_HP = 250; //奥特曼最大生命值
private String name; //奥特曼名字
private int hp; //生命值
private int mp; //魔法值
/**
* 奥特曼生命值访问器
* @return hp 奥特曼生命值
*/
public int getHp() {
return hp;
}
/**
* 奥特曼魔法值的访问器
* @return mp 奥特曼魔法值
*/
public int getMp() {
return mp;
}
/**
* 奥特曼生命值修改器
* @param hp 奥特曼的生命值
*/
public void setHp(int hp) {
this.hp = hp > 0 ? hp : 0;
}
public void setMp(int mp) {
this.mp += this.mp + mp <MAX_MAGIC ? mp : 0; //如果mp+奥特曼当前的(this.)mp值不超过100则加上mp,否则不加
}
/**
* 奥特曼发动攻击
* @param m 小怪兽
*/
public void attack(Monster m) {
int injury = (int) (Math.random() * 21 + 10);
m.setHp(m.getHp() - injury);
}
/**
* 魔法攻击所有小怪兽
* @param ms 小怪兽数组
*/
public void magicAttack(Monster[] ms) {
mp -= 30;
for (int i = 0; i < ms.length; i++) {
if (ms[i].getHp() > 0) {
ms[i].setHp(ms[i].getHp() - 20);
}
}
}
/**
* 究极必杀技
* @param m 小怪兽
*/
public void hugeAttack(Monster m) {
m.setHp(m.getHp() - 50);
}
@Override
public String toString() {
return "奥特曼" + name + "的生命值还有:" + hp;
}
/**
* 构造器
* @param name 奥特曼名字
*/
public Ultraman(String name) {
this.name = name;
this.hp = MAX_HP;
this.mp = MAX_MAGIC;
}
}
2 创建小怪兽对象
package cn.libill;
/**
* 小怪兽
* @author libill
*
*/
public class Monster {
private static final int MAX_HP = 150; //小怪兽最大生命值
private String name; //小怪兽的名字
private int hp; //小怪兽生命值
/**
* 攻击
* @param u
*/
public void attack(Ultraman u) {
int injury = (int) (Math.random() * 11 + 5);
u.setHp(u.getHp() - injury);
}
/**
* 小怪兽生命值的访问器
* @return hp 小怪兽的生命值班
*/
public int getHp() {
return hp;
}
/**
* 小怪兽姓名访问器
* @return the name
*/
public String getName() {
return name;
}
/**
* 小怪兽生命值的修改器
* @param hp 小怪兽的生命值
*/
public void setHp(int hp) {
this.hp = hp > 0 ? hp : 0;
}
@Override
public String toString() {
return "小怪兽" + name + "的生命值还有:" + hp;
}
public boolean isAlive() {
return hp > 0;
}
/**
* @param name
*/
public Monster(String name) {
this.name = name;
this.hp = MAX_HP;
}
}
3 奥特曼PK小怪兽
package cn.libill;
public class Pk {
/**
* 判断小 怪兽中是否至少还有一个是活着的
* @param ms 小怪兽数组
* @return 如果返回true则至少有一个小怪兽活着,否则全军覆没
*/
public static boolean hasAlive(Monster[] ms) {
for (int i = 0; i < ms.length; i++) {
if (ms[i].isAlive()) {
return true;
}
}
return false;
}
public static void main(String[] args) {
Ultraman u = new Ultraman("肖继潮");
Monster[] ms = {
new Monster("刘阳"),
new Monster("何坤"),
new Monster("谷振东"),
new Monster("李琪"),
new Monster("王良")
};
int round = 1;
do {
System.out.printf("=======第 %d 回合=======\n", round);
Monster m = null;
do {
m = ms[(int) (Math.random() * ms.length)];
} while (!m.isAlive());
System.out.printf("小怪兽【 %s】 攻击奥特曼\n", m.getName());
m.attack(u);
System.out.println(u);
if (u.getHp() > 0) {
u.setMp(5); //如果奥特曼没死,则魔法值加5
double rate = Math.random();
if (rate <= 0.8) { //70%发动普通攻击
System.out.printf("奥特曼攻击【%s】小怪兽\n", m.getName());
u.attack(m);
} else if (rate <= 0.9) {
System.out.printf("奥特曼对【%s】发动究极必杀技!!", m.getName()); //10%发动魔法攻击
u.hugeAttack(m);
} else {
if (u.getMp() > 30) {
System.out.println("奥特曼发动魔法攻击!!!!!");
u.magicAttack(ms);
} else {
System.out.println("奥特曼发动魔法攻击失败!!!!!");
}
}
for (int i = 0; i < ms.length; i++) {
System.out.println(ms[i]);
}
}
round++;
} while (u.getHp() > 0 && hasAlive(ms));
if (u.getHp() > 0) {
System.out.println("奥特曼获得胜利!");
} else {
System.out.println("小怪兽获得胜利!");
}
}
}
总结:对于类中私有属性的访问与修改:为它们创建seters( )和geters( )方法