2012-02-13 48 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

相關問題