procedure TForm1.Button1Click(Sender: TObject); Type TAttackingType=(atWhenAfter,atWhenBefore,atWhenActtacking);function TimeWhenEnmyAttackingUs(TimeWhenWeAttackHim:TDateTime;EnmyActtackType:TAttackingType):TDateTime; begin Case EnmyActtackType of atWhenAfter :Result:=TimeWhenWeAttackHim+0.05; atWhenBefore:Result:=TimeWhenWeAttackHim-0.05; else Result:=TimeWhenWeAttackHim; end; end;var dtWeAtkEnmy,dtEnmyAtkUS:TDateTime; OurAtkType,EnmyAtkType:TAttackingType; function WeAtkHim(HeAtkUs:TDateTime;OurAttackType,EnmyActtackType:TAttackingType):TDateTime; var aWeAtkHim,aHeAtkUs:TDateTime; begin aWeAtkHim:=TimeWhenEnmyAttackingUs(HeAtkUs,OurAttackType); aHeAtkUs:=TimeWhenEnmyAttackingUs(aWeAtkHim,EnmyActtackType); if aWeAtkHim<=0 then begin Result:=0; Exit; end else if aHeAtkUs>aWeAtkHim then begin Result:=aWeAtkHim; Exit; end else Result:=WeAtkHim(aHeAtkUs,OurAttackType,EnmyActtackType); end;begin OurAtkType :=atWhenBefore; EnmyAtkType:=atWhenBefore; dtEnmyAtkUS:=100; //天后敌人攻击我们 dtWeAtkEnmy:=WeAtkHim(dtEnmyAtkUS,OurAtkType,EnmyAtkType); ShowMessage('We Will Attacking At Time Later:'+FloatToStr(dtWeAtkEnmy)); end; //此程序在dtEnmyAtkUS很大时会堆栈会溢出。不知有没有更好的算法。
Type
TAttackingType=(atWhenAfter,atWhenBefore,atWhenActtacking);function TimeWhenEnmyAttackingUs(TimeWhenWeAttackHim:TDateTime;EnmyActtackType:TAttackingType):TDateTime;
begin
Case EnmyActtackType of
atWhenAfter :Result:=TimeWhenWeAttackHim+0.05;
atWhenBefore:Result:=TimeWhenWeAttackHim-0.05;
else Result:=TimeWhenWeAttackHim;
end;
end;var dtWeAtkEnmy,dtEnmyAtkUS:TDateTime;
OurAtkType,EnmyAtkType:TAttackingType; function WeAtkHim(HeAtkUs:TDateTime;OurAttackType,EnmyActtackType:TAttackingType):TDateTime;
var aWeAtkHim,aHeAtkUs:TDateTime;
begin
aWeAtkHim:=TimeWhenEnmyAttackingUs(HeAtkUs,OurAttackType);
aHeAtkUs:=TimeWhenEnmyAttackingUs(aWeAtkHim,EnmyActtackType);
if aWeAtkHim<=0 then
begin
Result:=0;
Exit;
end else if aHeAtkUs>aWeAtkHim then
begin
Result:=aWeAtkHim;
Exit;
end else
Result:=WeAtkHim(aHeAtkUs,OurAttackType,EnmyActtackType);
end;begin
OurAtkType :=atWhenBefore;
EnmyAtkType:=atWhenBefore;
dtEnmyAtkUS:=100; //天后敌人攻击我们
dtWeAtkEnmy:=WeAtkHim(dtEnmyAtkUS,OurAtkType,EnmyAtkType);
ShowMessage('We Will Attacking At Time Later:'+FloatToStr(dtWeAtkEnmy));
end;
//此程序在dtEnmyAtkUS很大时会堆栈会溢出。不知有没有更好的算法。