2014-09-01 58 views
-2

我正在創建一個名爲UHC(超硬核)的Minecraft Bukkit插件,我計劃添加團隊。我需要它,所以你可以選擇你所在的團隊,但如果你不這樣做,它會自動把你放在一個團隊中。將東西添加到列表中,使每個列表的大小均勻

團隊的最低球員數量爲2,最多爲4人。例如,隊伍有紅色,藍色和綠色。 紅色有2個,藍色有1個,綠色有4個,它會將它們添加到藍色。

反正這麼做?

+0

很簡單:'blue.add(player);'。完成。 – Tom 2014-09-01 17:57:19

+0

只需將玩家添加到最小尺寸的列表中... – thkala 2014-09-01 17:57:38

回答

3

首先我會創建一些玩家和團隊對象(你可能已經有這樣的東西了)。

public class Player { 
    private String name; 

    public Player(String name) { 
     this.name = name; 
    } 

    public String getName() { 
     return name; 
    } 
} 

一個團隊只是一個玩家名單。當至少有2名球員時,我們會認爲它是「完整的」,而當有4名時,我們會認爲它是「完整的」。我們的團隊類將實施compareTo,因此我們可以按他們的大小對球隊列表進行排序。

public class Team implements Comparable<Team> { 
    private String name; 
    private List<Player> players; 

    public Team(String name) { 
     this.name = name; 
     this.players = new ArrayList<Player>(); 
    } 

    public String getName() { 
     return name; 
    } 

    public List<Player> getPlayers() { 
     return players; 
    } 

    public int getSize() { 
     return players.size(); 
    } 

    public boolean isFull() { 
     return (players.size() >= 4); 
    } 

    public boolean isComplete() { 
     return (players.size() >= 2); 
    } 

    public void add(Player player) 
    { 
     players.add(player); 
    } 

    @Override 
    public int compareTo(Team otherTeam) { 
     int thisSize = getSize(); 
     int otherSize = otherTeam.getSize(); 

     return (thisSize == otherSize) ? 0 : 
       (thisSize > otherSize) ? 1 : -1; 
    } 
} 

現在,我們可以創造一些團隊...

List<Team> teams = new ArrayList<Team>(); 
teams.add(new Team("Red Team")); 
teams.add(new Team("Blue Team")); 
teams.add(new Team("Green Team")); 

...和一些球員。所有玩家應該從「noteam」列表開始。

List<Player> noteam = new ArrayList<Player>(); 
for (int i = 0; i < 10; i++) { 
    noteam.add(new Player("Player " + i)); // create some players 
} 

把一個球員放到一個球隊......我們需要確定一個最小的球隊。我們會列出所有未滿的球隊,然後按球員人數排序。

for (Player player : noteam) {     // add players to teams           
    List<Team> potentialTeams = new ArrayList<Team>(); 
    for (Team team : teams) { 
     if (!team.isFull()) { 
      potentialTeams.add(team); 
     } 
    } 

    if (potentialTeams.isEmpty()) { 
     // cannot add player because all teams are full - we could do something about it here 
     break; 
    } else { 
     Collections.sort(potentialTeams); 
     Team smallestTeam = potentialTeams.get(0); 
     smallestTeam.add(player); 
    } 
} 

這只是解決這個問題的一種方法,它只是一個例子。此外,沒有任何關於這個答案是「Minecraft Bukkit Plugin」特有的。

+0

你喜歡你的Arraylists,對嗎? :D ...學習使用接口來代替具體類型的變量來增強兼容性。你所有的方法都不能處理其他List類型(如LinkedList),因此如果你喜歡使用LinkedList而不是ArrayList,那麼你有更多的重構。 (http://stackoverflow.com/questions/383947/what-does-it-mean-to-program-to-an-interface) – Tom 2014-09-01 20:31:57

+0

這是一個偉大的觀點湯姆,謝謝。 – trooper 2014-09-01 20:33:23

+0

另外你的'Team'類錯過了他的'Comparable'接口:)。 – Tom 2014-09-01 20:33:49

相關問題