更新:添加了更多详细信息,以便为我给出的代码片段提供更多上下文。
我最近提交了一个我在Processing中制作的游戏,作为我大学类(class)的一部分,但它并没有完全达到我想要的效果,所以我正在努力添加一些功能并将其中一些重新编码为使其更有趣且可重玩。
无论如何,我遇到的问题是敌人波浪的产生。我的游戏是如何工作的,有一个专门针对单个敌人实例的类,并且我为敌人生成创建了一个 ArrayList。下面的代码有一个 for 循环,它根据设置为整数 waveCount 的波形数量来设置自身。它将敌人的数量添加到 ArrayList 中,数量等于 waveCount 的值,然后将敌人显示在屏幕上。如果敌人被射击,他们会被单独移除,如果他们接触玩家,玩家的生命值会减少,然后玩家位置会重置,敌人的位置也会重置。它们只是从屏幕顶部向下移动到底部的玩家,慢慢地将自己定位到玩家的 x 和 y 位置。
我让敌人的波浪正常工作,但在游戏的最后一个版本中,当玩家使用 if 语句达到一定分数时,我手动增加了波浪,现在我想找出一种方法让游戏自动添加波浪当玩家分数达到 200 增量时挥手。我还希望每次游戏分数达到 1000 增量时,敌人的速度都会稍微增加。
现在,我的编码方式导致它只会将波数增加一次(200/400/600/等),然后再返回到单波。我将敌人作为类的 ArrayList 进行处理。如果有人能帮助我找到一种方法来编写一个自动化的无限波浪系统,以 200 分的增量添加一波,并且以 1000 分的增量增加敌人的速度,这将非常有帮助!
updateWave = false;
hasAddedWave = false;
scoreCheck = score.score;
enemySpeedX = 0.6;
enemySpeedY = 1;
waveCount = 1;
if(scoreCheck > 0 && scoreCheck % 200 == 0 && hasAddedWave == false){
updateWave = true;
}
if(updateWave == true && hasAddedWave == false){
waveCount += 1;
hasAddedWave = true;
}
if(updateWave == true && hasAddedWave == true){
updateWave = false;
hasAddedWave = false;
}
for(int i = 0; i < waveCount; i++){
zombiePosition = random(100,400);
zombies.add(new Enemy(zombiePosition,-50,enemySpeedX,enemySpeedY));
zombies.get(i).show();
}
最佳答案
理论上,你需要的是一种表达方式:
"Hey, this guy reached 200 points further than before! Let's throw a new wave at him! "
仅通过这句话,您就可以轻松推断出它将通过重复的循环传递很多内容,显然我无法给您提供代码示例,因为我无法猜测您的代码是什么(正如有人已经指出的那样,您还没有) t 给了我们很多工作要做)。尝试一些诸如
if (pointsNow >= pointsBefore+200) doSomething
此外,它回到单波的原因是:
if(scoreCheck > 0 && scoreCheck % 200 == 0 && hasAddedWave == false){
updateWave = true;
}
这个 if 语句意味着 scoreCheck
大于 0,并且能被 200 整除。这意味着 ScoreCheck 除以 200 余数为 0。想象一下,如果您的玩家得分为 401,则分数检查将无法除以 200,因为余数不是 0。相反,请尝试:
scoreCheck > lastScoreCheck
在lastScoreCheck中添加200(或任何你想要的金额)
最后,关于速度,再次考虑一下变量。而不是 speed = 1
(例如)有:speed = 1 + level*multiplier
,它的作用是将速度设置为某个值(在本例中为 1),并添加一个乘数,该乘数取决于另一个变量(即级别)。您可以操纵它来使游戏变得更容易或更难,例如:speed = 1 + level*5
比 speed = 1 + level*0.5
快很多
关于java - 制作游戏时敌人数量/速度会以一定的分数增量自动增加 - 如何逻辑地实现?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22901825/