java - 寻找如何均匀生成敌人的想法

标签 java android

我让我的敌人根据随机数生成,这是我写的第一种方式,有时玩家可以躲在一个角落里,但暂时什么也没有出现,让游戏变得简单。我写的第二种方法稍微好一点,因为玩家不能静止不动太久,但这意味着屏幕上其他任何地方都不会产生看起来不正确的东西。

第一个是:

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);
        }
    }

我想继续第二种方法,因为它感觉最自然,我只需要有机会在屏幕上的其他地方生成它们。

最佳答案

我想我明白你在说什么。基本上,小怪的产卵位置应该是随机的,但较高的部分应该在玩家周围。

好吧,您需要提出一个指数方程来计算出距玩家的生成距离。因此,您想要获取玩家距离,并用随机值作为种子。要获得这个种子,您需要生成一个随机数,然后将其与自身相乘。这为您提供了与玩家之间产生生物的距离。

例如,如果您的游戏方 block 是 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 大小的生成区域)。

关于java - 寻找如何均匀生成敌人的想法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21338137/

相关文章:

android - 如何在 Android Studio 的 LogCat 中过滤多个标签?

java - JPanels 不会在cardLayout 中切换

java - 如何上传视频到客户自己的youtube channel

java - Android 中的 SimpleXML 反序列化错误

android - 在提交 ANDROID 之前如何保存屏幕截图和元数据?

android - 添加核心 ktx 后 Gradle 构建失败

android - 动画期间点击 View 没有反应

java - 查找 (x,y) 坐标之间的最大距离

java - java类之间的共享方法

Android 如何限制用户从应用程序文件夹复制数据..?