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

📄 unit1.pas

📁 Cellular Automata Simulator for one Lane flow with traffic light
💻 PAS
字号:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, TeEngine, Series, ExtCtrls, TeeProcs, Chart, Math;

type
  TForm1 = class(TForm)
    Chart1: TChart;
    Series1: TPointSeries;
    Button1: TButton;
    Button2: TButton;
    Chart2: TChart;
    Series2: TPointSeries;
    LabeledEdit1: TLabeledEdit;
    LabeledEdit2: TLabeledEdit;
    LabeledEdit3: TLabeledEdit;
    Chart3: TChart;
    Series3: TLineSeries;
    Image1: TImage;
    Label1: TLabel;
    procedure FormShow(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;
  auto=record
   x:integer;
   v:integer;
   d:integer;
   end;
  CA=array of auto;
const kon=500;
      ser=250;

var
  Form1: TForm1;
  cell,cell_1: CA;
  vmax:integer;
  stop:boolean;
  pnoise,ptrans:real;

implementation

{$R *.dfm}
procedure Graphic(mas1:CA;k1:integer);
var i:integer;
begin
  for i:=Low(mas1) to High(mas1) do
  if mas1[i].x<kon then Form1.Chart2.Series[0].AddXY(mas1[i].x,k1);
end;

procedure raven (var mas1:CA;mas2:CA);
var i:byte;
begin
   for i:=Low(mas2) to High(mas2) do
    begin
    mas1[i].x:=mas2[i].x;
       mas1[i].v:=mas2[i].v;
           mas1[i].d:=mas2[i].d;
    end;
end;

procedure ShowCA(mas:CA);
var i:byte;
begin
  Form1.Chart1.Series[0].Clear;
  for i:=0 to High(cell) do
  Form1.Chart1.Series[0].AddXY(mas[i].x,0);
end;

procedure TForm1.FormShow(Sender: TObject);
begin
randomize;
setlength(cell,1);
setlength(cell_1,1);
cell[0].x:=0;
cell[0].d:=10000;
cell[0].v:=Random(vmax-1)+1;
ShowCA(cell);
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
stop:=false;
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
stop:=true;
end;

procedure Measuring(var m1:integer);
var i,s:integer;
temp:CA;
begin
s:=0;
for i:=Low(cell) to High(cell) do
  if InRange(cell[i].x,kon,kon+cell[i].v-1) then inc(m1);//inc(s);
{m1:=m1+s;
setlength(temp,length(cell)-s);
for i:=High(temp) downto Low(temp) do
begin
temp[i].v:=cell[i].v;
temp[i].d:=cell[i].d;
temp[i].x:=cell[i].x;
end;
setlength(cell,length(temp));
raven(cell,temp);    }
end;

procedure svetofor(var Svet:TImage;p:real);
begin
  if p=0 then
          begin
            Svet.Canvas.Brush.Color:=clRed;
            Svet.Canvas.Ellipse(0,0,30,30);
          end
          else
            begin
            Svet.Canvas.Brush.Color:=clGreen;
            Svet.Canvas.Ellipse(0,0,30,30);
            end;
end;

procedure GenerateCar;
begin
if cell[High(cell)].x>vmax then
                      begin
                        setlength(cell,length(cell)+1);
                        setlength(cell_1,length(cell_1)+1);
                        cell[High(cell)].x:=0;
                        cell[High(cell)].d:=cell[High(cell)-1].x;
                        cell[High(cell)].v:=Random(vmax-1)+1;
                      end;
end;

procedure TForm1.Button1Click(Sender: TObject);
var k,i,m:integer;
    p,pt:real;
begin
if LabeledEdit1.Text<>'' then vmax:=StrToInt(LabeledEdit1.Text)
                                else
                                    begin
                                    ShowMessage('骡邃栩

⌨️ 快捷键说明

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