zoukankan      html  css  js  c++  java
  • 模拟简单对打(昨天代码的小修改)

    精简了昨天的代码和加上了一些注释

    加技能攻击,一挑一群,循环选择英雄战斗(前面设置血量那里得变)都有可能加的但没时间试验。

    下面代码是创建的“Hero”类

    package mt;
    
    public class Hero {
    	private  String name;    //英雄名字
    	private  int ability_力量;   //力量值
    	private  int ability_智力;    //智力值
    	private int hp;       //生命值
    	/**
    	 * 构造器
    	 * @param name  英雄名字
    	 * @param life  英雄生命
    	 */
    	public Hero(String name,  int hp ) {
    		this.name = name;
    		this.hp = hp;
    	}
    	@Override
    	public String toString() {
    		String play = "英雄名	生命值	力量	智力" + "
    " 
    				+  getName() + "	" + getLife() + "	" 
    				+ getAbility_力量() + "	"+ getAbility_智力();
    		return play;
    	}
    	/**
    	 * 访问英雄名字
    	 * @return  英雄名字
    	 */
    	public String getName() {
    		return name;
    	}
    	/**
    	 * 设置英雄姓名
    	 * @param name  名字
    	 */
    	public void setName(String name) {
    		this.name = name;
    	}
    	/**
    	 * 设置力量
    	 * @param ability_力量   力量值
    	 */
    	public void setAbility_力量(int ability_力量) {
    		this.ability_力量 = ability_力量;
    	}
    	/**
    	 * 访问英雄力量
    	 * @return 力量值
    	 */
    	public int getAbility_力量() {
    		return ability_力量;
    	}
    	/**
    	 * 访问英雄智力
    	 * @return   智力值
    	 */
    	public int getAbility_智力() {
    		return ability_智力;
    	}
    	/**
    	 *  设置英雄智力
    	 * @param ability_智力  智力值
    	 */
    	public void setAbility_智力(int ability_智力) {
    		this.ability_智力 = ability_智力;
    	}
    	/**
    	 * 访问英雄生命
    	 * @return  生命值
    	 */
    	public int getLife() {
    		return hp;
    	}
    	/**
    	 * 设置英雄生命
    	 * @param life  生命值
    	 */
    	public void setLife(int life) {
    		this.hp = life > 0? life:0;
    	}
    /**
     * 普通攻击
     * @param h  被攻击对象
     */
    	public void normalAttact(Hero h) {
    		int a = (int) (Math.random()*51+20);
    		int n = this.ability_力量  / 2 + this.ability_智力 / 3 + a ;
    		h.setLife(h.getLife() -n);
    	}
    	/**
    	 * 暴击
    	 * @param h  被暴击的对象
    	 */
    	public void criticalAttact(Hero h) {
    		int n = (int) (this.ability_力量  * 1 + this.ability_智力 * 1.3) ;
    		h.setLife(h.getLife() -n);
    	}
    	/**
    	 * 判断死没
    	 * @return  true表示没死,false表示死了
    	 */
    	public boolean isAlive() {
    		return hp> 0;
    	}
    }
    
    

    下面是模拟对战的代码

    package mt;
    
    import java.util.Scanner;
    
    public class Test {	
    	public static void main(String[] args) {
    		Scanner sc = new Scanner(System.in);
    		System.out.print("设定英雄的数量:");  
    		int nmb = sc.nextInt();              //设定英雄的数量
    		Hero[] player = new Hero[nmb];
    		for (int i = 0; i < player.length; i++) {
    			System.out.print("设定英雄的名字:");
    			String name = sc.next();        //设定英雄的名字
    			System.out.print("设定英雄的生命值:");
    			int hp = sc.nextInt();        //设定英雄的生命值
    			Hero hero = new Hero(name , hp);
    			System.out.print("设定英雄的力量值:");
    			int power =sc.nextInt();     //设定英雄的力量值
    			System.out.print("设定英雄的智力值:");
    			int wit =sc.nextInt();      //设定英雄的智力值
    			hero.setAbility_力量(power);
    			hero.setAbility_智力(wit);
    			player[i] = hero;      //用来存储输入的英雄的
    		}
    		for (int i = 0; i < player.length; i++) {
    			System.out.println(player[i]+ "	编号:" + (i+1));   //把英雄编号
    		}
    		System.out.print("选择第一位出战的英雄编号:");
    		int  first = sc.nextInt()-1;                 //选择的第一个英雄编号
    		System.out.print("选择第二位出战的英雄编号:");
    		int  second = sc.nextInt()-1;               //选择的第二个英雄编号
    		int i = 1;  //显示战斗第几轮了
    		do {	
    			System.out.println("********第" + i++  + "轮战斗********");
    			double n = Math.random();   //模拟选择的第一英雄攻击的概率
    			if (n <= 0.9) {              //90%的概率普通攻击
    				System.out.println(player[first].getName() + "攻击了" +player[second].getName());
    				player[first].normalAttact(player[second]);
    			}else {                     //10%的概率暴击
    				System.out.println(player[first].getName() + "暴击了" +player[second].getName());
    				player[first].criticalAttact(player[second]);
    			}
    			System.out.println(player[second].getName() + "的生命值:" + player[second].getLife());
    			
    			if (player[second].isAlive()) {
    				double m = Math.random(); //模拟选择的第二英雄攻击的概率
    				if (m <= 0.9) { //90%的概率普通攻击
    					System.out.println(player[second].getName() + "攻击了"
    							+ player[first].getName());
    					player[second].normalAttact(player[first]);
    				} else { //10%的概率暴击
    					System.out.println(player[second].getName() + "暴击了"
    							+ player[first].getName());
    					player[second].criticalAttact(player[first]);
    				}
    				System.out.println(player[first].getName() + "的生命值:"
    						+ player[first].getLife());
    			}
    
    		} while (player[first].isAlive() && player[second].isAlive());  //有死就结束
    		if (player[first].isAlive()) {
    			System.out.println(player[first].getName() + "赢了!!!");
    		}else {
    			System.out.println(player[second].getName() + "赢了!!!");
    		} 
    		sc.close();
    	}
    }
    
    


  • 相关阅读:
    周总结(第十一周)
    周总结(第十周)
    周总结(第九周)
    周总结(第八周)
    周总结(第七周)
    周总结(第六周)
    周总结(第5周)
    周总结(第四周)
    周记
    补周记
  • 原文地址:https://www.cnblogs.com/mt1500/p/4483182.html
Copyright © 2011-2022 走看看