【TIS-100 攻略】TIS-NET 第 13 關:測試圖 4

本文首發(fā)于 B 站《TIS-100》文集(https://www.bilibili.com/read/readlist/rl626023)。原創(chuàng)不易,轉載請注明出處。
TIS-NET 第 13 關《測試圖 4》(Image Pattern 4)關卡展示

本關需要畫出一個比上一章第 15 關紋理更豐富的國際象棋棋盤。我們將每個像素的色號寫出來,如下:

第一行是 0、1、2、3 循環(huán),第二行是 1、0、3、2 循環(huán),第三行是 2、3、0、1 循環(huán),第四行是 3、2、1、0 循環(huán)。乍一看,要使用四個無限流來提供顏色。但是畫圖節(jié)點的下方鄰居已經(jīng)是 image 了,可以用的鄰居只有三個。能不能省去若干個無限流呢?答案是可以的,如果我們只看偶數(shù)行:

可以看到:偶數(shù)行的顏色是按 0、1、2、3 的順序依次出現(xiàn)的,只看偶數(shù)行的話,第 2 行開頭的 2 其實是接在第 0 行結尾的 1 后面的,0、1、2、3 的順序并沒有被打亂。
然后我們再只看奇數(shù)行:

奇數(shù)行的顏色則是按 1、0、3、2 的順序依次出現(xiàn)。這樣,問題就解決了,我們提供兩個無限流,其中一個用來提供偶數(shù)行的顏色,另一個用來提供奇數(shù)行的顏色。我們畫第偶數(shù)行時,就從第一個流里取顏色;畫第奇數(shù)行時,就從第二個流里取顏色。如此,問題解決。代碼如下:

畫圖節(jié)點的三個鄰居節(jié)點提供了三個無限流:
上方提供的是?y 坐標流,從 0 開始,每提供一個數(shù)(mov acc down)就將自身 +1(add 1),因此會依次發(fā)送?0,1,2,3,……,直到最終的 17。
左邊提供的是偶數(shù)行的顏色流,按 0、1、2、3 循環(huán)(mov 0 right, mov 1 right, mov 2 right, mov 3 right)。
右邊提供的是奇數(shù)行的顏色流,按 1、0、3、2 循環(huán)(mov 1 left, mov 0 left, mov 3 left, mov 2 left)。
中間的畫圖節(jié)點就是在跟這些流打交道:
前 7 行是用來畫偶數(shù)行的,向下發(fā)送起始 x(mov 0 down)
和起始 y(mov up down)后,
從【左邊】的無限流中取 30 個顏色發(fā)給下方(mov 30 acc)
(mov left down)
(sub 1)
(jnz 4)
最后發(fā)一個 -1(mov -1 down);
后 7 行是用來畫奇數(shù)行的,向下發(fā)送起始 x(mov 0 down)
和起始 y(mov up down)后,
從【右邊】的無限流中取 30 個顏色發(fā)給下方(mov 30 acc)
(mov right down)
(sub 1)
(jnz b)
最后發(fā)一個 -1(mov -1 down)。兩段代碼只有行號和一個方向的區(qū)別。
點擊左下角的【RUN】,稍等片刻,便會彈出結算界面:
