最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會(huì)員登陸 & 注冊(cè)

【TIS-100 攻略】TIS-NET 第 14 關(guān):密閉空間路徑查看器

2022-11-08 11:51 作者:ココアお姉ちゃん  | 我要投稿

本文首發(fā)于 B 站《TIS-100》文集(https://www.bilibili.com/read/readlist/rl626023)。原創(chuàng)不易,轉(zhuǎn)載請(qǐng)注明出處。

TIS-NET 第 14 關(guān)《密閉空間路徑查看器》(Spatial Path Viewer)關(guān)卡展示

本關(guān)需要從 IN 里讀入一個(gè)角度值 ang 和一個(gè)長(zhǎng)度值 len,然后根據(jù)以下規(guī)則在畫(huà)布上畫(huà)出水平線和垂直線:

  • 畫(huà)筆初始位置在左上角 (0, 0) 點(diǎn);

  • ang = 0 時(shí),畫(huà)一條以當(dāng)前點(diǎn)起始的,方向向右的,長(zhǎng)度為 len 的水平線;

  • ang = 90 時(shí),畫(huà)一條以當(dāng)前點(diǎn)起始的,方向向上的,長(zhǎng)度為 len 的垂直線;

  • ang = 180 時(shí),畫(huà)一條以當(dāng)前點(diǎn)起始的,方向向左的,長(zhǎng)度為 len 的水平線;

  • ang = 270 時(shí),畫(huà)一條以當(dāng)前點(diǎn)起始的,方向向下的,長(zhǎng)度為 len 的垂直線。

轉(zhuǎn)換成具體的坐標(biāo)的話,如下:

  • 畫(huà)筆初始位置在左上角 (0, 0) 點(diǎn);

  • ang = 0 時(shí),畫(huà)筆的坐標(biāo)由當(dāng)前的 (x, y) 移動(dòng)到 (x+len-1, y);

  • ang = 90 時(shí),畫(huà)筆的坐標(biāo)由當(dāng)前的 (x, y) 移動(dòng)到 (x, y-len+1);

  • ang = 180 時(shí),畫(huà)筆的坐標(biāo)由當(dāng)前的 (x, y) 移動(dòng)到 (x-len+1, y);

  • ang = 270 時(shí),畫(huà)筆的坐標(biāo)由當(dāng)前的 (x, y) 移動(dòng)到 (x, y+len-1)。

本關(guān)首先要將角度值 0、90、180、270 映射成坐標(biāo)偏移量 (Δx, Δy)。映射關(guān)系如下:

  • 0 → (1, 0);

  • 90 → (0, -1);

  • 180 → (-1, 0);

  • 270 → (0, 1)。

我們每畫(huà)一個(gè)點(diǎn),就按照以上方式偏移畫(huà)筆坐標(biāo)。然后,由于每畫(huà)一條線,畫(huà)筆都需要向同樣的方向偏移 len-1 次,所以同樣的偏移量我們需要連續(xù)發(fā)送 len-1 次。本關(guān)的代碼如下:

首先,因?yàn)槊恳粋€(gè)角度都映射成了 (Δx, Δy) 這兩個(gè)數(shù)字,所以我們?cè)诓楸砬?,首先要?0、90、180、270 映射成表中的地址值。上方節(jié)點(diǎn)的前 5 行代碼用于將角度值轉(zhuǎn)換成地址值:讀入一個(gè)角度后,不斷減去 87(mov up acc, sub 87, jgz 2),直到減到負(fù)數(shù)后再加回一個(gè) 88(add 88)。因此,角度值和地址值的映射關(guān)系如下表所示:

角度 0 映射到了地址 1,角度 90 映射到了地址 4,角度 180 映射到了地址 7,角度 270 映射到了地址 10。我們將算好的地址值發(fā)給下方(mov acc down)。

接下來(lái)第 6~11 行代碼則是往下發(fā) len-2 次 -2(mov up acc, sub 2, mov -2 down, sub 1, jnz 8)和一次 -999(mov -999 down)。

中央節(jié)點(diǎn)純傳話(mov up down)。

左下角的節(jié)點(diǎn)就是記錄了四種 (Δx, Δy) 的表。由于畫(huà)圖節(jié)點(diǎn)在傳完 (x, y) 坐標(biāo)后,acc 和 bak 已經(jīng)經(jīng)過(guò)了一次交換,acc 里存放的是實(shí)時(shí)的 y 坐標(biāo),bak 里存放的是實(shí)時(shí)的 x 坐標(biāo)。那么為了減少 swp 指令的使用次數(shù),在移動(dòng)畫(huà)筆時(shí),我們選擇先提供 Δy,再提供 Δx。

左下角點(diǎn)首先等待上方傳來(lái) 1/4/7/10 的地址值(jro up):

  • 傳來(lái) 1 時(shí),說(shuō)明當(dāng)前角度是 0,我們向下跳 1 行,給畫(huà)圖節(jié)點(diǎn)傳入 Δy = 0, Δx = 1 的偏移量(mov 0 right, mov 1 right);

  • 傳來(lái) 4 時(shí),說(shuō)明當(dāng)前角度是 90,我們向下跳 4 行,給畫(huà)圖節(jié)點(diǎn)傳入 Δy = -1, Δx = 0 的偏移量(mov -1 right, mov 0 right);

  • 傳來(lái) 7 時(shí),說(shuō)明當(dāng)前角度是 180,我們向下跳 7 行,給畫(huà)圖節(jié)點(diǎn)傳入 Δy = 0, Δx = -1 的偏移量(mov 0 right, mov -1 right);

  • 傳來(lái) 10 時(shí),說(shuō)明當(dāng)前角度是 270,我們向下跳 10 行,給畫(huà)圖節(jié)點(diǎn)傳入 Δy = 1, Δx = 0 的偏移量(mov 1 right, mov 0 right)。

注意到以上四個(gè)代碼塊的下方都有一個(gè)對(duì)應(yīng)的 jro up 指令。由于同樣的偏移量需要傳 len-1 次,而我們剛才已經(jīng)傳了一次,還剩下 len-2 次沒(méi)有傳。上方節(jié)點(diǎn)還會(huì)給我們發(fā)送 len-2 次 -2。我們每收到一次 -2,就往上跳 2 行,將同樣的偏移量再往右邊發(fā)送一次。同樣的偏移量重復(fù)發(fā)送 len-1 次后,我們最終會(huì)收到上方發(fā)來(lái)的 -999 指令。由于我們的上方并沒(méi)有 999 行代碼,所以程序會(huì)選擇最近的邊界點(diǎn),即跳到首行的 jro up,等待上方節(jié)點(diǎn)發(fā)來(lái)下一次的地址值。

最后是右下角的畫(huà)圖節(jié)點(diǎn):

  1. 畫(huà)圖節(jié)點(diǎn)的 acc 里存的是畫(huà)筆當(dāng)前的 x 坐標(biāo),bak 里存儲(chǔ)的是畫(huà)筆當(dāng)前的 y 坐標(biāo)。我們首先給 image 依次發(fā)送 x(mov acc down)

  2. y(swp)

  3. (mov acc down)

  4. 3(mov 3 down)

  5. -1(mov -1 down),要求 image 在 (x, y) 處畫(huà)一個(gè)白色的點(diǎn)。

  6. 接下來(lái),我們不斷從左下角的節(jié)點(diǎn)接收 Δy 和 Δx,將對(duì)應(yīng)的偏移量加到 y 和 x 上去(add left)

  7. (swp)

  8. (add left)每收到一組偏移量,就跳回第一行繼續(xù)在新的 (x, y) 上畫(huà)點(diǎn)。如此反復(fù),直到畫(huà)完所有要求的線條。

點(diǎn)擊左下角的【RUN】,稍等片刻,便會(huì)彈出結(jié)算界面:


【TIS-100 攻略】TIS-NET 第 14 關(guān):密閉空間路徑查看器的評(píng)論 (共 條)

分享到微博請(qǐng)遵守國(guó)家法律
九龙坡区| 黑水县| 吴忠市| 安化县| 南充市| 彭阳县| 五寨县| 都江堰市| 紫阳县| 清徐县| 克山县| 无锡市| 定陶县| 建瓯市| 康平县| 崇文区| 宁夏| 龙里县| 安宁市| 长沙县| 韶山市| 沾化县| 平湖市| 东光县| 大厂| 溆浦县| 繁昌县| 保亭| 遂溪县| 绥化市| 祥云县| 山东省| 乐东| 吐鲁番市| 恩施市| 平谷区| 古蔺县| 栾城县| 汝阳县| 康乐县| 张家港市|