《A=B》:用糟糕編程語言來編程的優秀編程遊戲


3樓貓 發佈時間:2022-04-22 19:21:36 作者:Zuxin Language

《A=B》:用糟糕編程語言來編程的優秀編程遊戲-第0張

早在這個遊戲EA開始前,我就有幸在QQ群看到作者Artless說他的下一個遊戲將會是一個類似Zachtronics風格的編程遊戲。作為解謎遊戲中的一種“異類”,編程遊戲有著眾多和其他解謎遊戲不同的特點:

  • 關卡以解法多種多樣著稱,而不是像很多解謎遊戲只有唯一解。
  • 相比其他解謎遊戲“爽點”幾乎全在“啊哈時刻”,編程遊戲一大“爽點”在於優化自己的過關思路和步數。
  • 比起玩遊戲會感覺自己更象在上班或者在看LeetCode。

綜上所述,雖然作者Artless製作了頗為驚豔的《Understand 頓悟》,一開始我也覺得編程遊戲思路會跟其他解謎遊戲不同。不過實際遊玩下來,我覺得作者處理的十分出色,雖然依舊經常腦死,本文將會嘗試從遊戲設計的角度來安利和分析一下《A=B》好在哪裡。另外,這款遊戲也依舊繼承了Artless人如其名的風格:美術部分幾乎等於沒有,甚至裡面的滾動條和字體大概是Unity3D自帶的。順便一提,如果你因為擔心自己不會編程而不想嘗試這款遊戲。那麼你的擔心是多餘的,即使你會一門現代編程語言,遊玩本作依舊會讓人感到頭疼。

核心規則:

A=B就像作者在Steam介紹裡寫的一樣,A=B的核心玩法是字符串替換。後面所有新加入的規則都是基於這個簡單的規則:A=B。

《A=B》:用糟糕編程語言來編程的優秀編程遊戲-第1張

A=B也是第一關的答案


玩過Zachtronics系列遊戲的朋友應該都清楚,Zachtronics遊戲大概分三類:

  • 有說明書的編程遊戲;
  • 沒有說明書的編程遊戲;
  • 壓根就不是編程遊戲。

《TIS-100》《SHENZHEN I/O》為代表的第一類,遊玩時必須要查一本隨遊戲附贈的PDF手冊才能明白遊戲的機制是怎麼運作的。


《A=B》:用糟糕編程語言來編程的優秀編程遊戲-第2張

《SHENZHEN I/O》直接把RTFM(read the f*cking manual)寫在了遊戲簡介裡


與此相對的,Zachtronics的第二類遊戲我更為鍾愛,如《Infinifactory》《Opus Magnum》。這類編程遊戲用關卡設計來替代厚厚的手冊,每一關既是一個難點也是一個你學會新機制的辦法。《A=B》在形式上極其像《Opus Magnum》,每個章節會引入一個全新的機制。遊戲也十分幽默的模仿了《Opus Magnum》每個關卡穿插對話來表達劇情以及嵌入了一個小遊戲的Zachtronics系風格。


《A=B》:用糟糕編程語言來編程的優秀編程遊戲-第3張

遊戲內嵌了一個名為《盤古計劃》的遊戲,如果按照Zachtronics系的風格說不定這個遊戲後面會獨立出來。


實際上,遊戲也附贈了很多PDF(更像是對Zachtronics的惡搞和致敬)。裡面一般只有寥寥幾句話來介紹這個章節引入的機制,結合遊戲主題是一個大學生想讓教授通過他的編譯原理而自創了一門語言並不斷完善它,作者在PDF裡使用的語言描述就更像一個大學生答辯的口吻了。


《A=B》:用糟糕編程語言來編程的優秀編程遊戲-第4張

是的,以上是全部指令


而我們每次通關最後教授都會無情地批判這門語言的缺點,於是下一個章節就引入了新的機制來“完善”這門語言。


《A=B》:用糟糕編程語言來編程的優秀編程遊戲-第5張

無情的教授


Esolang:反現代編程語言其道而行之

所有現代編程語言都有一些設計原則,比如簡化複雜度、高度抽象、語法糖、高容錯率等等。而這些在Esolang類語言裡則完全不存在。


《A=B》:用糟糕編程語言來編程的優秀編程遊戲-第6張

"優點"


Esolang全稱Esoteric programming language,意指深奧的編程語言也被稱為玩笑編程語言。設計者幾乎不會以提高該語言的易用性為目標,但會保證邏輯上的可用性。設計者通常會移除或取代傳統語言的常見功能,但仍會強調並保持圖靈完備性的遊戲裡使用的語言就是這樣一種典型的Esolang語言。

《A=B》:用糟糕編程語言來編程的優秀編程遊戲-第7張

遊戲裡的第一個大挑戰:排序

玩家在遊玩遊戲過程中,要完全忘記現代語言的便攜性和易用性。用字符串替換來實現一些平時司空見慣以至於沒想過還可以怎麼實現的算法。比如排序、判斷大小、去重甚至數學運算等其他語言中的基本操作。在玩家攻克這些難關時,可以或主動或被動的掌握一些底層語言編程思想比如指針,身體力行的瞭解。玩家通過後面章節不斷介紹新機制也可以感受到一種一個編程語言從無到有的過程。

《A=B》:用糟糕編程語言來編程的優秀編程遊戲-第8張

遊戲裡一直透露著一種幽默,比如這裡的baba梗

《A=B》:用糟糕編程語言來編程的優秀編程遊戲-第9張

作者的前作頓悟裡也藏有baba的彩蛋


優化的樂趣

前面說過,編程遊戲有一部分樂趣來自於重新挑戰,本作也不例外。遊戲之前有很長的EA階段的一部分原因就是作者在蒐集關卡是否有更優解。每個關卡有作者設定認為的最短步數,如果你在一章節內全部做到,會彈出這章節的完美成就。但遊戲可能因為知道自己難度很高的原因,達成下一章的調節就相對寬鬆多了。首先關卡是一次性開放的,如果你卡關了可以去嘗試此章節其他關卡其次不需要全部解決就能看到下一章節。而且,這個最小步數其實也不是真正的"最小步數",只要你在某一關達成了比規定步數還要少你就會解鎖“打敗設計師”的成就。如果達成十關,會獲得“打敗教授”的成就。

《A=B》:用糟糕編程語言來編程的優秀編程遊戲-第10張

遊戲中一個小於目標的例子

關卡編輯器:輪到你了

遊戲在結束了漫長的EA階段後更新了一個新功能——自定義關卡。如同優秀的規則類遊戲和音樂遊戲一樣如《Baba is you》和《節奏醫生》,本作有著一個極為簡潔的關卡編輯器,在你通關了遊戲內容後,可以繼續折磨自己和其他人。

《A=B》:用糟糕編程語言來編程的優秀編程遊戲-第11張

遊戲的關卡編輯器


利用Steam的創意工坊功能,現在你可以看到其他人的關卡來下載下來自己玩了。

《A=B》:用糟糕編程語言來編程的優秀編程遊戲-第12張

現在的自定義關卡數量還不是很多


順便,遊戲在第五章還給出了一個語言的圖靈完備性證明。也就是說你完全可以拿這個語言去還原LeetCode上的各種問題,不過我太菜看不懂,就不在這裡獻醜了。而且我問過我在字節跳動做算法工程師的朋友,就如同遊戲裡的教授所說,這個語言核心字符串重寫確實不算一個新鮮東西,但像這樣以遊戲來一個機制一個機制引入和實踐,對我來說是相當有創意的。

《A=B》:用糟糕編程語言來編程的優秀編程遊戲-第13張

圖靈完備性證明

《A=B》:用糟糕編程語言來編程的優秀編程遊戲-第14張

教授:圖樣


結語:遊戲作為一種自帶學習技能功能的媒介

作為一個喜歡玩高難度遊戲(無論是平臺跳躍,解謎還是音樂遊戲)我十分能理解為什麼很多人不喜歡:難的卡關帶來的負面體驗是實打實的。因此,我的建議是實在卡了,還是“逃課”好了,畢竟現在大家都有現實中的事要做,真的在遊戲裡連卡數個小時很可能會影響到現實生活。

不過逃課也要有方法的逃,我們最好是要了解關卡的思路,而不只是單純知道結果。不然,我們就無法瞭解關卡的精妙,而我們通過“逃課”也能帶來“啊哈”的感覺。這裡推薦UP主SoMall-dumpling做的管卡解析視頻,除了給出結果,他也給出了分析過程和解題思路。

最後講一些題外話。我一直覺得作者Artless是國內設計能力頂尖的遊戲設計師,而且我十分喜歡他渾然天成的埋梗能力,如果哪天他不做解謎方向的遊戲了,我總覺得他去做一個幽默的RPG也會是一把好手。文章的最後推薦一下Artless自己關於解謎遊戲製作的演講視頻。


© 2022 3樓貓 下載APP 站點地圖 廣告合作:asmrly666@gmail.com