亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? define.pas

?? 模擬電梯系統,有40個樓層,10做電梯,實現全部人和動作,望大家參考,提意見.
?? PAS
?? 第 1 頁 / 共 2 頁
字號:

procedure TElavotor.TakeElavotor(CurrentFloor:integer);
var i,j,k,iDown,MaxDest:integer;
    Tempstr,str,AddStr:string;
    Del:TstringList;
    LockThread:TThreadlist;
begin
   LockThread:=TThreadlist.Create;
   LockThread.Add(Floor[CurrentFloor].Requestlist); //加入鎖定共享數據列表
   LockThread.Add(Floor[CurrentFloor].Idlelist);
   LockThread.Add(self.OuterRequestArray);
   LockThread.LockList;                          //鎖定共享數據對象
   self.Speed:=ElavotorSpeed;
   self.MaxLoadCapacity:=self.InsideRequestArray.Count;
   Del:=Tstringlist.Create;
   if (CurrentFloor>40) or (CurrentFloor<1) then exit;
   if self.CheckStop(CurrentFloor) then
     begin
       //當前層有人下
       iDown:=self.InsideRequestArray.Count-1;
        for i:=0 to iDown Do
          begin
             Tempstr:=self.InsideRequestArray.Strings[i];
             Str:=Copy(Tempstr,0,pos('-',Tempstr)-1);
             j:=Strtoint(Str);
             if person[j].DestinationFloor=CurrentFloor then
                begin
                 if person[j].FinishedCount=TakeNum+1 then
                   begin
                     person[j].MissionCompleted:=true;
                     Continue;
                   end;
                   person[j].CurrentFloor:=CurrentFloor;
                   person[j].SelectedElavotorID:=0;
                   person[j].FinishedCount:=person[j].FinishedCount+1;
                   person[j].PersonStatus:=PersonStatus_idle;
                   Del.Add(Tempstr);
                   K:=Elavotor_Memo[self.ID].Lines.IndexOf(Tempstr);
                   if k>=0 then
                   Elavotor_Memo[self.ID].Lines.Delete(k);
                   k:=Random(100)+20;
                   Addstr:=inttostr(j)+'-'+inttostr(systemControl.SimTimeTotal)+':'+inttostr(k);
                   Floor[CurrentFloor].Idlelist.Add(Addstr); //加入閑置隊列UserID-basetime:idletime
                end;
           end;

           //刪除當前樓層等待隊列中以上電梯的人員
             for i:=0 to Del.Count-1 Do
              if Del.Strings[i]<>'' then
                begin
                   k:=self.InsideRequestArray.IndexOf(Del.Strings[i]);
                   if k>=0 then
                   self.InsideRequestArray.Delete(k);
                end;

         //當前層有人上

         iDown:= Floor[CurrentFloor].Requestlist.Count-1;                        //計算當前樓層等待人數
         Del.Clear;
            for i:=0 to iDown  Do                                                 //判斷等待隊列中每個人是否要上當前電梯
              begin
                Tempstr:=Floor[CurrentFloor].Requestlist.Strings[i];
                Str:=Copy(Tempstr,0,pos('-',Tempstr)-1);
                j:=Strtoint(Str);
                if person[j].CurrentFloor<>self.CurrentFloor then Continue else  //是否電梯到達乘客當前樓層
                 if person[j].SelectedElavotorID = Self.ID then
                  begin
                    if self.CurrentFloor=1 then self.Direction:=1;
                    if self.CurrentFloor=40 then self.Direction:=2;
                    if self.CurrentLoadCapacity=MaxLoad then                     //電梯是否已經滿員
                       begin
                         self.isFull:=true;
                         Break;
                       end;
                    self.CurrentLoadCapacity:=self.CurrentLoadCapacity+1;       //增加當前乘客
                    Addstr:=inttostr(j)+'-'+inttostr(Person[j].DestinationFloor);
                    self.InsideRequestArray.Add(Addstr);                        //把當前乘客加入內部乘梯隊列
                    Elavotor_Memo[self.ID].Lines.Add(Addstr);
                    k:=self.OuterRequestArray.IndexOf(Addstr);
                    if k>=0 then
                       Elavotor[self.ID].OuterRequestArray.Delete(k);           //刪除當前乘客在電梯外的等待隊列信息
                    person[j].PersonStatus:=PersonStatus_Taking;                //置上當前電梯的人的狀態為乘做
                    Del.Add(Tempstr);
                  end;
              end;

           //刪除當前樓層等待隊列中以上電梯的人員
             for i:=0 to Del.Count-1 Do
              if Del.Strings[i]<>'' then
                begin
                  K:=Floor[CurrentFloor].Requestlist.IndexOf(Del.Strings[i]);
                  if k>=0 then
                  Floor[CurrentFloor].Requestlist.Delete(K);
                end;
             Del.Free;

         //改變電梯目標樓層
          MaxDest:=Self.DestFloorLayer;
          iDown:= self.InsideRequestArray.Count-1;
         if (self.CurrentFloor<>1) or (self.CurrentFloor<>40) then
           for i:=0 to iDown Do
             begin
               Tempstr:=self.InsideRequestArray.Strings[i];
               Str:=Copy(Tempstr,0,pos('-',Tempstr)-1);      //UserID-DestFloor
               j:=Strtoint(Str);                             //取得乘客編號
               k:=strtoint(copy(Tempstr,pos('-',Tempstr)+1,length(Tempstr)-pos('-',Tempstr)+1));
               if self.Direction=Person[j].Direction then
                  if MaxDest<k then MaxDest:=k;               //電梯到達的最大樓層
             end;
          Self.DestFloorLayer:=MaxDest;
     end;
    LockThread.UnlockList;
    LockThread.Free;
end;

procedure TElavotor.UPrun;
begin
   if (self.CurrentFloor=40) then
        begin
          self.Direction:=2;
          exit;
        end;
   self.CurrentFloor:=self.CurrentFloor+ElavotorSpeed;
   if Self.CurrentFloor>40 then  Self.CurrentFloor:=40;
   self.nBusyTime:=self.nBusyTime+1;
   ElavotorTrack[self.ID].Position:=1-self.CurrentFloor;
   Elavotor_Busy_Label[self.ID].Caption :=inttostr(self.nBusyTime);
   if not CanTake(self.ID,self.CurrentFloor) then exit;         //如果當前樓層不能停,就繼續上
   self.TakeElavotor(Self.CurrentFloor);
end;

{ TPerson }

function CanTake(ElavotorID,Destlayer: integer):Boolean;
begin
  Result:=false;
  case ElavotorID of
    0,1:begin Result:=true; exit; end;
    2,3:begin if (Destlayer=1) or (Destlayer>=25) and (Destlayer<=40) then Result:=true else Result:=false; exit;end;
    4,5:begin if Destlayer<=25 then Result:=true; exit;end;
    6,7:begin if (Destlayer=1) or (Destlayer>=2) and (Destlayer<=40) then
            if (Destlayer mod 2)=0 then Result:=true else Result:=false; exit;end;
    8,9:begin if (Destlayer=1) or (Destlayer<=25) and (Destlayer<=39) then
            if not ((Destlayer mod 2)=0) then Result:=true else Result:=false; exit; end;
  end;
end;

function TPerson.ChooseElavotor(CurrentFloor,DestinationFloor: integer): integer;
var i,j,iTemp:integer;
    CanTakeElavotor:array[0..9] of integer;
begin
  Result:=0;
  iTemp:=41;
  if self.CurrentFloor=1 then
    begin
     for i:=0 to 9 DO
      if CanTake(i,self.DestinationFloor) then
         begin
            if Elavotor[i].Direction=2 then
               if Elavotor[i].OuterRequestArray.Count<Maxload then
                  CanTakeElavotor[i]:=ABS(self.CurrentFloor-Elavotor[i].CurrentFloor)
               else CanTakeElavotor[i]:=41
             else CanTakeElavotor[i]:=41;
         end else CanTakeElavotor[i]:=41;
    end else if self.CurrentFloor=40 then
     begin
      for i:=0 to 9 DO
       if CanTake(i,self.DestinationFloor) then
         begin
            if Elavotor[i].Direction=1 then
               CanTakeElavotor[i]:=ABS(self.CurrentFloor-Elavotor[i].CurrentFloor)
             else CanTakeElavotor[i]:=41;
         end else CanTakeElavotor[i]:=41;
     end else
       for i:=0 to 9 DO
          begin
            if CanTake(i,self.DestinationFloor) then
               begin
                 if (self.Direction=Elavotor[i].Direction) or (self.CurrentFloor=1)
                    or (self.CurrentFloor=40) then
                      begin
                        if self.Direction=1 then
                         if (self.CurrentFloor-Elavotor[i].CurrentFloor)>=0 then
                            CanTakeElavotor[i]:=ABS(self.CurrentFloor-Elavotor[i].CurrentFloor);
                        if self.Direction=2 then
                         if (self.CurrentFloor-Elavotor[i].CurrentFloor)<=0 then
                            CanTakeElavotor[i]:=ABS(self.CurrentFloor-Elavotor[i].CurrentFloor);
                      end
                 else CanTakeElavotor[i]:=41;
               end
            else
               CanTakeElavotor[i]:=41;
       end;
  for i:=0 to 9 DO
   begin
    if CanTakeElavotor[i]<=iTemp then
       begin
         iTemp:=CanTakeElavotor[i];
         j:=i;
       end;
         Result:=j;
   end;
  if Result>=41 then
     if Elavotor[0].OuterRequestArray.Count<MaxLoad then  Result:=0
     else Result:=1;
end;

procedure TPerson.SendRequest(CurrentFloor,DestinationFloor:integer);
var Temp:string;
begin
   if self.MissionCompleted then exit;
   self.PersonStatus:=PersonStatus_Request;
   Temp:=inttostr(self.PersonID)+'-'+inttostr(self.DestinationFloor)+':'+Inttostr(self.SelectedElavotorID);
   if not Finduser(Floor[CurrentFloor].Requestlist,self.PersonID) then
      begin
          Elavotor[self.SelectedElavotorID].OuterRequestArray.Add(copy(Temp,0,pos(':',Temp)-1));
          Floor[CurrentFloor].Requestlist.Add(Temp);
      end;

end;

procedure TSystemControl.Statistic;
var i,j,k,z,h,iDelIdle,DelStat:integer;
    Tempstr,str_idle,str_taking,str_Request,str:string;
begin
   self.FinishedPersonTotal:=0;
   mainform.memo10.Clear;  //當前請求乘梯人員
   mainform.memo11.Clear;  //當前閑留人員
   mainform.memo12.Clear;  //當前完成乘梯任務的人員
   mainform.memo13.Clear;  //當前正在乘梯的人員
   for i:=0 to self.CurrentPersonTotal-1 DO
      if not person[i].MissionCompleted then
         case person[i].PersonStatus of
             PersonStatus_idle:
                begin
                   person[i].idle_Time:=person[i].idle_Time+1;
                   str_idle:='第'+Inttostr(person[i].PersonID)+'號乘客已閑留'+Inttostr(Person[i].idle_Time)+'秒';
                   if mainform.memo13.lines.indexof(str_idle)<0 then
                   mainform.memo11.lines.Add(str_idle);
                end;
             PersonStatus_Request:
                begin
                   person[i].Request_Time:=person[i].Request_Time+1;
                   str_Request:='第'+Inttostr(person[i].PersonID)+'號已等'+Inttostr(Person[i].Request_Time)+'秒'+Inttostr(Person[i].SelectedElavotorID)+'號梯'+Inttostr(Person[i].CurrentFloor)+'樓';
                   if mainform.memo13.lines.indexof(str_Request)<0 then
                   mainform.memo10.lines.Add(str_Request);
                   //動態選擇電梯
                   Person[i].SelectedElavotorID:=Person[i].ChooseElavotor(
                        Person[i].CurrentFloor,Person[i].DestinationFloor);
                   finduser(floor[Person[i].CurrentFloor].Requestlist,Person[i].PersonID);
                end;
             PersonStatus_Taking:
                begin
                   person[i].Taking_Time:=person[i].Taking_Time+1;
                   str_taking:='第'+Inttostr(person[i].PersonID)+'號乘客已乘坐'+Inttostr(Person[i].Taking_Time)+'秒';
                   if mainform.memo13.lines.indexof(str_taking)<0 then
                   mainform.memo13.lines.Add(str_taking);
                end;
          end else begin
               self.FinishedPersonTotal:=self.FinishedPersonTotal+1;
               mainform.memo12.Lines.Add('第'+Inttostr(person[i].PersonID)+'號乘客');
            end;
   mainform.STB1.Panels[0].Text:='當前系統運行時間:'+Inttostr(self.SimTimeTotal)+'秒';
   mainform.STB1.Panels[1].Text:='當前系統仿真人數:'+Inttostr(self.CurrentPersonTotal)+'個';
   mainform.STB1.Panels[2].Text:='已經完成乘梯任務的人數: '+Inttostr(self.FinishedPersonTotal)+'個';

  j:=0;
  z:=0;
  K:=1;
//檢測是否有人完成閑留開始請求
  for i:=1 to 40 Do
   if Floor[i].Idlelist.Count>0 then
     begin
        for h:=0 to Floor[i].Idlelist.Count-1 Do
          begin
            Tempstr:=Floor[i].Idlelist.Strings[h];
            j:=Strtoint(copy(Tempstr,0,pos('-',Tempstr)-1));
            K:=Strtoint(copy(Tempstr,pos('-',Tempstr)+1,pos(':',Tempstr)-pos('-',Tempstr)-1));
            z:=Strtoint(copy(Tempstr,pos(':',Tempstr)+1,Length(Tempstr)-pos(':',Tempstr)+1));
            if (self.SimTimeTotal-z)>=k then
              begin
                person[j].DestinationFloor:=Random(40)+1;
                while person[j].DestinationFloor=person[j].CurrentFloor DO
                      person[j].DestinationFloor:=Random(40)+1;
                 if (Person[j].MissionCompleted=True) or (person[j].FinishedCount=TakeNum) then
                    Person[j].DestinationFloor:=1;
                 person[j].SelectedElavotorID:=person[j].ChooseElavotor(1,person[j].DestinationFloor);
                 person[j].SendRequest(1,person[j].DestinationFloor);
                 DelIdle.Add(Tempstr);
              end;
          end;

       //刪除當前樓層閑留隊列中閑留時間已到的人員
        for iDelIdle:=0 to DelIdle.Count-1 Do
           if DelIdle.Strings[iDelIdle]<>'' then
              begin
                 K:=Floor[i].Idlelist.IndexOf(DelIdle.Strings[iDelIdle]);
                 if K>=0 then
                 Floor[i].Idlelist.Delete(k);
              end;
        DelIdle.Clear;//清空臨時刪除隊列
     end;

 //監控電梯運行情況
    for i:=0 to 9 DO
     begin
       if Elavotor[i].Direction=0 then
          if Elavotor[i].OuterRequestArray.Count>0 then
               begin
                  Tempstr:=Elavotor[i].OuterRequestArray.Strings[0];
                  j:=Strtoint(copy(Tempstr,0,pos('-',Tempstr)-1));
                  Elavotor[i].Direction:=person[j].Direction;
               end;
     end;
  //顯示樓層人員停留情況
  ShowFloor.RowCount:=12;
  ShowFloor.ColCount:=11;
  ShowFloor.Cells[0,1]:='等待人數';
  ShowFloor.Cells[0,2]:='閑留人數';
  ShowFloor.Cells[0,4]:='等待人數';
  ShowFloor.Cells[0,5]:='閑留人數';
  ShowFloor.Cells[0,7]:='等待人數';
  ShowFloor.Cells[0,8]:='閑留人數';
  ShowFloor.Cells[0,10]:='等待人數';
  ShowFloor.Cells[0,11]:='閑留人數';
   z:=0;
   k:=1;
   for i:=1 to 4 Do
      begin
        for j:=1 to 10 DO
           begin
             z:=z+1;
             ShowFloor.Cells[j,K-1]:='第'+inttostr(z)+'層樓';
             Tempstr:=Inttostr(Floor[z].Requestlist.count)+'個';
             Str:=Inttostr(Floor[z].Idlelist.count)+'個';
             ShowFloor.Cells[j,k]:=Tempstr;
             ShowFloor.Cells[j,k+1]:=str;
           end;
        K:=K+3;
      end;
   if self.FinishedPersonTotal=PersonNum then
     begin
      Application.MessageBox('本次仿真結束!','電梯仿真',0);
      mainform.Close;
     end;
end;

{ TSystemMonitor }
procedure TSystemMonitor.Execute;
begin
   While not self.Terminated Do
     begin
       Synchronize(self.Monitor);
       sleep(1000);  //間隔一秒
     end;
end;

procedure TSystemMonitor.Monitor;
begin
    self.Priority:=tpTimeCritical;
    systemcontrol.SimTimeTotal:=systemcontrol.SimTimeTotal+1;
    SystemControl.InitAddedPerson;
    SystemControl.Statistic;
    Application.ProcessMessages;
end;

end.

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产精品乱码妇女bbbb| 欧美一区二区大片| 精品一区二区三区不卡| 三级欧美在线一区| 免费成人av在线| 免费观看一级特黄欧美大片| 日韩av一区二区在线影视| 日产国产欧美视频一区精品| 日韩黄色免费电影| 久久丁香综合五月国产三级网站| 免费观看在线色综合| 美腿丝袜亚洲色图| 国产一区二区三区免费| 国产91精品一区二区| 色综合久久天天| 51精品国自产在线| 欧美精品一区二区三区蜜桃| xf在线a精品一区二区视频网站| 久久免费国产精品| 国产精品美女久久久久久2018| 亚洲天堂2016| 视频一区二区不卡| 国产一区二区h| 91美女视频网站| 91.com视频| 国产精品色一区二区三区| 亚洲另类一区二区| 麻豆精品精品国产自在97香蕉| 国产精品主播直播| 色婷婷综合久久| 欧美成人性福生活免费看| 日本一二三不卡| 天天综合色天天综合| 国产成人自拍高清视频在线免费播放| gogogo免费视频观看亚洲一| 久久久五月婷婷| 亚洲精品视频在线| 久久99国产乱子伦精品免费| 91美女片黄在线观看91美女| 日韩午夜激情电影| 国产精品国产三级国产普通话99| 性做久久久久久免费观看欧美| 国产一区二区三区视频在线播放| 色悠悠久久综合| 久久香蕉国产线看观看99| 亚洲一区二区三区在线| 国产福利精品导航| 欧美一级片免费看| 亚洲精品菠萝久久久久久久| 久久超碰97人人做人人爱| 91福利在线免费观看| 中文字幕精品一区二区精品绿巨人| 亚洲一区二区欧美激情| a4yy欧美一区二区三区| 久久综合色婷婷| 日韩高清国产一区在线| 色婷婷精品大视频在线蜜桃视频| 久久免费的精品国产v∧| 日韩精品国产欧美| 欧美午夜一区二区| 最新不卡av在线| av日韩在线网站| 中文久久乱码一区二区| 国产精品系列在线播放| 精品精品国产高清a毛片牛牛| 亚洲韩国一区二区三区| 在线观看日产精品| 亚洲久草在线视频| 色成年激情久久综合| 日韩高清一区二区| 欧美揉bbbbb揉bbbbb| 夜夜亚洲天天久久| 色狠狠桃花综合| 亚洲精品成人悠悠色影视| 97se亚洲国产综合自在线不卡| 中文一区二区在线观看| 国产很黄免费观看久久| 国产蜜臀97一区二区三区 | 日本一区二区三区高清不卡| 美国十次综合导航| 欧美xxx久久| 老司机午夜精品| 欧美精品一区二区三区蜜桃视频| 精品一区二区三区免费毛片爱| 日韩欧美第一区| 狠狠久久亚洲欧美| 欧美韩国日本一区| 99r精品视频| 亚洲午夜精品久久久久久久久| 欧美视频完全免费看| 日本免费新一区视频| 日韩女优电影在线观看| 国产宾馆实践打屁股91| 自拍偷拍亚洲综合| 欧美美女一区二区三区| 麻豆91精品视频| 国产校园另类小说区| 99精品国产99久久久久久白柏| 亚洲一区二区高清| 欧美成人a∨高清免费观看| 国产精品123| 一区二区三区日本| 日韩精品一区二区三区蜜臀 | 成人网男人的天堂| 亚洲丝袜自拍清纯另类| 欧美老女人第四色| 国产成人亚洲精品青草天美| 亚洲欧洲国产专区| 日韩一区二区在线看片| 不卡的av中国片| 首页欧美精品中文字幕| 国产色婷婷亚洲99精品小说| 欧美性猛片xxxx免费看久爱| 国产精品资源网| 亚洲午夜久久久久久久久电影网| 精品国产精品一区二区夜夜嗨| 99精品视频在线播放观看| 日本视频中文字幕一区二区三区| 欧美国产97人人爽人人喊| 欧美电影在哪看比较好| 成人福利在线看| 久久国产精品免费| 亚洲在线视频免费观看| 国产日韩欧美麻豆| 日韩欧美一区二区视频| 欧美影院午夜播放| 粉嫩aⅴ一区二区三区四区| 日本不卡视频一二三区| 亚洲精品成人在线| 国产精品国产三级国产| 精品成人a区在线观看| 911精品国产一区二区在线| 99在线精品一区二区三区| 国产精品中文字幕一区二区三区| 五月婷婷综合激情| 一区二区三区免费在线观看| 亚洲国产精品av| 久久蜜桃av一区二区天堂| 欧美一区二区三区视频| 精品视频1区2区| 欧美三区免费完整视频在线观看| 99re免费视频精品全部| 懂色av中文一区二区三区| 国内精品国产成人| 久久66热re国产| 精品一区二区三区免费播放| 丰满放荡岳乱妇91ww| 国产精品18久久久久久vr | 精品国产91久久久久久久妲己| 欧美日韩精品一区二区三区四区 | 欧美性极品少妇| 97久久精品人人做人人爽50路| 风间由美性色一区二区三区| 国产成人av网站| 成人免费视频caoporn| 国产91露脸合集magnet| 成人免费看视频| 99久久伊人精品| 色呦呦国产精品| 在线影院国内精品| 精品视频一区二区不卡| 91精品国产综合久久久久久久久久 | 4438x亚洲最大成人网| 色综合天天综合网天天狠天天| 国产一区二区三区在线观看精品| 国产综合色视频| 成人免费黄色大片| 91麻豆蜜桃一区二区三区| 欧美三级韩国三级日本三斤| 欧美精品vⅰdeose4hd| 日韩欧美一区二区免费| 国产亲近乱来精品视频| 国产精品久久久久久久久搜平片| 亚洲男同1069视频| 丝袜亚洲另类欧美| 国产成人h网站| 在线日韩一区二区| 欧美成人福利视频| 国产精品人人做人人爽人人添| 亚洲永久免费av| 久久99精品国产麻豆不卡| 成人的网站免费观看| 欧洲一区二区av| 久久久久9999亚洲精品| 日韩美女精品在线| 精品一区二区三区免费| 97精品电影院| 精品欧美一区二区在线观看| 国产精品看片你懂得| 日本亚洲一区二区| av在线不卡电影| 欧美成人猛片aaaaaaa| 最新久久zyz资源站| 国产综合色在线| 欧美三级欧美一级| 中文字幕中文字幕一区| 美女www一区二区| 在线观看区一区二| 欧美国产日本韩| 理论电影国产精品|