模拟奥特曼和一群怪对打(回合制)
下面代码是创建的奥特曼的类
package mt;
public class Ultraman {
private static final int MAX_MIGCE = 100;
private int hp; //生命
private String name; //名字
private int mp; //魔法值
/**
* 构造器
* @param name 设定名字
*/
public Ultraman(String name) {
this.name = name;
hp = 500;
mp = MAX_MIGCE;
}
/**
* 普通攻击
* @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].isAlive()) {
ms[i].setHp(ms[i].getHp() - 20);
}
}
}
/**
* 必杀技攻击
* @param m 被打对象
*/
public void hugeAttack(Monster m) {
m.setHp(m.getHp() - 50);
}
/**
* 访问名字
* @return 名字
*/
public String getName() {
return name;
}
/**
* 访问生命值
* @return 生命值
*/
public int getHp() {
return hp;
}
/**
* 设置生命值
* @param hp 生命值
*/
public void setHp(int hp) {
this.hp = hp > 0? hp : 0;
}
/**
* 访问魔法值
* @return 魔法值
*/
public int getMp() {
return mp;
}
/**
* 设置魔法值
* @param mp 魔法值
*/
public void setMp(int mp) {
this.mp = mp < MAX_MIGCE? mp : MAX_MIGCE ;
}
@Override
public String toString() {
return name +"生命值:" + hp;
}
}
下面代码是创建的小怪兽的类
package mt;
public class Monster {
private int hp; //生命值
private String name; //名字
/**
* 构造器
* @param name 名字
*/
public Monster(String name) {
this.name = name;
hp = 150;
}
/**
* 普通攻击
* @param m 被打对象
*/
public void attack(Ultraman m) {
int injury = (int) (Math.random() * 11 + 10);
m.setHp(m.getHp() - injury);
}
/**
* 访问名字
* @return 名字
*/
public String getName() {
return name;
}
/**
* 访问生命值
* @return 生命值
*/
public int getHp() {
return hp;
}
/**
* 设置生命值
* @param hp 生命值
*/
public void setHp(int hp) {
this.hp = hp > 0? hp : 0;
}
@Override
public String toString() {
return "小怪兽" + name +"生命值:" + hp;
}
/**
* 判断死没
* @return true表示活的,false表示死了
*/
public boolean isAlive() {
return hp > 0;
}
}
下面代码是模拟的战斗过程
package mt;
public class Test4 {
/**
* 判断怪兽群全死没
* @param ms 怪兽群
* @return true还有没死的,false全日白
*/
public static boolean isAllAlive(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.println("**********第" + round + "回合***********");
Monster m =null;
do {
int index = (int) (Math.random()*ms.length); //随机在一群小怪兽里选个没死的出来打
m = ms[index];
} while (!m.isAlive());
System.out.println(m.getName() + "小怪兽攻击奥特曼" + u.getName());
m.attack(u);
System.out.println(u);
if (u.getHp() > 0) {
double rout = Math.random(); //产生概率
if (rout <=0.8) {
System.out.println(u.getName()+"攻击小怪兽"+ m.getName()); //80%概率普通攻击
u.attack(m);
}
else if(rout<=0.9) {
System.out.println(u.getName()+"使用必杀技攻击小怪兽" +m.getName()); //10%必杀技
u.hugeAttack(m);
}
else {
if (u.getMp() >= 30) { //10%魔法攻击
System.out.println( u.getName() + "使用魔法攻击小怪兽");
u.magicAttack(ms);
}
else {
System.out.println( u.getName() + "使用魔法攻击失败!!");
}
}
for (int i = 0; i < ms.length; i++) {
System.out.println(ms[i]);
}
}
round++;
u.setMp(u.getMp() + 10);
} while (u.getHp() > 0 && isAllAlive(ms));
if (u.getHp() > 0) {
System.out.println(u.getName()+"胜利!!!!");
}
else {
System.out.println("小怪兽胜利!!!");
}
}
}