gpt4 book ai didi

delphi - 在计时应用程序中对赛车手进行排序

转载 作者:行者123 更新时间:2023-12-03 19:42:42 34 4
gpt4 key购买 nike

我正在创建一个使用 AMB MyLaps 解码器 P3 协议(protocol)的应用程序。

我想不出一种根据圈速和圈速对赛车手进行分类的方法。例如,第 1 位的人跑了 3 圈,第 2 位的人跑了 2 圈。但是,我该如何订购 2 人在同一圈的情况呢?

这是我用来保存信息的记录:

type
TTimingRecord = record
position: integer;
transId: integer;
racerName: string;
kartNumber: integer;
lastPassingN: integer;
laps: integer;
lastRTCTime: TDateTime;
bestTimeMs: Extended;
lastTimeMs: Extended;
gapTimeMs: Extended;
splitTimeMs: Extended;
timestamp: TDateTime;
end;

为每位赛车手创造了一个新纪录。

我目前使用的代码是:
procedure sortRacers();
var
Pos, Pos2: Integer;
Temp: TTimingRecord;
GapTime: Extended;
begin
for Pos := 0 to length(DriversRecord)-1 do
begin
for Pos2 := 0 to Length(DriversRecord)-2 do
begin
if(DriversRecord[Pos2].laps < DriversRecord[Pos2+1].laps)then
begin
Temp := DriversRecord[Pos2];
DriversRecord[Pos2] := DriversRecord[Pos2+1];
DriversRecord[Pos2+1] := Temp;
end
else if DriversRecord[Pos2].laps = DriversRecord[Pos2+1].laps then
begin
if DriversRecord[Pos2].lastRTCTime > DriversRecord[Pos2+1].lastRTCTime then
begin
Temp := DriversRecord[Pos2];
DriversRecord[Pos2] := DriversRecord[Pos2+1];
DriversRecord[Pos2+1] := Temp;
end;
end;
end;
end;

for pos := 1 to length(DriversRecord) -1 do //Gap Time
begin
if DriversRecord[Pos].laps = DriversRecord[0].laps then
begin
DriversRecord[Pos].gapTimeMs := DriversRecord[Pos].lastRTCTime - DriversRecord[0].lastRTCTime;

DriversRecord[Pos].splitTimeMs := DriversRecord[Pos].lastRTCTime - DriversRecord[Pos-1].lastRTCTime;
end;
end;
end;

但效果不太好:)

最佳答案

我从您对问题的评论中假设您已将问题分解为排序和比较,并且您已经涵盖了排序部分。这留下了订单比较。

您需要一个函数来执行字典顺序比较,首先基于完成的圈数,其次是自该圈开始以来的时间。基本上它看起来像这样:

function CompareRacers(const Left, Right: TTimingRecord): Integer;
begin
Result := CompareValue(Left.laps, Right.laps);
if Result=0 then
Result := CompareDateTime(Left.lastRTCTime, Right.lastRTCTime);
end;

你会发现 CompareValueMathCompareDateTimeDateUtils .

我不确定 lastRTCTime 的含义是什么值(value)观是。您可能需要否定调用 CompareDateTime 的结果。得到你想要的结果。
Result := -CompareDateTime(Left.lastRTCTime, Right.lastRTCTime);

另外,如果在单圈中超车怎么办?大概在赛车手完成当前圈之前,您将无法检测到这一点。

关于delphi - 在计时应用程序中对赛车手进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15765679/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com