【课堂】模拟奥特曼打小怪兽

模拟奥特曼和一群怪对打(回合制)

下面代码是创建的奥特曼的类


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("小怪兽胜利!!!");
		}
	}
}


posted @ 2015-05-06 21:40  乜天  阅读(248)  评论(0编辑  收藏  举报