如何使用 orderdBy List 跟踪赛车游戏车的位置? (位置也基于 Lap)

How to track racing Game Car position using orderdBy List ? (Position based on Lap also)

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

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

我的问题是在第一圈之后就出现了问题。它不能正常工作。表示考虑游戏有 10 waypoints。在玩家通过 10 waypoints 到第一个路径点后,它开始有线动作。

我有一个计圈脚本,可以计算正确通过了多少圈。有什么方法可以使用圈数来解决这个问题

一般来说,您可能更愿意使用 ThenBy and ThenByDescending,这样新查询就不会完全否决您在上一次调用中已经进行的排序,而是仅在使用上一次排序时使用下一次排序或更多的元素将处于相同的位置。

然后排序顺序应该是

  1. 完成圈数(降序)

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

  2. 活动航路点(下降)

    如果两个玩家完成的圈数相同但活跃度不同 waypoints 那么您就知道路点指数更高的玩家已经更领先了。

  3. 到活动航路点的距离

    最后,如果两名玩家完成的圈数相同且活动航路点索引相同,则距离较小的玩家更领先。

因此您的代码可能应该类似于

var sortedPlayer = players
                   .OrderByDescending(x => x.Value.amountOfCompletedLaps)
                   .ThenByDescending(x => x.Value.activeWaypointIndex)
                   .ThenBy(x => x.Value.distanceToWaypoint);