電影《數碼寶貝大冒險:最後的進化·羈絆》前段時間已經上映,看到大銀幕裡一張張熟悉又陌生的臉,就很容易想起那段熱血沸騰的時光,樂樂也非常喜歡動漫裡一個個獨特的角色。
尤其是裡面的光子郎,他在團隊中相當於軍師的角色,性格冷靜且十分聰明。
這個小男孩對所有人都很禮貌(包括父母),會在稱呼後加上敬語。經常背著一臺仿APPLE的筆記型電腦到處跑的男孩,兒時雙親卻死於車禍,由父母的遠房親戚收養。和太一關係相當好,在可能遇到黑暗四天王的攻擊危險之下,仍然與太一一起出去尋找感冒藥。
其中非常經典的一個情節就是,最早在檔案島的安杜路獸的工廠中,光子郎通過分析巨大「電池」內牆壁上的文字(也就是數碼文字和一些數字,還有人類世界的文字)從而描繪出了檔案島的全貌。
然而當時動畫給的一個畫面就是光子郎的屏幕是我們熟悉的【編程】,那《數碼寶貝》裡泉光子郎的編程水平到底有多厲害呢?知乎上有一位大神藉此做了解答。
題圖:Random Forest/知乎
怎樣評價《數碼寶貝》第一部中的泉光子郎的編程水平?
答主:Random Forest(2 萬+ 贊同)
受到 @夜路川 答主勇於用 python 進化自己室友的激勵,我順便深挖了一下《數碼寶貝》第一部第五集中光子郎在電腦上敲出的代碼,終於把原始代碼跑了出來,視頻在最後。
《數碼寶貝》第一部第五集截圖
雖然這段代碼會自己亂動並讓甲蟲獸進化,顯得狂拽酷炫吊炸天,但其實和第十集出現的代碼是一模一樣的(而動畫裡表現出的效果明顯不同)。第十集裡的代碼反而看得更清楚一點。
《數碼寶貝》第一部第十集截圖
根據這張圖抽出文本如下:
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
如果想重新原汁原味地運行這段代碼,首先要明確它的語言和版本。注意到注釋和變量定義的語法更接近 C 系語言,但還有 endwhile、func、endfunc 等關鍵字,可以確定這不是 VB 或者其他主流的 BASIC 系語言。
但是代碼行號的格式暴露了這貨肯定是個遠古產物,我本來想看看光子郎電腦上這個文件的後綴名是什麼,瞅了半天發現是「名稱未設定 3」(見上圖),失去線索的我只能開始瘋狂的 google……
在資料檢索過程中主要發現兩個問題。一是和這段代碼語法相近的語言太多,比如 VFP(Visual FoxPro,知道它的人肯定都老了)、VimScript、SAP 採用的 ABAP、早期 PHP、偽代碼的某個版本[1]、乃至德儀計算器的自創腳本語言等等。經過一個個的嘗試,發現這些語言都是形似神不似,並不是真正的答案。
Google Books 裡找到的一本 TI 計算器手冊
第二個問題是,如果仔細看光子郎的代碼,你一定會陷入困惑,因為這段代碼根本不像是有一個統一的語法規則。這裡舉兩個慄子:
流程控制語法不統一。120-140 行的 while-endwhile 結構,或許讓你覺得和 BASIC 有一點點類似,而且順便猜測 if 語句肯定也會有個 endif 結尾。但是 250-270 行的 if 語句居然用了大括號,更喪心病狂的是在 then 後面接大括號!變量聲明格式不統一。110 行是類 C 的聲明格式,而 220 行的函數參數卻用了類似 ECMAScript 的聲明方式,但用的不是冒號是分號。這讓我一度以為這段代碼就是導演魔改的,是一種不存在的噩夢般的語言。然而,在我就要放棄之際,一位國外先行者的博文給了我曙光(儘管文章裡有一些錯誤)[2]。這個語言最終還是被查出來了……事情要追溯到 1987 年,夏普發布了一款型號為 X68000 的 PC。作為那個年代的電腦,搭載了 10MHz 的摩託羅拉 68000CPU,1MB 的內存,沒有硬碟,且只在日本發售[3]。其作業系統是夏普為這一系列電腦專門設計的 Human68k,《數碼寶貝》中的那段代碼,就屬於這個作業系統專有的程式語言 X-BASIC[4]。這個系列的最後一款電腦在 1993 年發布(配置有所增強),而《數碼寶貝》第一部是在 1999 年放映的,可見在動畫製作時期,光子郎的代碼也不算特別陳舊。為了實際地跑一下這段代碼,又經過一番艱辛的努力,我搞到了 X68000 的模擬器,還有作業系統 Human68k(version 3.02)的磁碟映像,現在還能找到這些東西,真的要感謝極客阿宅們的默默奉獻。為了能使代碼順利運行,還需加載 SX-WINDOW 映像。最後終於找到 X-BASIC,一字不差地鍵入了光子郎的代碼:執行 run 命令,按代碼要求輸入一個 1 到 2 之間的浮點數值,下面就是見證奇蹟的時刻了!我不禁望向窗外的那隻放屁蟲,它仍在很悠閒地曬太陽,很遺憾我的甲蟲獸並沒有進化……原因很簡單,這真的只是一段隨機生成「coast」輪廓的代碼。初始輸入是一個閾值,從視頻裡看,顯然閾值越高「海岸」越險峻,閾值越低「海岸」越平滑,很有可能是摘取了當時哪個遊戲裡地圖生成器的一段源碼。所以,導演又糊弄事呢?最後話說回光子郎的編程水平,這段代碼的難點主要在於用遞歸實現了分形圖形的繪製,雖然沒什麼特別神秘的地方,但還是需要一定程度的編程技能和數學知識。原理上很像我之前繪製謝爾賓斯基三角形的代碼。而且在動畫裡,這段程序的輸出是這樣的,光子郎最後靠這個成功還原了他和美美所在的迷宮。彩蛋:當年 X68000 系列的電腦還隨附一個名為 060turbo[5]的軟體,單獨裝在一個磁碟。這個軟體的唯一功能是在屏幕上隨機列印一張複雜的分形圖形(疑似 Mandelbrot 圖像?並不是很確定)。我用模擬器試了一下,效果確實驚豔,感覺光子郎在成為分形大師的路上還需努力 23333。1. ^Pseudocode Examples https://www.unf.edu/~broggio/cop3530/3530pseu.htm2. ^Running Izzy's "Digivolving" code https://digitalworldproblems.tumblr.com/post/76036641581/while-im-looking-at-that-moviecode-post-he3. ^X68000 https://en.wikipedia.org/wiki/X680004. ^X-BASIC https://ja.wikipedia.org/wiki/X-BASIC5. ^060turbo の添付ディスク http://retropc.net/x68000/software/hardware/060turbo/disk060t/電影《數碼寶貝大冒險:最後的進化·羈絆》已經上映,又一個陪伴我們長大的童年故事宣告完結。我們與數碼寶貝就像相識多年的摯友,我們的羈絆不管跨越多少距離與歲月都不會磨滅。A股上市的幼少兒機器人編程教育機構
國內12年教育經驗,國內500家校區
課程模式上線、線下相結合
免費試聽掃碼預約
樂博樂博一直堅持
做最有溫度的素質教育機構
你想學習探索編程的嗎?
你想近距離的觀察機器人嗎?
你想親手實操搭建機器人嗎?
你想和小夥伴們一起分享快樂與知識
廣州樂博樂博各校區地址、電話:
天河區:
①華景校區:
地址:天河區中山大道西140號華港商務大廈西塔1216(華景新城站 )
電話:020-82689445 13602419403
②華晟校區:
地址:天河區五山路1號華晟大廈1704-1705室(崗頂站 )
電話:020-38094671
越秀區:
③羊城校區:
地址:越秀區東風東路733號羊城同創匯印刷樓二樓扶梯旁(東風東路 或區莊站 )
電話:020-37615110 18578757372
白雲區:
④飛翔校區:
地址:白雲區雲城東路景泰創展中心B棟326室(飛翔公園站 )
電話:020-31526574
海珠區:
⑤海悅校區:
地址:海珠區翠寶路184號海悅廣場3層(寶崗大道站)
電話:020-89625313
⑥縱橫校區:
地址:海珠區新港中路456號縱橫廣場二樓B217、218室(赤崗站 )
電話:020-34328225
番禺區:
⑦市橋校區:
地址:捷進二路18號宇弘廣場2樓202室(市橋站 )
電話:020-85821641
荔灣區:
⑧富邦校區:
地址:中山七路65號富邦中心寫字樓6樓601- 604室(西門口站)
電話:020-86536107
聯繫方式:lianyinan@roborobo.cn更多內容請關注微信公眾號平臺:ROBOROBO廣州 ID:gh_5b3658faa573
本文僅做分享,如有侵權聯繫刪除。