zoukankan      html  css  js  c++  java
  • 【课堂】模拟奥特曼打小怪兽

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

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

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

  • 相关阅读:
    Docker 使用Calico插件配置网络
    Fluentd插件rewrite-tag-filter介绍
    Fluentd Regexp patterns
    gdb 打印数据结构
    g++ -g
    《100-gdb-tips》——查看调用堆栈
    dbghelp.dll 定位异常奔溃信息
    debug skill:烫烫烫屯屯屯
    sizeof()和strlen()的区别
    指针和引用的区别
  • 原文地址:https://www.cnblogs.com/mt1500/p/4483305.html
Copyright © 2011-2022 走看看