彙編 智慧型交通場景的模擬實現

2021-08-13 17:00:44 字數 3097 閱讀 3222

**放在github上,智慧型交通場景的模擬實現

採用8086組合語言,設計並實現多個十字路口組成的道路交通模擬,包括路口的紅綠燈顯示,以及車流的模擬顯示,每輛車能夠從出發地到達指定目的地,並且交通燈能夠根據道路車輛數量分布改變時間,實現智慧型交通。

能夠正確顯示根據紅綠燈變化引導車輛通行,並且要能夠顯示紅綠燈的讀秒數

實現4個十字路口的構成的道路交通模擬,可以直行,右轉,左轉,設立左轉彎待轉區和右轉彎中轉區域。

能夠隨機產生車輛的數量,以及每輛車的出發地和目的地

能夠通過按鍵在每個路口新增車輛。

能夠根據區域性車輛擁塞情況動態即時改變紅綠燈持續時間,實現智慧型交通。

主選單顯示模組:顯示主選單介面,選擇普通交通模擬模式或者智慧型交通模擬模式或者退出。

地圖顯示模組:繪製程式執行地圖,並且列印提示字元

按鍵新增車輛模組:通過按鍵新增車輛,1—8鍵分別在8個路口區域增加車輛數量,9鍵在各個路口區域增加車輛數量

中斷模組:通過8253與pc相連時產生的每秒18次的中斷,來得到1秒1次的中斷服務程式執行。

數字顯示模組:根據紅綠燈狀態,將紅綠燈秒數繪製至地圖中心;在地圖中心以相應位置形式且顯示每個路口的剩餘進車數;顯示智慧型交通改變後的紅綠燈秒數

車輛顯示模式:跟據車輛狀態,繪製車輛至地圖相應位置,道路、路口、右轉彎區域、左轉彎待轉區。

紅綠燈顯示模組:根據紅綠燈的狀態,將紅綠燈實時繪製至地圖路口處。

紅綠燈狀態更新模組:通過中斷所累加的計數器對紅綠燈狀態進行更新,60秒紅燈,60秒綠燈,3秒黃燈。其中60秒綠燈分為前50秒直行與右轉,後10秒左轉待轉區的車輛進行左轉。

狀態選擇模組:程式由四個主狀態的狀態機進行控制,四個狀態分別為東西綠燈,南北紅燈;東西黃燈,南北紅燈;東西紅燈,南北綠燈;東西紅燈,南北黃燈。

車輛狀態更新模組:根據狀態選擇模組傳遞的狀態,通過車輛行進演算法,實現車輛的左轉(左轉彎待轉區,在路口為綠燈的後10秒執行左轉),右轉和直行,並對車輛進行狀態更新。

車輛增加模組:根據按鍵新增車輛模組傳給1—8個路口的車輛,在固定的中斷時間內,對相應路口的相應位置增加車輛的資訊對新的車輛進行狀態賦予與更新。

分為四個路口,八個進出口,用八個長度為44的陣列來表示地圖上8*44個點

道路的定義:

每個路口有:

1. 乙個容納乙個車輛的右轉彎緩衝區

2. 最多容納十輛車的左轉彎待轉區

3. 四個路口過道

左轉彎待轉區(乙個佇列)資料結構:

left struc       

asize db 10 ;最大大小

count db 0 ;當前佇列數量

first db 0 ; 頭索引

last db 0 ; 尾索引

array dw 10 dup(0) ; 存放左轉彎待轉區內車輛號

東西綠燈,南北紅燈;東西黃燈,南北紅燈;東西紅燈,南北綠燈;東西紅燈,南北黃燈。

根據地圖可以用8個44長度的1維陣列表示出來,所以根據紅綠燈的狀態,依次對每條街道進行遍歷,長度44的一位陣列中如果沒有車,則存放零,若有車則存放車輛編號,車輛編號從1-337(84*4+1,乙個十字最多84輛車)。

車輛定義:

car struc           

start_x dw ? ;目前x座標

start_y dw ? ;目前y座標

end_x dw ? ;目的x座標

end_y dw ? ;目的y座標

live dw 0 ;是否在圖內,1是,0否

先設定螢幕顯示模式(640*480*16),再採用描點畫圖,通過int10中斷來描點畫圖。

通過將ah放入0ch,通過10h中斷來描點

呼叫畫點的巨集,完成畫一條線,即方塊(地圖、車輛和燈)

呼叫畫點的巨集,完成畫平行四邊形(用於顯示左轉彎待轉區)

地圖線條資料結構:

line struc     

x dw ? ;x座標

y dw ? ;y座標

r_l dw ? ;寬

c_l dw ? ;長

line

ends

紅綠燈表示資料結構:

紅綠燈

light struc

x1 dw ? ;x座標

y1 dw ? ;y座標

color db ? ; 紅綠燈顏色

reserved db 0 ;用來位元組對齊

light ends

執行顯示(可以看到左轉彎待轉區和右轉緩衝區):

模擬實現智慧型指標

智慧型指標可以用來管理資源,原自構造析構函式 raii 還可以像原生指標一樣使用。auto ptr 管理許可權的轉移。scoped ptr 防拷貝。shared ptr 引用計數解決auto ptr的缺陷。其中shared 自身帶有一定缺陷,迴圈引用,和不可釋放陣列類,檔案類等資源,幸運的是它支援定...

智慧型指標的模擬實現

1.引入 int main 在上面的 中定義了乙個裸指標p,需要我們手動釋放。如果我們一不小心忘記釋放這個指標或者在釋放這個指標之前,發生一些異常,會造成嚴重的後果 記憶體洩露 而智慧型指標也致力於解決這種問題,使程式設計師專注於指標的使用而把記憶體管理交給智慧型指標。普通指標也容易出現指標懸掛問題...

模擬實現智慧型指標SharedPtr

首先我們先來乙個小小的區分三個智慧型指標 1,autoptr 管理權的轉移 嚴重缺陷,盡量不要使用 2,scopedptr 簡單粗暴 防拷貝 只宣告不定義 3,sharedptr 共享,引用計數,功能強大,迴圈引用,但是較為複雜 下面我們來模擬實現一下sharedptr template t cla...