1. Этот сайт использует файлы cookie. Продолжая пользоваться данным сайтом, Вы соглашаетесь на использование нами Ваших файлов cookie. Узнать больше.
  2. Вы находитесь в сообществе Rubukkit. Мы - администраторы серверов Minecraft, разрабатываем собственные плагины и переводим на различные языки плагины наших коллег из других стран.
    Скрыть объявление
Скрыть объявление
В преддверии глобального обновления, мы проводим исследования, которые помогут нам сделать опыт пользования форумом ещё удобнее. Помогите нам, примите участие!

Помогите Поделить игроков на 2 команды

Тема в разделе "Разработка плагинов для новичков", создана пользователем koliab, 10 апр 2019.

  1. Автор темы
    koliab

    koliab Активный участник Пользователь

    Баллы:
    76
    Имя в Minecraft:
    kolia1_1
    Игроки:
    Bukkit.getOnlinePlayers();

    Команды:
    private static ArrayList<Player> RedTeam = new ArrayList<>();
    private static ArrayList<Player> GreenTeam = new ArrayList<>();

    Нужно поделить их ~поровну,
    игроков 5 == RedTeam(3) GreenTeam(2)?
    игроков 4 == RedTeam(2) GreenTeam(2)

    Делал так но чую не то, есть другие варианты?
    Код:
          for (Player player : Bukkit.getOnlinePlayers()) {
                    Random rand = new Random();
                    int random = rand.nextInt(100) + 1;
                    if (random >= 0 && random <= 50) {
                        RedTeam.add(player);
                    } else if (random >= 51 && random <= 100) {
                        GreenTeam.add(player);
                    }
                }
     
    Последнее редактирование: 10 апр 2019
  2. StepByStep

    StepByStep Активный участник Пользователь

    Баллы:
    61
    Имя в Minecraft:
    StepByStepler
    При таком варианте не всегда команды будут равноценны (например, может быть 4 против 2). Лучше найти половину от количества всех игроков (int halfAmount = Bukkit.getOnlinePlayers().size() / 2) и поместить первые halfAmount игроков в одну команду, а остальных в другую
     
  3. alexandrage

    alexandrage Старожил Пользователь

    Баллы:
    173
    Код:
        public void add(String player) {
            int min = Integer.MAX_VALUE;
            for (Entry<String, Team> team : teams.entrySet()) {
                if (team.getValue().getSize() < min) {
                    min = team.getValue().getSize();
                }
            }
            List<Team> tmp = new ArrayList<Team>();
            for (Entry<String, Team> team : teams.entrySet()) {
                if (team.getValue().getSize() == min) {
                    tmp.add(team.getValue());
                }
            }
            Team team = tmp.get((new Random()).nextInt(tmp.size()));
            team.add(player);
        }
    Рандомное и ровное деление на любое число команд.
    Как то так юзается.
    Код:
            Map<String, Team> teams = new HashMap<String, Team>();
            teams.put("red", new Team("red"));
            teams.put("green", new Team("green"));
            Arena arena = new Arena(teams);
            for(Player player: Bukkit.getOnlinePlayers()) {
                arena.add(player.getName());
            }
     
    Последнее редактирование: 11 апр 2019
  4. Автор темы
    koliab

    koliab Активный участник Пользователь

    Баллы:
    76
    Имя в Minecraft:
    kolia1_1
    Не то что мне надо
     
  5. alexandrage

    alexandrage Старожил Пользователь

    Баллы:
    173
    Как раз то. Тебе же делить надо на команды не? Мой метод рандомно распределяет по командам с меньшим числом юзеров. В конце становится поровну.
     
    Последнее редактирование: 11 апр 2019
  6. Автор темы
    koliab

    koliab Активный участник Пользователь

    Баллы:
    76
    Имя в Minecraft:
    kolia1_1
    Через скорбордный теам мне не надо
     
  7. hyndorik

    hyndorik Активный участник Пользователь

    Баллы:
    98
    Имя в Minecraft:
    hyndo
    Ор, а причем тут скорборд?)
     
  8. alexandrage

    alexandrage Старожил Пользователь

    Баллы:
    173
    Это всего лишь класс с листом юзеров в моем примере. Ору в голос. А тебе нужен всего лишь метод моего рандома.
     
  9. Автор темы
    koliab

    koliab Активный участник Пользователь

    Баллы:
    76
    Имя в Minecraft:
    kolia1_1
    какой у тебя их 2
     
  10. Автор темы
    koliab

    koliab Активный участник Пользователь

    Баллы:
    76
    Имя в Minecraft:
    kolia1_1
    Ну вот у меня есть команды, мне нужно поделить их и внести игрока в команду

    Код:
    ArrayList<Player> red = new ArrayList<>();
            ArrayList<Player> green = new ArrayList<>();
            Player[] players = Bukkit.getOnlinePlayers().toArray(new Player[0]);
     
  11. alexandrage

    alexandrage Старожил Пользователь

    Баллы:
    173
    Ну ты и слепой.
     
  12. alexandrage

    alexandrage Старожил Пользователь

    Баллы:
    173
    Короче давай так.
    Код:
    package Example;
    
    import java.util.ArrayList;
    import java.util.List;
    import java.util.Map;
    import java.util.Map.Entry;
    import java.util.Random;
    
    import org.bukkit.entity.Player;
    
    public class Arena {
        private Map<String, Team> teams;
    
        public Arena(Map<String, Team> teams) {
            this.teams = teams;
        }
    
        public void add(Player player) {
            int min = Integer.MAX_VALUE;
            for (Entry<String, Team> team : teams.entrySet()) {
                if (team.getValue().getSize() < min) {
                    min = team.getValue().getSize();
                }
            }
            List<Team> tmp = new ArrayList<Team>();
            for (Entry<String, Team> team : teams.entrySet()) {
                if (team.getValue().getSize() == min) {
                    tmp.add(team.getValue());
                }
            }
            Team team = tmp.get((new Random()).nextInt(tmp.size()));
            team.add(player);
        }
    
        public Team getPlayerTeam(Player player) {
            for (Entry<String, Team> team : teams.entrySet()) {
                if (team.getValue().contains(player)) {
                    return team.getValue();
                }
            }
            return null;
        }
       
        public Team getTeam(String name) {
            return this.teams.get(name);
        }
       
        public String toString() {
            return this.teams.toString();
        }
    }
    Код:
    package Example;
    import java.util.ArrayList;
    import java.util.List;
    import org.bukkit.entity.Player;
    public class Team {
        private String name;
        private List<String> players = new ArrayList<String>();
        public Team(String name) {
            this.name = name;
        }
        public int getSize() {
            return this.players.size();
        }
        public void add(Player player) {
            this.players.add(player.getName());
        }
        public boolean contains(Player player) {
            return this.players.contains(player.getName());
        }
        public String getTeamName() {
            return this.name;
        }
       
        public List<String> getPlayers() {
            return this.players;
        }
        public String toString() {
            return this.name+":"+this.players.toString();
        }
    }
    
    Код:
            Map<String, Team> teams = new HashMap<String, Team>();
            teams.put("red", new Team("red"));
            teams.put("green", new Team("green"));;
            Arena arena = new Arena(teams);
            for(Player player : Bukkit.getOnlinePlayers()) {
                arena.add(player);
            }
     
  13. Автор темы
    koliab

    koliab Активный участник Пользователь

    Баллы:
    76
    Имя в Minecraft:
    kolia1_1
    чем плох этот вариант?


    PHP:
                   Player[] players Bukkit.getOnlinePlayers().toArray(new Player[0]);

                    for (
    int i 0Bukkit.getOnlinePlayers().size(); i++) {

                        if (
    GreenTeam.size() < RedTeam.size()) {
                            
    GreenTeam.add(players[i]);
                        } else {
                            
    RedTeam.add(players[i]);
                        }
                    }
     
  14. alexandrage

    alexandrage Старожил Пользователь

    Баллы:
    173
    Гвоздями прибит к числу команд.
     
  15. hyndorik

    hyndorik Активный участник Пользователь

    Баллы:
    98
    Имя в Minecraft:
    hyndo
    Зубри жаву, завтра наизусть расскажешь
     

Поделиться этой страницей