在游戏前,我需要对速度属性和玩家对象的速度属性两个对象数组列表(Room.enemies)进行排序,这样我才能知道我需要按哪种顺序运行攻击方法。
例如,在room.enemies数组中,我有一个地精(速度10),蜘蛛(速度8),地精(速度10),而玩家的速度为12,我想先对玩家执行攻击敌人,然后然后执行三遍Attackplayer方法(地精,地精,地精)。
import java.util.Random;
public class Battle {
private boolean attackPlayer(Player player, Enemy enemy) {
int edamage = 0;
int eamplifier = enemy.getDamage() - player.getDefense();
Random dice = new Random();
for (int i=1; i < enemy.getAgility(); i++) {
edamage += dice.nextInt(10) + eamplifier;
}
if (edamage < 0) {
edamage = 0;
}
return player.takeDamage(edamage);
}
private boolean attackEnemy(Player player, Enemy enemy) {
int damage = 0;
int amplifier = player.getDamage() - enemy.getDefense();
Random dice = new Random();
for (int i=1; i < player.getAgility(); i++) {
damage += dice.nextInt(10) + amplifier;
}
if (damage < 0) {
damage = 0;
}
return enemy.takeDamage(damage);
}
private void gameturn(Player player, Room room) {
}
}
答案 0 :(得分:1)
如果您使用的是Java 8或更高版本(希望如此)。 您可以将便利比较器与Stream API一起使用。
类似以下内容:
ArrayList<String> list = new ArrayList(....);
list.sort(Comparator.comparing(Enemy::getSpeed)
.thenComparing(Enemy::someOtherProperty));
或者仅使用Stream API:
List<String> sortedBySpeed = list.stream()
.sorted(Comparator.comparing(Enemy::getSpeed))
.collect(Collectors.toList());
您将看到敌人sortedBySpeed
排序的列表。