0

やや一般的なタイトルで申し訳ありませんが、誰かより良い提案があれば教えてください。

基本的に、3 つのスコアのみを表示するカスタム リーダーボード ビューを作成しています。可能であれば、現在のユーザーのスコアを中央に表示しますが、ユーザーがリストの一番上または一番下にいる場合は、3 つのスコアを表示する必要がありますが、リストの上または下に別のユーザーが表示されます。

例えば

  1. 私(私がトップの場合は、下の 2 を表示)
  2. ユーザー 1
  3. ユーザー 2

また

  1. ユーザー 1
  2. 私 (私が 2 つのスコアの真ん中にいる通常のケース)
  3. ユーザー 2

また

  1. ユーザー 1
  2. ユーザー 2
  3. 私 (私が最下位の場合は、2 つ上のスコアを表示)

これの最初の部分を実行する関数を作成しましたが、私が苦労しているエッジケースを考慮していません。誰でもアドバイスできますか?

-(void)getNearbyScores:(int)score{
    GCLeaderboardScore *closestScoreAbove = nil; //Custom container for GC properties
    GCLeaderboardScore *closestScoreBelow = nil; //Contains playerID, score, alias etc

    if ([playerScores count] == 0){ //playerScores is an NSMutableDictionary
        return;
    }

    for (NSString* key in playerScores) {

        GCLeaderboardScore *playerScore = (GCLeaderboardScore *)[playerScores objectForKey:key];
        if ((closestScoreAbove == nil || closestScoreAbove->score > playerScore->score)  && playerScore->score > score){
            closestScoreAbove = playerScore;
        }
        else if ((closestScoreBelow == nil || closestScoreAbove->score < playerScore->score) && playerScore->score < score){
            closestScoreBelow = playerScore;
        }
    }

    me->score = score;
    me->rank = 1;
    if (closestScoreAbove != nil) {
        me->rank = closestScoreAbove->rank + 1;
        nearbyScores = [NSMutableArray arrayWithObjects: closestScoreAbove, me, closestScoreBelow, nil];
    }
    else {
        nearbyScores = [NSMutableArray arrayWithObjects: me, closestScoreBelow, nil];
    }
}
4

2 に答える 2