深圳IO遊戲入門攻略(不定期更新)
@
目錄沒學過彙編,公眾號看到的遊戲,steam入手了,隨手記錄下
第一關 (模擬)安全攝像頭
第一關比較簡單,只需要在原來的基礎上面造輪子就行。先選擇右側的器件,這裡選用MC4000。(保持上下器件一致,畢竟剛接觸,其他器件也不知道怎麼玩,滑鼠左鍵是連線,右鍵是取消)
切換到確認的選項卡,可以看到訊號的輸出。分析給出的活動狀態的程式碼
mov 0 p0 //將第一個運算元複製到第二個運算元中 slp 6 //slp 6等價於sleep 6毫秒,在遊戲中就是六個單位 mov 100 p0 slp 6
0電平訊號走了6單位,100電平走了6單位,然後一直迴圈。
在來看網路輸出訊號的規律。
大體都一樣,都是對某一部分迴圈。
0電平4單位,100電平2單位,0電平1單位,100電平1單位。
mov 0 p0
slp 4
mov 100 p0
slp 2
mov 0 p0
slp 1
mov 100 p0
slp 1
測試成功
這裡還顯示了所花費的產品成本,電量以及程式碼行數,同時可以看到其他玩家的消耗,鼓勵玩家不斷優化自己的程式碼,成本和電量,相當於同臺競技,挺好的。第一關通過後有個紙牌遊戲
想累了,可以試著玩一下。有空做個入門的小教程,也不知道每一把是不是都有個解?
第二關 工程模型替換件
第二關可能把一部分人整蒙了(包括我),因為沒有可以參考的了,所以只能自己做了。通過提示資訊和郵件,我們需要放大控制訊號。器件依舊是MC4000。
由於沒學習過組合語言,所以參考自帶的資料手冊(下載連結在末尾,分中英兩版,版主英語不行,看的是中文的)
翻閱手冊,在p13-p15左右找到一些頭緒
R我覺得應該是暫存器(Register)吧?咋翻譯成儲存器,不是很清楚,參考連結:知乎
主要是兩個指令,mov 和 mul。還有一個名為acc的預設暫存器
在回想下第一關中的程式碼,好像就明白了一些什麼
mov R/I R //R:暫存器,I:整數型別
mov 0 p0 //把0(運算元)複製到p0(運算元)
mul R/I //將第一個運算元的值與acc儲存器相乘,並將結果存到acc
我們要做到,是將p0端的訊號,放大一倍輸出到p1端。那麼中間勢必要經過某些過程,沒學過計算機的可能對這些指令不知道怎麼辦。我舉個例子,你有兩杯飲料,分別裝著牛奶和橙汁,你現在需要調換兩杯子之間的飲料,先前放牛奶的杯子現在要放橙汁,放橙汁的杯子現在要放牛奶。顯然,如果只有手頭兩個裝滿飲料的杯子,是沒有辦法將內容進行調換的。所以我們需要借一個杯子,第三個杯子。牛奶的先倒在空杯子,橙汁的倒在牛奶裡面,空杯子內的牛奶在倒在橙汁裡,這樣就完成了飲料的互換。
mov p0 acc //將輸入端的訊號放到acc中
//因為需要放大一倍的訊號,也就是乘以2
mul 2 // mul 2也就是 acc *= 2等價於acc = acc * 2
mov acc p1
//注意,這裡需要slp 1,通過觀察波形圖可以得知。具體進遊戲,滑鼠放上去有提示
slp 1
測試成功
第三關 脈衝發生器
閱讀郵件,注意到有條件執行五個字
在看一眼波形圖
輸入訊號為100時,脈衝訊號走1單位100,然後走1單位0(注意第三個,輸入是100走11單位,但第12單位變0,輸出也就變0)。
重點是條件這兩個字,繼續翻手冊,p16可以得到想要的內容。
上述分析我們得知,當輸入為100時,才產生脈衝。
teq R/I R/I //比較兩個運算元是否相等
//相等:執行+指令,禁止-指令,不相等:執行-指令,禁止+指令
問題來了,+ - 放在哪裡呢?在p13,可以得到想要的答案
teq 100 p0 //判定100 和p0相等麼?相等走+指令
+ mov 100 p1 //將p1置為100,
+ slp 1 //走1單位
+ mov 0 p1 //p1置為0
slp 1 //若不相等,走1單位
注意這裡的程式結構,由於程式是自上而下的,有的人可能寫成這樣
teq 100 p0
slp 1
+ mov 100 p1
+ slp 1
+ mov 0 p1
測試後:
還是要注意下,程式碼的先後順序的。對了,可以設定斷點,不斷的試錯。成功是建立在無數次失敗上面的!
測試成功
點選模擬,沒有前面兩個那麼絲滑了,嗯,我在想想咋改進,讓它絲滑點。-----------------------------2021/3/14更
第四關 發光標誌
看一眼郵件和提示資訊
在看一眼波形圖
好像找不到什麼思緒。看了下點選0和點選1兩部分,是互補的。第二關中給的圖中有這麼一個指令:not
acc暫存器的值預設為1,由於not不帶任何運算元,所以,應該是單獨的一行。注意到,點選1的波形圖先是0電平,走一單位,100電平,走一單位,0到100電平靠not指令執行。
mov acc p1 //先將p1暫存器中存放acc的預設值,0
not //acc此時的值為100
mov acc p0 //將p0暫存器中存放acc為100的狀態量
slp 1 //走一單位。
//第一圈:p1 = 0,p0 = 100,走一單位
//第二圈:p1 = 100, p0 = 0,走一單位,此後迴圈往復。
測試結果:
現在開始另外一部分,也是互補,只不過是三個部分的互補了。
沒想到啥好的思路,先過關,後面來補。
//喝-0
mov 100 p0
slp 6
mov 0 p0
slp 4
//喝-1
mov 0 p0
slp 6
mov 100 p0
slp 1
mov 0 p0
slp 2
mov 100 p0
slp 1
//喝-2
mov 0 p0
slp 7
mov 100 p0
slp 2
mov 0 p0
slp 1
測試成功
-----------------------------------------------------------------2021/3/15更
PS:今天沙塵暴有點大,受不住這空氣
第五關 海量男爵
第六關 垃圾音訊裝置
遊戲成就
嘿嘿,空擋接龍成功10次了--------2021/3/15 1:41更
成功20次--------------------------------2021/3/16 0:32更
參考手冊
中文
連結:https://pan.baidu.com/s/1aTiLpA44K2nXDvYemgvSTA
提取碼:s5zx
英文
連結:https://pan.baidu.com/s/1Ydvd4dQtcaxluSrctIvLzg
提取碼:xexp