2014-02-26 169 views
0

我正在爲我的遊戲構建排行榜的算法,但現在我被卡住了。創建排行榜?

  • 這是一個雙人遊戲。
  • 排行榜應該顯示排名前5的選手。
  • 評分將被保存到外部.txt文件作爲參考。

另外,我可以補充一點,我仍然不能決定是否應該只考慮排行榜或敗者的贏家分數。

例如: 玩家1是朱麗葉。 玩家2是羅密歐。 在比賽結束時,朱麗葉的得分大於羅密歐的得分。

我是否應該只評估排行榜的朱麗葉分數,或者他們的分數?截至目前,我的算法只考慮贏家的得分。

截至目前,我也只是想用JLabel來顯示分數,但我不確定這是否是最有效的方法。我正在考慮JTable

因此,這裏是我目前的算法:

1)當用戶啓動一個新的匹配/返回菜單/退出遊戲(我提供了4個選項:新的遊戲(分數保留,但該板復位),新比賽(一切都是復位),菜單,退出)

public class Game 
{ 
    //This class also holds the code for the operation of the game 

    if (event.getSource() == newmatch)//or menu or exit 
    { 
     if (p1score != 0 || p2score != 0) 
     { 
      Leaderboard x; 

      if (p1score > p2score) 
      { 
       x = new Leaderboard (player1name, p1score); 
      } 
      else 
      { 
       x = new Leaderboard (player2name, p2score); 
      } 
     } 

     else 
     { 
      //some code 
      //This check is whether the game ends up in a draw/or both the users' scores   are == 0 
     } 
    } 
} 

2)將姓名&得分Leaderboard類:

public class Leaderboard { 
    //This class is where I originally planned to write the code that will perform the evaluation of the scores 

    String playerid; 
    int playerscore; 

     public Leaderboard(String name, int score) 
     { 
      playerid = name; 
      playerscore = score; 
     } 

} 

3)接下來的STE這是我很不確定的是創建一個ArrayList的分數(我錯過了關於球員的名字的部分,因爲我不確定以及我將如何處理它)然後對其進行分類,但是之後的問題將是如何讓比分與球員的名字一致,如果你明白我的意思。

如例如分數:

安娜= 1

帕梅拉= 5

蓋比= 3

排序:5,3,1 帕梅拉具有最高分數,但是我將如何能夠將她的名字和她的得分一起顯示出來?

4)我有一個檢查器,它確定分數的ArrayList是否爲空,如果是,它會自動顯示玩家的名字和分數(這是第一對玩家)。

這件事情是這樣的:

if (board.isEmpty()) 
{ 
    label1.setText(winnername); 
    scorelabel1.setText(winnerscore); 
} 

else 
{ 
    // 
} 

有一大堆的嗡嗡聲在我的頭上怎麼回事,現在我不知道我應該怎麼繼續。

這顯然是一個初學者的問題,可能需要一個'大'的答案,但我只是要求提供一些提示/建議。

+0

首先 - 創建一個Player類,其中一個包含字符串名稱和int分數,以及任何其他關鍵播放器信息。使其實現「Comparable 」接口,並給它一個比較分數的「compareTo(Player other)」方法。 –

+0

@HovercraftFullOfEels好的,我會感謝 – user3026693

+0

也考慮'java.util.Preferences',而不是'.txt'文件。 – trashgod

回答

2

將所有玩家的所有分數存儲在文本文件中是一個壞主意。在任何時候,你的文本文件只能包含前5名玩家和他們的分數。

讓LeaderBoard成爲當前的LeaderBoard,它已經包含前5名的成績。當你不得不添加一個新的分數時,你可以使用這種方法。

min = minimum scorer in the leaderBoard 
if(player1 > min){ 
    remove min from leaderBoard 
    add player1 to the leaderBoard 
} 
min = minimum scorer in the leaderBoard 
if(player2 > min){ 
    remove min from leaderBoard 
    add player2 to the leaderBoard 
} 

通過這樣做,在任何時間點,您都將擁有leaderBoard中排名前5的得分手。你還將包括兩名球員的分數。

+1

'java.util.SortedMap '由'java.util.Preferences'支持,應該在這裏工作。 – trashgod

+0

@trashgod爲什麼不能發佈一個答案? – MCCCS

+0

@MCCCS:目前還不清楚你卡在哪裏;請提出一個問題,或許引用這個問題;請參閱[問]瞭解詳情。 – trashgod