2012-06-07 57 views
0

我正在嘗試爲我正在製作的遊戲創建高分屏幕。我希望顯示前十名球員的成績以及剛剛完成比賽的球員的得分(排名榜)。這個高分榜將按照他們的分數排序,如果分數相同,則他們將排序。我試過ArrayListsTreeSets來做到這一點。我能夠將這兩種方法相應地對數據進行排序,但無法爲剛剛結束播放的玩家提供特定信息。用Java創建高分屏幕

我看過地圖,但似乎他們不會用我希望排序數據的方式工作。有人可以指導我解決這個問題嗎?

這裏有一個小耐刮劃我對他們的一種製成:

public class Tree_set_test { 

    public static void main(String[] args) throws IOException { 
     String sName; 
     int nAge, nNum, i=0; 
     SortedSet<CFriend> tsFriends = new TreeSet<CFriend>(); 

     sName = "Jason"; 
     nAge = 5000; 
     nNum = tsFriends.size() + 1; 
     CFriend c1= new CFriend(sName,nAge,nNum); 
     tsFriends.add(new CFriend(sName,nAge,nNum)); 

     sName = "Kenny"; 
     nAge = 200; 
     nNum = tsFriends.size() + 1; 
     CFriend c2= new CFriend(sName,nAge,nNum); 
     tsFriends.add(new CFriend(sName,nAge,nNum)); 

     sName = "Smile"; 
     nAge = 100; 
     nNum = tsFriends.size() + 1; 
     tsFriends.add(new CFriend(sName,nAge,nNum)); 

     sName = "Hossein"; 
     nAge = 200; 
     nNum = tsFriends.size() + 1; 
     tsFriends.add(new CFriend(sName, nAge,nNum)); 

     sName = "People"; 
     nAge = 200; 
     nNum = tsFriends.size() + 1; 
     tsFriends.add(new CFriend(sName, nAge,nNum)); 

     Iterator itFriends = tsFriends.iterator(); // see note below on iterators. 
     while (itFriends.hasNext()) { 
      i++; 
      System.out.println(itFriends.next()); 
     } 
    } 
} 

class CFriend implements Comparable<CFriend> { 
    String sName; 
    int nScore, nNum; 

    CFriend(String _sName, int _nAge, int _nNum) {// constructor to load vars 
     sName = _sName; 
     nScore = _nAge; 
     nNum=_nNum; 
    } 

    public int compareTo(CFriend other) { 
     if (nScore > other.nScore) { 
      return -1; 
     } 
     else if (nScore < other.nScore) { 
      return 1; 
     } 
     else { 
      if (sName.compareTo(other.sName) < 0) { 
       return -1; 
      } 
      else if (sName.compareTo(other.sName) > 0) { 
       return 1; 
      } 
      else { 
       return 0; 
      } 
     } 
    } 

    public String toString() { 
     return sName + " " + String.valueOf(nScore); 
    } 
} 

我想查一下c1c2都在TreeSet並顯示與他們nameage一起。

+0

就像一個非常小提示:如果你去使用ArrayList,您可以使用['indexOf'](http://docs.oracle.com/javase/1.4.2/docs/api/java/util/ArrayList.html#indexOf%28java.lang.Object% 29)方法來獲取集合中特定對象的索引。你需要確保你的類實現了'equals'方法。 –

回答

1

您可以使用名稱和分數創建一個Player類。然後讓它實現接口Comparable。請參閱:http://docs.oracle.com/javase/1.4.2/docs/api/java/lang/Comparable.html

您可以保存玩家物體在一個ArrayList和使用Collections.Sort(yourArrayList);

您的播放器類可以是這個樣子對它們進行排序:

public class Player implements Comparable<Player>{ 

int score; 
String name; 

@Override 
public int compareTo(Player o) { 

//compare here 

} 


} 
+0

如果這是針對社交遊戲應用程序(或具有大量玩家的遊戲) - 每次玩家完成遊戲時對列表進行排序都不可擴展。 – auser

+0

你應該使用它的數據庫,然後我想。 – Klaasvaak

+0

數據庫將是一個更糟糕的解決方案! – auser