Java游戏编程题:英雄升级与元宝消耗统计

Java游戏编程题:

公司现在有个项目,要设计一款游戏,其中等级设置模块功能需求如下:

1、英雄升级,从0级升到1级,概率100%

1级升到2级,有1/3的可能成功;1/3的可能停留原级;1/3的可能下降到0级;

2级升到3级,有1/9的可能成功;4/9的可能停留原级;4/9的可能下降到1级。

每次升级要花费一个元宝,不管成功还是停留还是降级。

求英雄从0级升到3级平均花费的元宝数目。


  这是将近一年前看到的一道题,但是没有马上做出来,而后来因为个人原因不得不放弃对Java的学习,从而回到生活去寻找毕业前的专业的工作,故不了了之。

  原地址: http://blog.sina.com.cn/s/blog_647ef76d0101e1nd.html 见文章最下方,当然文章上文是高深完整的多的题目,当时多少有点高估这会这题了,O(∩_∩)O~

  借最近重拾Java、复习之际,用简单、偷懒地方式码出来。至于更深入完善的可能又要等多一段时间了,O(∩_∩)O~。  

  废话不多说,详见代码如下,题目与偷懒欠缺之处详见下文的注解。

Java代码:

Main主函数类代码:

package life;

import java.util.concurrent.Executors;

public class HeroMain {

 
 public static void main(String[] args) {

   HeroMain.统计(5,10000);  
 }
 
 //创建单线程的线程池执行创建英雄并调用英雄类升到满级方法;
 public static void 统计(final int heros){
  Executors.newSingleThreadExecutor().execute(newRunnable(){
   @Override
    public voidrun(){  
    int count = 0;
    for(intx=1;x<=heros;x++){    //要测试多少个英雄;
     Hero hero = newHero();   //创建英雄类实例对象,不匿名对象,以便实现对数据的统计;
     hero.upGrades();     //调用每个英雄对象本身的升到满级方法;
     count +=hero.getGold();   //统计heros个英雄全部升到满级所需的元宝。
    }
    System.out.println(Thread.currentThread()+":" +heros+"个英雄升到满级总共花费"+count+"个元宝,平均需要"+(double)count/heros+"个元宝");
    }
   });


 }
}

 

Hero类代码:

package life;

import java.util.Random;

public class Hero {
 private int gold =0;  //私有化Hero的属性;
    private intgrade = 0;
 
 public intgetGold(){  //提供查看最后花费元宝/gold数的方法;
  return gold;
 }
 public int getGrade(){ //同上,不过有点多余;
  return grade;
 }
 public void setGrade(int grade){  //用于特殊情况,即指定英雄从某一级别开始升到满级;
  this.grade = grade;
 }
 
 public voidupGrades(){    //英雄/Hero类本身提升至满级的主方法;
  while(this.grade<3){    //循环方法,直到英雄等级到达满级3级;
   this.upGrade();     //调用英雄升级方法;
  }
  System.out.println("线程"+Thread.currentThread()+"花费"+gold+"个元宝后成功到升满级");
 }
 
 public voidupGrade(){     //Hero类各阶段等级提升方法;
  
     int x = newRandom().nextInt(8)+1;  //由随机值来决定英雄等级的升降;
     this.gold +=1;       //无论升级与否均需花费1元宝/gold;
  switch(grade){
  case0:      //如果当前等级为0级;
   if(1<=x&&x<=9)   //100%概率升到1级;
    grade+=1;
   //System.out.println(Thread.currentThread()+"的Hero升到1级成功");
   break;
  case1:      //如果当前等级为1级;
   if(1<=x&&x<=3){
    grade+=1;
    //System.out.println(Thread.currentThread()+"的Hero升到2级成功");
   }
   elseif(4<=x&&x<=6){
    grade+=0;
    //System.out.println(Thread.currentThread()+"的Hero保留原1级");
   }
   else{
    grade-=1;
    //System.out.println(Thread.currentThread()+"的Hero降回0级");
   }
   break;
  case2:      //如果当前等级为2级;
   if(x==5){    //2级升到3级的成功概率为1/9;
    grade+=1;
    //System.out.println(Thread.currentThread()+"的Hero升到3级成功");
   }
   elseif(1<=x&&x<=4){
    grade+=0;
    //System.out.println(Thread.currentThread()+"的Hero保留原2级");
   }
   else{
    grade-=1;
    //System.out.println(Thread.currentThread()+"的Hero降回1级");
   }
   break;
  }
 }
}

 

你可能感兴趣的:(Java基础)