這個問題做起來不太簡單,儘量依你可能看得懂的方式來說明
依照你提問的內容歸納幾個程式書寫的重點:
1.程式執行時是待機狀態
2.輸入密碼後才判斷密碼是否正確,密碼共有4個字(英文字串或數字字串)
3.容許有3次輸入錯誤
4.密碼正確時門燈亮綠燈表示可通行,計時30秒後,門燈熄滅成紅燈,恢復為待機狀態
5.錯誤4次時警告燈亮,顯示"非法進入",中止程式(封鎖密碼輸入功能),計時1分鐘(60秒)後,恢復為待機狀態
依以上條件配置面板元件如下:
門燈設定為ON時綠燈,OFF時紅燈
警告燈設定為ON時紅燈,OFF時綠燈
密碼輸入的那個文字元件屬性也要改一下,將顯示的模式改成Password,這樣不論輸入什麼文字顯示出的都是*字
再來是程式部分:
為了容易理解就只用比較入門式的寫法,完成的程式如下圖:
大約解說一下程式結構:
1.因為有待機功能程式整個是放在迴圈內,只有按停止鈕時程式才會停止
2.因為程式的需求所以用順序結構將程式分成左右兩部分,左邊是待機和檢查密碼部分,右邊是依照檢查結果處理的部分,任何有待機需求的程式都可以套用這個模式
3.依據程式左右兩邊都要再用到迴圈,停止鈕的寫法是重點,目的是確保能隨時停止程式,又不會執行不需執行的部分
4.密碼比對是利用移位暫存器,在迴圈左邊拉出2個,上面的是新值,下面的是上一次的值。一開始時這2個值是相同的,當輸入新值後,這2個值會有僅一次不相同,此時就會自動進行密碼比對。當密碼比對完畢,這2個值恢復相同,再度成為不動作的待機狀態
5.比對結果是密碼正確或錯誤4次都會停止這個迴圈,按停止鈕也會停止這個迴圈
6.左邊比較簡單,若是右邊迴圈是按停止鈕停止的,就跳過這部分不執行
7.為了簡化程式停止鈕只在待機狀態時有作用,若程式已在進行第二步驟計時部分則沒有作用
左邊程式比對密碼的部份:
1.當輸入的密碼和設定密碼完全相同時,錯誤計次部分輸出為0,以錯誤計次輸出的數值為索引,從顯示訊息的文字陣列中輸出"密碼正確"這個字串
2.當輸入的密碼和設定密碼不同時(英文字大小寫也算不同),錯誤計次部分加1,以錯誤計次輸出的數值為索引,從顯示訊息的文字陣列中輸出"還可以輸入?次"這個字串
3.錯誤計次的數值為4時,從顯示訊息的文字陣列中輸出"非法進入"這個字串
右邊程式門燈計時的部分:
使用While迴圈搭配Tick Count (ms)元件來計時,當計時到30秒時停止迴圈
右邊程式警告燈計時的部分:
同樣使用While迴圈搭配Tick Count (ms)元件來計時,當計時到60秒時停止迴圈
另外將輸入密碼的文字元件Property Node屬性設定為KeyFocus項目放在迴圈內,在迴圈動作期間保持False狀態。這樣在迴圈動作期間都無法輸入密碼,封鎖了輸入功能
留言列表