1. 程式人生 > 其它 >深圳IO遊戲入門攻略(不定期更新)

深圳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