Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/203.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 想知道如何均匀地繁殖我的敌人吗_Java_Android - Fatal编程技术网

Java 想知道如何均匀地繁殖我的敌人吗

Java 想知道如何均匀地繁殖我的敌人吗,java,android,Java,Android,我让我的敌人根据随机数繁殖,这是我写的第一种方式,有时玩家可以躲在一个角落里,暂时什么都没有,这让游戏变得简单。我写的第二种方式稍微好一点,因为玩家不能长时间坐着不动,但这意味着屏幕上其他地方没有任何看起来不对劲的东西 第一个是: public Weight createWeight() { decider = Math.random() * 1; // creates rocks randomly with the lowest chance for l, an

我让我的敌人根据随机数繁殖,这是我写的第一种方式,有时玩家可以躲在一个角落里,暂时什么都没有,这让游戏变得简单。我写的第二种方式稍微好一点,因为玩家不能长时间坐着不动,但这意味着屏幕上其他地方没有任何看起来不对劲的东西

第一个是:

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;
//随机创建岩石,l的几率最低,m的几率最高

如果(decider我想我明白你的意思了。基本上,怪物的繁殖位置应该是随机的,但更高的部分应该在玩家周围

好的,你需要用一个指数方程来计算玩家的繁殖距离。所以,你需要计算玩家的距离,并用一个随机值进行种子设定。要得到这个种子,你需要生成一个随机数,然后将其自身相乘。这给你从玩家到繁殖怪物的距离。

例如,如果您的游戏方块是
50x50

玩家处于
0,0

0-5
生成一个随机数,并将其自身相乘

0-1 = within 1 block
1-2 = within 4 blocks
2-3 = within 9 blocks
3-4 = within 16 blocks
4-5 = within 25 blocks
这意味着您有60%的几率让怪物在玩家所在的40%游戏区域内繁殖

你将需要调整你自己使用的确切公式,并显然想出一个合适的游戏区大小


这将非常有效,因为这意味着如果玩家站在墙旁边,一半的盒子在游戏区域之外,在这种情况下,你会在墙上繁殖怪物。因此怪物有一半大小的区域繁殖,这将有助于防止玩家在角落露营(这将给他们1/4大小的繁殖区域).

如前所述,
math.random
返回一个介于0和1之间的值。将该值乘以1得到相同的值。因此,
*1
已过时。您可以做的是将其转换为
*int
,得到一个介于0和100之间的整数

您的
spawnRange
player.getX()-player.getWidth()
。如果您正确命名了它,您会遇到一大堆问题。首先,如果player位于
x=0
,您将尝试在屏幕外生成内容

第二,敌人总是在玩家后面产卵,并且只能在与玩家一样大的区域产卵,所以你一次可能只能产卵一个敌人,而它与玩家之间的距离最多只有几个像素

你通常想要的是在玩家附近繁殖敌人,而不是在他的脸上。如果你也想在整个地图内繁殖,你需要应用以下数学:

spawnlange
距离玩家的
x
(最好是某些呼吸空间宽度的两倍)至少为
x
的最高位置

minimumDistance = player.getX()+player.getWidth();
Spawnrange = random.nextInt( screenXSize - minimumDistance ) ) + minimumDistance;
这会在屏幕的
x
范围内生成一个结果,至少有一个玩家的大小远离玩家的位置。当然,你也可以通过反转数学来合并玩家后面的值


关于下一个问题:你想在远处和附近繁殖敌人。我要做的是,一次繁殖两个敌人:一个在附近,一个在远处。一个在后面,另一个在前面。使用随机函数确定它是近还是远,然后应用适当的
random.nextInt()

不确定这是否是您想要的,但
随机
也支持高斯分布:编写的spawnRange数学有效地简化为:
player.getX()+player.getWidth()
我不清楚您在问什么(weightssmall/Medium/Large实际上是做什么的?),但这里的计算范围很小。同样使用
math.Random()*1
,不确定乘以1要完成什么。这三种类型的权重是“下降”的为了让玩家避免。我要求有更高的机会在我概述的玩家范围内产生权重,但仍然有机会在其他地方产生权重,因为当前权重正好围绕着玩家。乘以1,我也一样,我认为它允许一个随机数高达1。spawnRangeTest=random.nextInt(5-0);如果(spawnRangeTest>0&&spawnRangeTest<1){}else if(spawnRangeTest>1&&spawnRangeTest<2){}else if(spawnRangeTest>2&&spawnRangeTest<3){}else if(spawnRangeTest>3&&spawnRangeTest<4){else if(spawnRangeTest>4&&spawnRangeTest<5){}我走了那么远,但我不知道放在括号内的是什么。然后我会再次随机,但在较小的值之间吗?例如在player.getX到player.getX+player.getWidth之间?如果不知道代码是如何工作的,很难确切地说要放在括号内的是什么,但这将类似于生成位置在player.getX之间到“一个距离,如果你在一个街区里的话”。沿着这些线。好的,谢谢。这是我一直在想的,但不是百分之百确定。我会测试并回复你。根据你的建议,我很困惑如何定义“街区”.考虑到我目前拥有基于屏幕宽度的所有内容,我该怎么做?我会说一个块是屏幕宽度的4%,因此25个块是宽度的100%吗?是的,我使用了“块”一词,假设播放区域是某种网格。屏幕宽度的1%也可以。
minimumDistance = player.getX()+player.getWidth();
Spawnrange = random.nextInt( screenXSize - minimumDistance ) ) + minimumDistance;