创建排行榜?

时间:2014-02-26 04:07:58

标签: java algorithm swing user-interface

我正在为我的游戏构建排行榜的算法,但现在我被卡住了。

  • 这是一场双人游戏。
  • 排行榜应该显示前五名球员。
  • 分数将保存到外部.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)我非常不确定的下一步是为分数创建一个ArrayList(我错过了关于玩家姓名的部分因为我不确定我是怎么回事会接近它然后对它进行排序,但之后的问题是如何让得分与玩家的名字一致,如果你理解我的意思。

例如,分数是:

安娜= 1

Pamela = 5

Gabby = 3

排序:5,3,1 Pamela得分最高,但我怎样才能将她的名字与她的得分一起显示出来?

4)我有一个检查器,用于确定分数的ArrayList是否为空,如果是,它将自动显示玩家的名字和分数(这是第一对玩家)。

这是这样的:

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

else
{
    //
}

我脑子里传来很多嗡嗡声,现在我不知道该怎么办。

这显然是一个初学者的问题,可能需要一个“大”答案,但我只是要求一些提示/建议。

1 个答案:

答案 0 :(得分: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名得分手。你还将包括两个球员的得分。