Как отсортировать два объектных массива? - PullRequest
0 голосов
/ 12 января 2019

Для игры мне нужно два вида: массив объектов (Room.enemies) на атрибуте скорости и объект игрока с его атрибутом скорости, чтобы я мог знать, в каком порядке мне нужно запускать методы атаки.

Например, в массиве room.enemies у меня есть гоблин (скорость 10), паук (скорость 8), гоблин (скорость 10), и у игрока есть скорость 12, я хотел бы сначала выполнить атаку врага от игрока и затем выполните метод атакующего игрока три раза (гоблин, гоблин, гоблин).

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) {

    }
}

1 Ответ

0 голосов
/ 12 января 2019

Если вы используете 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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...