2012-02-13 44 views
0

我试图做一个吃豆子,所以即时通讯使用数组[8] [8],其中我有一个PacMan,2幽灵,墙壁和吃豆子可以吃的点。随着pacman吃点你开始得到空的空间。随机函数不工作,因为我希望

因此,我决定做一个函数随机ramdonly分配水果只有空的空间,但问题是,更多的空格,你得到的水果开始疯狂,并出现在我的数组。尽管我有空的空间,但我希望总能获得成果。

这里是我使用的方法,请帮助。

public void AppearFruit() 
{ 
    for(int i= 0; i<_world.length; i++){ 
     for(int j= 0; j<_world.length; j++){ 
      Random as = new Random(); 
      int fru = as.nextInt(20); 
      if(fru==10){ 
       if(_world[i][j] instanceof Empty){ 
        _world[i][j] = new Fruit(i,j); 
       } 
      }   
     } 
    } 
} 

public void DisappearFruit() 
{ 

    for(int i= 0; i<_world.length; i++){ 
     for(int j= 0; j<_world.length; j++){ 
      if (_world[i][j] instanceof Fruit){ 
       if(contfru>=3) { 
        _mundo[i][j] = new Empty(i,j); 
        contfru=0; 
       } 
      } 
     } 
    } 
} 
+0

看起来像功课,感觉就像作业...是功课吗?不是,但认真,你能用英文至少发布你的代码吗? – 2012-02-13 08:11:02

+0

是的,我可以,在这里: – Sabaspro 2012-02-13 08:14:24

+2

对不起,我们不知道如何以及何时调用这两种方法,很难说出发生了什么。顺便说一句,方法名称不应以大写字母开头。在你的循环中,罪人循环应该测试条件j <_world [i] .length。这只适用于你的数组是“方形”的。 – 2012-02-13 08:21:08

回答

1

这取决于你的意思是“获得水果的同样机会”。

你现在将独立地给每个空的空间一个20分之一的水果机会。所以如果你有一个2-300个空格的大网格,你会期望每次运行AppearFruit时都会得到10-15个水果。

我不知道什么contfru变量在DisappearFruit,但我会想象它没有摆脱任何接近这个速度的水果 - 所以随着时间的推移,越来越多的水果会出现。

编辑:你的更新后,你问

越来越水果一样的机会,尽管空的空间,我有

根据定义,这意味着当前的方法根本无法工作,因为你给每个空间获得成果的机会均等。将空白空间加倍会使得到的水果数量增加一倍(平均而言)。

这听起来像你想要的东西更像是一种方法来添加一个水果,它扫描空的空间数组,并将水果随机分配给其中一个空间。然后你可以调整这种方法的频率 - 也许它每隔50圈发生一次,也许每隔30 + rnd(40)转,或者每60秒等等发生一次。你可以调整通过频率的多少果子出现(以及有多快)调用。

+0

这听起来像比扫描每个空间更好的主意,我该怎么做? – Sabaspro 2012-02-13 08:36:03

+0

和我的意思是contfru,它是一个int变量,我用它在3回合后消失水果 – Sabaspro 2012-02-13 08:38:40

0

好吧我想我得到你为什么得到许多水果。在你的方法AppearFruit,当你分配一个水果,你不增加countfru,让你的方法DisappearFruit从来没有工作像预期

0

眼下的水果出现在probabilty是每个空场,每次5%和移动。就像你有一个空场和移动吃豆子10次,概率为

P_fruit = 1 - (19/20)^10 
     = 40.1% 

我想,该算法是不坏的,你可能会经常把它远。

编辑

您可以通过使用低得多的概率调整的行为,但最终,这将是相同的:如果你需要更多的水果,只需保持吃豆子移动。

我会断开运动的水果代。想想一个计时器 - 就像每隔30秒触发一次事件,以低概率在空白处生成果实。你甚至可以说:我定义的概率是一个水果单板上生成和然后随机选择当前空的空间之一号码:(伪)

placeFruit(board) 
    if (random() > 5%) return; // no fruit this time 
    List fields :== getAllEmptyFields(board); 
    fruitField :== random(fields.size()); 
    fruitField.add(new Fruit()); 
+0

你不觉得概率高吗?计算一个水果出现的次数,我怎么能得到更低的概率? – Sabaspro 2012-02-13 08:45:11

相关问题