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;
}
}
}