我使我的敵人產卵基於隨機數,我寫的第一種方式,有時候玩家可以隱藏在一個角落,什麼都不是一段時間使遊戲變得簡單。我寫的第二種方式稍微好一些,因爲玩家不能坐得太久,但這意味着屏幕上沒有任何東西產生,看起來不正確。尋找關於如何均勻產生我的敵人的想法
第一個是:
public Weight createWeight() {
decider = Math.random() * 1;
// creates rocks randomly with the lowest chance for l, and the highest chance for m
if (decider <= 0.33) {
// small weight
return new WeightSmall(BitmapFactory.decodeResource(getResources(), R.drawable.weight_s), new Random().nextInt(screenWidth), -10);
} else if (decider <= 0.5 && decider > 0.33) {
// large weight
return new WeightLarge(BitmapFactory.decodeResource(getResources(), R.drawable.weight_l), new Random().nextInt(screenWidth), -10);
} else {
// medium weight
return new WeightMedium(BitmapFactory.decodeResource(getResources(), R.drawable.weight_m), new Random().nextInt(screenWidth), -10);
}
}
第二:
public Weight createWeight() {
decider = Math.random() * 1;
Random random = new Random();
spawnRange = random.nextInt((player.getX() + player.getWidth()) - (player.getX() - player.getWidth())) + (player.getX() - player.getWidth());
// creates rocks randomly with the lowest chance for l, and the highest chance for m
if (decider <= 0.33) {
// small weight
return new WeightSmall(BitmapFactory.decodeResource(getResources(), R.drawable.weight_s), spawnRange, -10);
} else if (decider <= 0.5 && decider > 0.33) {
// large weight
return new WeightLarge(BitmapFactory.decodeResource(getResources(), R.drawable.weight_l), spawnRange, -10);
} else {
// medium weight
return new WeightMedium(BitmapFactory.decodeResource(getResources(), R.drawable.weight_m), spawnRange, -10);
}
}
我想,因爲它感覺最自然進步的第二種方法,我只需要在其他地方產卵他們的機會在屏幕上。
不知道如果這就是你想要的東西,但'Random'還支持高斯分佈:http://www.javamex.com/tutorials/random_numbers/gaussian_distribution_2.shtml – zapl
爲有效地寫你的spawnRange數學簡化爲: ' player.getX()+ player.getWidth()' 我不清楚你在問什麼(WeightSmall/Medium/Large實際上做了什麼?),但是你的計算範圍很小。 另外''math.Random()* 1',不知道你打算通過乘以1來完成。 – spartygw
這三種類型的權重是玩家要避免的「跌倒」。我要求更高的機會在我列出的球員範圍內產生重量,但仍然有機會在其他地方產卵,因爲當前權重僅包圍球員。然後乘以1,我認爲它允許一個最大爲1的隨機數。 –