我正在創建一個名爲UHC(超硬核)的Minecraft Bukkit插件,我計劃添加團隊。我需要它,所以你可以選擇你所在的團隊,但如果你不這樣做,它會自動把你放在一個團隊中。將東西添加到列表中,使每個列表的大小均勻
團隊的最低球員數量爲2,最多爲4人。例如,隊伍有紅色,藍色和綠色。 紅色有2個,藍色有1個,綠色有4個,它會將它們添加到藍色。
反正這麼做?
我正在創建一個名爲UHC(超硬核)的Minecraft Bukkit插件,我計劃添加團隊。我需要它,所以你可以選擇你所在的團隊,但如果你不這樣做,它會自動把你放在一個團隊中。將東西添加到列表中,使每個列表的大小均勻
團隊的最低球員數量爲2,最多爲4人。例如,隊伍有紅色,藍色和綠色。 紅色有2個,藍色有1個,綠色有4個,它會將它們添加到藍色。
反正這麼做?
首先我會創建一些玩家和團隊對象(你可能已經有這樣的東西了)。
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」特有的。
你喜歡你的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
這是一個偉大的觀點湯姆,謝謝。 – trooper 2014-09-01 20:33:23
另外你的'Team'類錯過了他的'Comparable'接口:)。 – Tom 2014-09-01 20:33:49
很簡單:'blue.add(player);'。完成。 – Tom 2014-09-01 17:57:19
只需將玩家添加到最小尺寸的列表中... – thkala 2014-09-01 17:57:38