⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 uglobalobj.pas

📁 智能交通系统演示delphi源码,适合初学者看的例子
💻 PAS
字号:
unit uGlobalObj;

interface
uses Classes,uPort, uCar, uLight, Contnrs, SysUtils, ExtCtrls,
  uThreadComList, Dialogs, Controls, Types;

const
  SCANINTERVAL = 1000;
var
  GCarList: TThreadComList;
  GLightList: TComponentList;
  GPortList: TComponentList;


type
  TCarMgr = class
  private
    FTimer: TTimer;
    procedure FOnTimer(Sender: TObject);
    procedure ScanInsected(ACar: TCar);

  public
    constructor Create;
    destructor Destroy;override;
    procedure RemoveCar(ACar: TCar);
    //procedure AddCar(ACar: TCar);
  end;


implementation


constructor TCarMgr.Create;
begin
  FTimer := TTimer.Create(nil);
  FTimer.Interval := SCANINTERVAL;
  FTimer.Enabled := true;
  FTimer.OnTimer := FOnTimer;
end;

destructor TCarMgr.Destroy;
begin
  FreeAndNil(FTimer);
end;


procedure TCarMgr.ScanInsected(ACar: TCar);
var
  n, i: integer;
  LLight: TLight;
begin
  n := GLightList.Count - 1;
  for i := 0 to n do
  begin
    LLight := GLightList.Items[i] as TLight;
    if ACar.HasInsected(LLight) and (not ACar.HasAckInsected) then
    begin
      if LLight.State=lsRed then
        ACar.Stop
      else if LLight.State=lsGreen then
        ACar.GoForward
      else if LLight.State=lsLeft then
        ACar.TurnLeft
      else if LLight.State=lsRight then
        ACar.TurnRight;
      ACar.HasAckInsected := true;  { TODO : chagehasak }
    end
    else
      ACar.HasAckInsected := false;
  end;

  n := GPortList.Count - 1;
  for i := 0 to n do
  begin
    if ACar.IsToPort(GPortList.Items[i] as TPort) then
      ;//ShowMessage('');//RemoveCar(ACar); { TODO : 此处有问题 }
  end;

end;
procedure TCarMgr.FOnTimer(Sender: TObject);
var
  n, i: integer;
  LCar: TCar;
  LCarList: TList;
begin
  LCarList := GCarList.LockList;
  n := LCarList.Count - 1;
  for i := 0 to n do
  begin
    LCar := (TCar(LCarList.Items[i]) as TCar);
    ScanInsected(LCar);
    LCar.Move;
  end;
  GCarList.UnlockList;
end;

procedure TCarMgr.RemoveCar(ACar: TCar);
begin
  GCarList.LockList;
  GCarList.Remove(ACar);
  GCarList.UnlockList;
  FreeAndNil(ACar);     { TODO : 问题 }
end;


end.

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -