0

在我的 Race Game 中,我使用的是基于航路点的位置跟踪系统。我正在使用有序列表。下面是我的代码,它工作正常。

IOrderedEnumerable<KeyValuePair<string, Player>> sortedPlayer = players.OrderBy(x => x.Value.distanceToWaypoint).OrderByDescending(x => x.Value.activeWaypointIndex);

我的问题是在第一圈之后它的行为是有线的。它工作不正常。意味着考虑到游戏有 10 个航点。在玩家通过 10 个航路点到第一个航路点后,它开始进行有线连接。

我有一个圈数计数器脚本,可以计算正确通过的圈数。是否有任何方法可以使用该圈数来解决此问题

4

1 回答 1

1

一般来说,您可能更愿意使用ThenByThenByDescending因此新查询不会完全推翻您已经对上一次调用进行的排序,而是仅在前一次排序中两个或多个元素处于相同位置时才使用下一次排序。

然后排序顺序应该是

  1. 完成的圈数(下降)

    如果一名球员已经像另一名球员一样完成了更多的圈数,那么其他两个类别根本就无关紧要。你已经知道这个球员更领先了。

  2. 有效航路点(下降)

    如果两个玩家完成的圈数相同,但活动航点不同,那么您知道具有更高航点指数的玩家已经更领先了。

  3. 到活动航路点的距离

    最后,如果两个玩家完成的圈数相同且活动航路点索引相同,那么距离越短的玩家越领先。

所以你的代码可能应该是类似的东西

var sortedPlayer = players
                   .OrderByDescending(x => x.Value.amountOfCompletedLaps)
                   .ThenByDescending(x => x.Value.activeWaypointIndex)
                   .ThenBy(x => x.Value.distanceToWaypoint);
于 2021-09-02T06:32:34.243 回答