请教各位大侠:
    最近小弟要作个小游戏,玩家选1~9数字(一次一个),如果与后台出现的数字一致(也是1~9)就中奖,数字越大,其中奖的几率越低,但是对应的奖品越好。我本来想把这些写死在程序里,但考虑到以后的重用性,最好能写成可配置的(不管用数据库还是其他方式都可)。小弟编程经验尚浅,望各位老大不吝指点,谢谢!!!

解决方案 »

  1.   


    public String begin(int x)
    {
     if (x<=3)
       {产生随机数0-6} //中奖率...%
     if (x>3 && x<=5)
       {产生随机数1-7} //中奖率...%
     if (x>5 && x<=7)
       {产生随机数2-8} //中奖率...%
     if (x>7 && x<9)
      {产生随机数3-9} //中奖率...%}在每个 {产生随机数...} //中奖率...%
    里面加一句如 switch case 1:return "电视机"
      

  2.   

    to liang8305(七分之雨后):
        呵呵,一次只能选一个数字,玩家参与次数越多,得奖的机会就越多。
        考虑重用是因为以后可能是1~5个数字,每个数字的中奖几率和这次的也不同。
        可以这样理解:在去摸球之前你已经把你猜到的数字告诉公证,当你从盒子里拿出来的球号码和你告诉公证的一致,则中奖。盒子里数字大的球少,数字小的球多。
      

  3.   

    to superman421(38度的雪):
       谢谢,你说的很对,这样就不要以后有一个类似的游戏,就要再重新写个程序来跑了,只要改配置就可以了。
      

  4.   

    to gifted1982(gifted1982):"如何编写程序来保证数字越大,其中奖的几率越低
    有没有好的办法"
    这个也是我想问的,呵呵
      

  5.   

    概率可以这样算吧,虽然有点笨。n = 随机数 1 to 45if 1<=n<=9     return 1
    if 10<=n<=17   return 2
    if 18<=n<=24   return 3
    if 25<=n<=30   return 4
    if 31<=n<=35   return 5
    if 36<=n<=39   return 6
    if 40<=n<=42   return 7
    if 43<=n<=44   return 8
    if n==45       return 9
      

  6.   

    招聘
    java工程师
    java jsp servlet spring hibernate js css
    上面会一部分既可qq 283765999 
    地点:北京
      

  7.   

    import java.util.*;
    public class Test
    {
    public int timer=0;
    public int ii =0;;
    public static void main(String args[]) throws Exception
      {   System.out.println("猜数字游戏开始了!请输0-9之间任意数字");
          Test t= new Test();
          System.out.println(t.myrandom(8,50));//将数字8传入摇奖机.然后设置中奖机率+50,false表示没猜对.true表示猜对了.
      }
      public boolean myrandom(int in,int probab)//第一个参数表示你传入的数字.第二个表示中奖机率.
      {  Random r = new Random();
          for (int i=0;i<=(in+probab);i++)
          {
           ii=r.nextInt(10);
           System.out.println("ii = "+ii);   
           if (ii==in)
             {
               timer++; 
               if (timer==in)
                   {return true;}    
             }
          }
       return false;
      }
    }哈哈。我写了一个算法..写得辛苦了点.20分就全给我了吧。数字越大,中奖机率越小.可以手动添加中奖机率.
    此算法拿游戏公司去应该都行了吧?简单实用~
      

  8.   

    725137(2006年不会菜) 
    可是照你的算法,能保证+50
    是不是可以修改成这样Random r = new Random();
    int timer;
    int jcm = JCM(probab, 10) //最小公倍数
          for (int i=0;i<= jcm ;i++)
          {
           ii=r.nextInt(10);
           System.out.println("ii = "+ii);   
           if (ii==in)
             {
               timer++; 
               if (timer==jcm/probab)
                   {return true;}    
             }
          }
       return false;
      

  9.   

    一共有N种选项1,2,...N,第i个选项的出现概率为f(i),自然的f(1)+f(2)+...+f(N) = 1。
    我的思路是:想像一条长度为1的线段,将它分割为N段,第i段的长度为f(i),然后在这个线段中随机取一点,看这点是落在哪一段中。
    应该有办法做出0~1之间精度足够高的平均分布的随机序列吧,然后和这些线段比较一下就有结果了(我所指的“精度足够高”的意思是说,在任意一个线段中i中,都可以落下足够多的随机序列点)。
    然后把N和f(i)放在配置文件里就可以了
      

  10.   

    to 725137(2006年不会菜):
    为什么要i<=(in+probab)?如果5的中奖率是50%,i<=55,好像就有问题了吧?
      

  11.   

    "并不是给出的中奖率加50就是中奖率50%"什么意思?真正的中奖率怎么算?我试过了,那个probab不是中奖率吗?
      

  12.   

    哈哈。结贴吧...多看看代码啊.......
    probab是增加中奖的机会...
    也可以说成是增加中奖率.但不是用%分来说的中奖率。具体%比是多少.还得跟据参数自已算下.
      

  13.   

    比如你把probab设成0..那么1的中奖率就是50%.2的中奖率就是33.33333% 3的中奖率就是25%.
    4的中奖率就是20%..5的中奖率就是16% 7的中奖率就是14%.....
    ..............
    跟据设的值自已推算下百分数表示的中奖率
      

  14.   

    把这句取消了。这句是我测试时用的
     System.out.println("ii = "+ii);