電影《數(shù)碼寶貝大冒險(xiǎn):最后的進(jìn)化·羈絆》近期開始上映,看到大銀幕里一張張熟悉又陌生的臉,就很容易想起那段熱血沸騰的時(shí)光,樂樂也非常喜歡動(dòng)漫里一個(gè)個(gè)獨(dú)特的角色。
尤其是里面的光子郎,他在團(tuán)隊(duì)中相當(dāng)于軍師的角色,性格冷靜且十分聰明。
這個(gè)小男孩對(duì)所有人都很禮貌(包括父母),會(huì)在稱呼后加上敬語。經(jīng)常背著一臺(tái)仿APPLE的筆記型電腦到處跑的男孩,兒時(shí)雙親卻死于車禍,由父母的遠(yuǎn)房親戚收養(yǎng)。和太一關(guān)系相當(dāng)好,在可能遇到黑暗四天王的攻擊危險(xiǎn)之下,仍然與太一一起出去尋找感冒藥。
其中非常經(jīng)典的一個(gè)情節(jié)就是,最早在檔案島的安杜路獸的工廠中,光子郎通過分析巨大「電池」內(nèi)墻壁上的文字(也就是數(shù)碼文字和一些數(shù)字,還有人類世界的文字)從而描繪出了檔案島的全貌。
然而當(dāng)時(shí)動(dòng)畫給的一個(gè)畫面就是光子郎的屏幕是我們熟悉的【編程】,那《數(shù)碼寶貝》里泉光子郎的編程水平到底有多厲害呢?知乎上有一位大神借此做了解答。
題圖:Random Forest/知乎
怎樣評(píng)價(jià)《數(shù)碼寶貝》第一部中的泉光子郎的編程水平?
答主:Random Forest(2 萬+ 贊同)
受到@夜路川答主勇于用 python 進(jìn)化自己室友的激勵(lì),我順便深挖了一下《數(shù)碼寶貝》第一部第五集中光子郎在電腦上敲出的代碼,終于把原始代碼跑了出來,視頻在最后。
《數(shù)碼寶貝》第一部第五集截圖
雖然這段代碼會(huì)自己亂動(dòng)并讓甲蟲獸進(jìn)化,顯得狂拽酷炫吊炸天,但其實(shí)和第十集出現(xiàn)的代碼是一模一樣的(而動(dòng)畫里表現(xiàn)出的效果明顯不同)。第十集里的代碼反而看得更清楚一點(diǎn)。
《數(shù)碼寶貝》第一部第十集截圖
根據(jù)這張圖抽出文本如下:
100 /* func sample. coast creation */
110 float s
120 while s<1 or s>=2
130 input "ratio 1 to 2";s
140 endwhile
150 s = (s-1)/10+1
160 screen 1,2,1,1
170 s=sqr(s*s-1)
180 float x0=100, x1=412, y0=0, y1=0
190 fractal(x0,x1,y0,y1,1)
200 line(100, 50, 412, 50, 255, 65535)
210 end
220 func fractal(x0;float,x1;float,y0;float,y1;float,sp;int)
230 float l, r, x2, y2
240 l=sqr((x1-x0)*(x1-x0)+(y1-y0)*(y1-y0))
250 if l<2 or sp>=9 then {
260 line(x0,y0/3+50,x1,y1/3+50,255,65535) : return()
270 }
280 r=rnd()+rnd()+rnd()-2
290 x2=(x0+x1)/2+s*(y1-y0)*r
300 y2=(y0+y1)/2+s*(x0-x1)*r
310 sp = sp + 1
320 fractal(x0,x2,y0,y2,sp)
330 fractal(x2,x1,y2,y1,sp)
340 endfunc
如果想重新原汁原味地運(yùn)行這段代碼,首先要明確它的語言和版本。注意到注釋和變量定義的語法更接近 C 系語言,但還有 endwhile、func、endfunc 等關(guān)鍵字,可以確定這不是 VB 或者其他主流的 BASIC 系語言。
但是代碼行號(hào)的格式暴露了這貨肯定是個(gè)遠(yuǎn)古產(chǎn)物,我本來想看看光子郎電腦上這個(gè)文件的后綴名是什么,瞅了半天發(fā)現(xiàn)是「名稱未設(shè)定 3」(見上圖),失去線索的我只能開始瘋狂的 google……
在資料檢索過程中主要發(fā)現(xiàn)兩個(gè)問題。一是和這段代碼語法相近的語言太多,比如 VFP(Visual FoxPro,知道它的人肯定都老了)、VimScript、SAP 采用的 ABAP、早期 PHP、偽代碼的某個(gè)版本[1]、乃至德儀計(jì)算器的自創(chuàng)腳本語言等等。經(jīng)過一個(gè)個(gè)的嘗試,發(fā)現(xiàn)這些語言都是形似神不似,并不是真正的答案。
Google Books 里找到的一本 TI 計(jì)算器手冊(cè)
第二個(gè)問題是,如果仔細(xì)看光子郎的代碼,你一定會(huì)陷入困惑,因?yàn)檫@段代碼根本不像是有一個(gè)統(tǒng)一的語法規(guī)則。這里舉兩個(gè)栗子:
流程控制語法不統(tǒng)一。120-140 行的 while-endwhile 結(jié)構(gòu),或許讓你覺得和 BASIC 有一點(diǎn)點(diǎn)類似,而且順便猜測(cè) if 語句肯定也會(huì)有個(gè) endif 結(jié)尾。但是 250-270 行的 if 語句居然用了大括號(hào),更喪心病狂的是在 then 后面接大括號(hào)!
變量聲明格式不統(tǒng)一。110 行是類 C 的聲明格式,而 220 行的函數(shù)參數(shù)卻用了類似 ECMAScript 的聲明方式,但用的不是冒號(hào)是分號(hào)。這讓我一度以為這段代碼就是導(dǎo)演魔改的,是一種不存在的噩夢(mèng)般的語言。
然而,在我就要放棄之際,一位國外先行者的博文給了我曙光(盡管文章里有一些錯(cuò)誤)[2]。這個(gè)語言最終還是被查出來了…… 事情要追溯到 1987 年,夏普發(fā)布了一款型號(hào)為 X68000 的 PC。作為那個(gè)年代的電腦,搭載了 10MHz 的摩托羅拉 68000CPU,1MB 的內(nèi)存,沒有硬盤,且只在日本發(fā)售[3]。其操作系統(tǒng)是夏普為這一系列電腦專門設(shè)計(jì)的 Human68k,《數(shù)碼寶貝》中的那段代碼,就屬于這個(gè)操作系統(tǒng)專有的編程語言 X-BASIC[4]。
Sharp X68000ACE-HD
X-BASIC 手冊(cè)
日本維基上 X-BASIC 的一段例程 這個(gè)系列的最后一款電腦在 1993 年發(fā)布(配置有所增強(qiáng)),而《數(shù)碼寶貝》第一部是在 1999 年放映的,可見在動(dòng)畫制作時(shí)期,光子郎的代碼也不算特別陳舊。 為了實(shí)際地跑一下這段代碼,又經(jīng)過一番艱辛的努力,我搞到了 X68000 的模擬器,還有操作系統(tǒng) Human68k(version 3.02)的磁盤映像,現(xiàn)在還能找到這些東西,真的要感謝極客阿宅們的默默奉獻(xiàn)。 在模擬器里一開機(jī),感覺就成功了一半:
為了能使代碼順利運(yùn)行,還需加載 SX-WINDOW 映像。最后終于找到 X-BASIC,一字不差地鍵入了光子郎的代碼:
執(zhí)行 run 命令,按代碼要求輸入一個(gè) 1 到 2 之間的浮點(diǎn)數(shù)值,下面就是見證奇跡的時(shí)刻了! 運(yùn)行《數(shù)碼寶貝》光子郎寫的代碼:
我不禁望向窗外的那只放屁蟲,它仍在很悠閑地曬太陽,很遺憾我的甲蟲獸并沒有進(jìn)化……原因很簡(jiǎn)單,這真的只是一段隨機(jī)生成「coast」輪廓的代碼。初始輸入是一個(gè)閾值,從視頻里看,顯然閾值越高「海岸」越險(xiǎn)峻,閾值越低「海岸」越平滑,很有可能是摘取了當(dāng)時(shí)哪個(gè)游戲里地圖生成器的一段源碼。所以,導(dǎo)演又糊弄事呢? 最后話說回光子郎的編程水平,這段代碼的難點(diǎn)主要在于用遞歸實(shí)現(xiàn)了分形圖形的繪制,雖然沒什么特別神秘的地方,但還是需要一定程度的編程技能和數(shù)學(xué)知識(shí)。原理上很像我之前繪制謝爾賓斯基三角形的代碼。 但是光子郎當(dāng)時(shí)好像上小學(xué)四年級(jí)?
而且在動(dòng)畫里,這段程序的輸出是這樣的,光子郎最后靠這個(gè)成功還原了他和美美所在的迷宮。
嘛,單從這里看,感覺能進(jìn)科大少年班就是了…… 彩蛋:當(dāng)年 X68000 系列的電腦還隨附一個(gè)名為 060turbo[5]的軟件,單獨(dú)裝在一個(gè)磁盤。這個(gè)軟件的唯一功能是在屏幕上隨機(jī)打印一張復(fù)雜的分形圖形(疑似 Mandelbrot 圖像?并不是很確定)。我用模擬器試了一下,效果確實(shí)驚艷,感覺光子郎在成為分形大師的路上還需努力 23333。
參考 1. ^Pseudocode Examples https://www.unf.edu/~broggio/cop3530/3530pseu.htm 2. ^Running Izzy's "Digivolving" code https://digitalworldproblems.tumblr.com/post/76036641581/while-im-looking-at-that-moviecode-post-he 3. ^X68000 https://en.wikipedia.org/wiki/X68000 4. ^X-BASIC https://ja.wikipedia.org/wiki/X-BASIC 5. ^060turbo の添付ディスク http://retropc.net/x68000/software/hardware/060turbo/disk060t/
責(zé)任編輯:xj
原文標(biāo)題:《數(shù)碼寶貝》里泉光子郎的編程水平到底有多厲害?
文章出處:【微信公眾號(hào):漢中樂博樂博機(jī)器人】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
-
C語言
+關(guān)注
關(guān)注
180文章
7594瀏覽量
135862 -
編程
+關(guān)注
關(guān)注
88文章
3565瀏覽量
93536 -
程序員
+關(guān)注
關(guān)注
4文章
949瀏覽量
29744
原文標(biāo)題:《數(shù)碼寶貝》里泉光子郎的編程水平到底有多厲害?
文章出處:【微信號(hào):lebo13992672467,微信公眾號(hào):漢中樂博樂博機(jī)器人】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論