99国产精品欲av蜜臀,可以直接免费观看的AV网站,gogogo高清免费完整版,啊灬啊灬啊灬免费毛片

網易首頁 > 網易號 > 正文 申請入駐

二維碼也能跑游戲?開發者用3KB極限挑戰復刻DOOM,曾一度崩潰后...ChatGPT救了場

0
分享至


作者 | Kuber Mehta 編譯 | 蘇宓

出品 | CSDN(ID:CSDNnews)

自 1993 年問世以來,《DOOM》(毀滅戰士)早已超越了一款經典射擊游戲的范疇,而是成為“極限移植”的代名詞。從烤面包機、MacBook Touch Bar、智能冰箱,到我們此前報道過的 、,它幾乎無處不在——“It Runs Doom”(萬物皆可跑 DOOM)也因此成為一代程序員的狂歡梗。

最近,這一狂歡再度升級:一位開發者竟然將一款可玩的《DOOM》風格游戲完整封裝進一個二維碼中,掃碼即可在瀏覽器中直接啟動,無需下載,無需安裝。

整個開發僅耗時一周,旨在突破了二維碼在存儲和壓縮方面的極限,展示了將輕量級 Web 應用完全托管于二維碼內的全新可能。

而更令人驚訝的是——整個游戲大小還不到 3KB。

目前,此項目已在 GitHub 上開源:https://github.com/Kuberwastaken/backdooms。

值得注意的是,iPhone、Android 等智能手機無法直接掃描,其只適配于瀏覽器端,需要借助在線二維碼掃描器(https://scanqr.org/),掃描之后的游戲界面如下:


從荒誕構想到技術落地

這個項目由開發者 Kuber Mehta 發起,挑戰是在不超過 3KB 的數據限制下,盡可能還原《DOOM》的游戲體驗。

為什么是 3KB?

Kuber Mehta 解釋說,這是二維碼所能容納的最大文本或二進制數據量。為了對比,原版《DOOM》中“機槍”(chaingun)貼圖就需要約 1.2KB,而這次項目的總容量預算,僅為其兩倍多一點。時下,Kuber Mehta 要在這個限制內完成整款游戲的邏輯與視覺呈現,可謂是極限挑戰。

之所以會萌生這樣的想法,是由于幾年前Kuber Mehta 偶然刷到一位 YouTube 博主matttkc 發布的一條 YouTube 視頻,其曾提出一個瘋狂問題:“你能把一整個游戲塞進一個二維碼里嗎?”

這個設想從此深埋 Kuber Mehta 心底,但他一直沒付諸實踐——“因為我覺得自己可能不夠聰明。”Kuber Mehta 自嘲道。

直到不久前,這個想法再次浮現,他決定不再猶豫,動手一試。可真正開始后,他很快發現:網上幾乎找不到現成的 HTML 版本的 DOOM 實現可供復用。

資源有限的情況下,他退而求其次:“制作一個可玩的、受《Doom》啟發的游戲,其大小不超過三段純文本。”

正如他自己總結的:

“真的太難了,因為我的條件只有這些—— 沒有游戲引擎,只能寫原生 HTML/JS; 沒有素材資源,所有圖形都得代碼生成; 不能用任何庫,因為每個字節都彌足珍貴。 但也正因如此,我學到了太多。”

所以它其實并不是《Doom》本尊——但 Mehta 的游戲確實很有《Doom》的味道。除了從 1993 年原版射擊游戲中汲取靈感外,他還參考了迷因式的“迷離空間”恐怖故事 The Backrooms,于是他的項目被命名為“the backdooms”。

「這是不是一個愚蠢的決定?也許是。但結果酷不酷?毫無疑問——酷炸了!」,Kuber Mehta 說道。



極限代碼壓縮:每一個字節都算數

游戲是用 HTML 編寫的,Mehta 必須讓每個字符都物盡其用。

現實來看,要在二維碼的 2,953 字節容量(QR Code Version 40)內嵌入一款游戲,他需要用到所謂的“壓縮技術”,更準確說,是極限壓縮

Kuber Mehta 以一段游戲代碼代碼為例,展示了他具體的做法:

html>



如果你沒看到 ,你可能都不敢相信這居然是 HTML。

再看一個例子,原始代碼:

function drawWall(distance) {  
  const height = 240 / distance;  
  context.fillRect(x, 120 - height/2, 1, height);  
}

壓縮后:

h.fillRect(i,120-240/d/2,1,240/d)

其中變量名都被壓縮為單個字符,注釋也完全消失。“從最終的代碼看上去,有點像《Doom》里的惡魔挨了爆頭一樣令人震撼。”

地圖生成機制

在游戲設計方面,起初,Kuber Mehta 打算采用 16x16 或 8x8 的固定小地圖設計,這種尺寸在一個超小型游戲中本就算得上“合理”。但他并不滿足于此,更希望玩家能獲得“真正可玩”的體驗。

因此,他決定引入無限地圖生成,并輔以“種子(Seed)”機制。

這一做法與《Minecraft》中世界生成的思路類似:一個看似隨機的字符串,就能決定整個游戲世界的布局。


Kuber Mehta 利用了這一原理,讓玩家理論上可以通過特定種子值生成心儀的地圖,并在代碼中硬編碼,從而每次運行都得到一致的世界:

SEED = Math.random() * 100;

在圖形表現方面,Kuber Mehta 沒有采用 WebGL 或 Canvas 的高級圖形接口,而是回歸原點,用了《DOOM》早期版本(1992 年)使用的光線投射(Raycasting)技術。這種方法以極低的資源消耗,模擬出類似 3D 的視覺效果。

其實現方式是:對屏幕上每一列像素投出一條方向略有偏差的射線,并計算這條射線與墻體的交點距離。墻體越近,繪制的柱狀圖形就越高,最終呈現出縱深感。

簡版代碼如下:

for (let i = 0; i < 320; i++) {  
  const rayAngle = playerAngle + (i - 160) / 500;  
  let distance = 0;  
  while (!isWall(x + distance * cos(rayAngle), y + distance * sin(rayAngle))) {  
    distance += 0.1;  
  }  
  drawColumn(i, distance);  
}

雖然這一邏輯只涉及基礎的三角函數,但它在整個代碼體積中占據了相當大的比重。Kuber Mehta 坦言,如果不是為了動態生成地圖,他可能早就選擇直接將 HTML 頁面 Base64 編碼后塞進 URL。但現在看來,這份堅持是值得的。

敵人機制

相比圖形渲染,敵人系統的實現則更加艱難。項目早期版本中,敵人數量固定,分布于地圖初始區域。玩家一旦走遠,地圖就變得空空如也——這在小地圖中還能接受,但在無限生成的大地圖中,問題立刻凸顯。

Kuber Mehta 回憶,這部分開發過程“非常頭痛”。在體積受限的前提下,想做出像樣的射擊反饋與敵人 AI,幾乎是不可能完成的任務。他也坦言自己并不是游戲開發出身:“我……確實不太會做游戲。”

起初,敵人是完全靜止的。后來,他陸續加入了簡單的追蹤機制,并最終實現了一個核心改進:玩家在移動時,系統會在其附近隨機生成敵人,從而讓整個地圖始終保持緊張感和挑戰性。

if ((k.ArrowUp || k.w || k.ArrowDown || k.s || k.ArrowLeft || k.ArrowRight) && e.length < 10 && Math.random() < .01) {
    t = Math.random() * 6.283;
    Rdist = 1 + Math.random();
    X = x + M(t) * Rdist;
    Y = y + N(t) * Rdist;
    f(~~X, ~~Y) == "0" && e.push({ x: X, y: Y, h: 100 });
}

完成以上版塊之后,Kuber Mehta表示,“制作游戲只是挑戰的一半,因為真正的挑戰是將其放入二維碼中。”


概念與可行性

標準最大的二維碼(Version 40)最多只能容納 2,953 字節,也就是大約2.9KB。這個容量有多小?做個對比:

  • 一個僅 1/15 秒的 Windows 音效文件,就已經11KB

  • 一張傳統軟盤(1.44MB)理論上可以存下將近 500 個這樣的二維碼

面對如此限制,Kuber Mehta 的首個版本大小達到了3.4KB,超標嚴重。他的第一反應是:“完蛋了。”

為了解決這個問題,他連續四天進行瘋狂壓縮與優化,最終將游戲壓縮至2.4KB,雖然過程中做出了一些艱難但必要的取舍。

殊不知,一段折騰之后,更難的還在后面。

要知道二維碼只能存儲文本或二進制數據,而 HTML 并不屬于這兩種類型。直接嵌入 HTML 代碼并不可行。

對此,不少開發者建議采用 Base64 編碼,但這帶來了33% 的體積開銷,幾乎會吃掉本就所剩無幾的存儲空間,意味著實際可用空間不到 1.9KB。

在反復嘗試后,Kuber Mehta 一度陷入絕望,甚至想要放棄。

后來,他連續兩天輪番咨詢 ChatGPT、DeepSeek 和 Claude 等 AI 模型,嘗試上百種提示詞,幾乎每次都得到建議:“干脆托管在網站上會更容易。”直到某次,ChatGPT隨口提到了一句DecompressionStream

這成了轉折點。

DecompressionStream 是一個現代瀏覽器支持的 Web API,能夠解壓 gzip 格式的數據流,簡而言之,相當于瀏覽器內置了“WinRAR”。

Kuber Mehta 形容自己當時“仿佛被雷劈中”,豁然開朗。他確信:在嘗試了幾乎所有極限游戲優化技巧后,這是當前環境下唯一可行的解決方案

整個游戲壓縮嵌入流程如下:

  1. 輸入 HTML 內容

  2. 進行 Gzip 壓縮(最大壓縮等級)

  3. 將壓縮數據進行 Base64 編碼

  4. 嵌入一個自解壓的 HTML 包裝器

  5. 轉為 data:URI

  6. 嘗試生成二維碼(使用最高版本)

  7. 如果仍超出體積限制

    → 回頭繼續壓縮優化

  8. 成功生成二維碼!

Kuber Mehta 為此還編寫了一個 Python 腳本自動化完成上述流程,期間測試了34 個不同版本,不斷調試壓縮策略,最終,二維碼成功誕生。

未來的可能性

受以上種種限制影響,the backdooms 的畫面非常有限,你只會在灰色墻壁之間躲避紅眼矩形,但它傳達的“感覺”是到位的。

在 Kuber Mehta 看來,這不僅是一個小游戲的誕生,更是一個技術可能性的證明。他將這個項目(現已開源在 GitHub,https://github.com/Kuberwastaken/backdooms)視為一種宣言:

只要壓縮得當,再加上 AI 助力,即便是在二維碼這種極限載體上,也能運行真正的交互式游戲。

盡管不適合開發復雜項目,但這個方向打開了許多令人興奮的應用場景。Kuber Mehta 表示,這種想法也可以在未來應用在更多場景中,如:

  • 離線游戲傳播:可通過海報、傳單分享

  • 極限編程展示(Demoscene):作為編程創意作品展示平臺

  • 低帶寬環境下的教育小游戲:無需聯網即可運行,具備實用性與趣味性

https://github.com/Kuberwastaken/backdooms?tab=readme-ov-file

https://kuber.studio/blog/Projects/How-I-Managed-To-Get-Doom-In-A-QR-Code

https://www.pcgamer.com/hardware/behold-a-single-qr-code-containing-a-miniaturized-take-on-doom-literally-the-entire-game/

https://news.ycombinator.com/item?id=43729683

CSDN創始人蔣濤「對談」 浙大求是特聘教授方興東。作為中國互聯網30年的見證者,從鴻蒙操作系統的艱辛破曉之路,聊聊中國高科技的崛起大時代。華為數百人深度分享的技術傳奇《鴻蒙開物》來了!直播間抽福袋,領「限定簽章版」。

特別聲明:以上內容(如有圖片或視頻亦包括在內)為自媒體平臺“網易號”用戶上傳并發布,本平臺僅提供信息存儲服務。

Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.

相關推薦
熱點推薦
賣了!馬威再次上貨架,交易重啟,5隊哄搶,湖人還有機會嗎?

賣了!馬威再次上貨架,交易重啟,5隊哄搶,湖人還有機會嗎?

球童無忌
2025-06-01 23:59:27
比亞迪公關部總經理李云飛回應“汽車圈恒大”:總負債5800多億很危險!那豐田2.7萬億、大眾3.4萬億、上汽6104億,他們危險嗎

比亞迪公關部總經理李云飛回應“汽車圈恒大”:總負債5800多億很危險!那豐田2.7萬億、大眾3.4萬億、上汽6104億,他們危險嗎

和訊網
2025-05-30 15:35:33
思想疫苗:禁止宗教干涉世俗,這些名稱全都得改

思想疫苗:禁止宗教干涉世俗,這些名稱全都得改

疫苗與科學
2025-05-31 07:12:23
蘇超最新積分榜!南通第一,第四輪預告:無錫常州榜尾大戰

蘇超最新積分榜!南通第一,第四輪預告:無錫常州榜尾大戰

天涯淪落人
2025-06-02 12:13:37
賴清德暗示接受兩岸統一,要求北京調整對臺政策,國臺辦直接挑明

賴清德暗示接受兩岸統一,要求北京調整對臺政策,國臺辦直接挑明

小鬼頭體育
2025-05-21 04:35:43
在哈佛演講的中國女孩,現在剛尷尬了!

在哈佛演講的中國女孩,現在剛尷尬了!

特特農村生活
2025-06-02 10:14:36
曝B費已同意加盟利雅得新月+即將達成協議 曼聯:他若要走就放行

曝B費已同意加盟利雅得新月+即將達成協議 曼聯:他若要走就放行

風過鄉
2025-06-02 06:56:52
菲律賓真把自己當盤菜了?菲防長香會開條件,中方當場拍桌回懟

菲律賓真把自己當盤菜了?菲防長香會開條件,中方當場拍桌回懟

大國觀察眼
2025-06-02 06:30:08
外媒揭秘鄭欽文:常年居住安道爾,年收入高達2.2億,是國際團寵

外媒揭秘鄭欽文:常年居住安道爾,年收入高達2.2億,是國際團寵

聚合大娛
2025-02-25 11:56:48
湖北最新人事任免

湖北最新人事任免

極目新聞
2025-06-01 14:49:50
他是“紅衛兵頭目”之一,20歲被毛主席稱贊必成大器,結局如何?

他是“紅衛兵頭目”之一,20歲被毛主席稱贊必成大器,結局如何?

文史達觀
2025-06-02 06:45:06
烏克蘭最大膽無人機攻擊,預示著人類一個可怕的未來!

烏克蘭最大膽無人機攻擊,預示著人類一個可怕的未來!

牛彈琴
2025-06-02 08:11:32
47歲劉濤素顏被路人偶遇,真實狀態曝光,扯下娛樂圈凍齡遮羞布

47歲劉濤素顏被路人偶遇,真實狀態曝光,扯下娛樂圈凍齡遮羞布

一盅情懷
2025-05-30 16:43:42
歐冠決賽遭遇創紀錄5球慘敗,小因扎吉收到特大號金貘獎

歐冠決賽遭遇創紀錄5球慘敗,小因扎吉收到特大號金貘獎

懂球帝
2025-06-02 04:36:21
女生的梨形身材有多爽??

女生的梨形身材有多爽??

健身S叔
2025-05-30 16:20:36
大暴雨,10級以上雷暴大風,要來了!

大暴雨,10級以上雷暴大風,要來了!

上海消防
2025-06-02 11:39:47
突然爆雷,總部被封!有人全家被套超1200萬元

突然爆雷,總部被封!有人全家被套超1200萬元

最江陰
2025-06-01 11:44:30
33歲TVB港姐小花兒童節宣布懷二胎,‘視帝’老公興奮留言:我會努力的

33歲TVB港姐小花兒童節宣布懷二胎,‘視帝’老公興奮留言:我會努力的

TVB劇評社
2025-06-01 23:06:39
這才是真正的八路軍女兵,沒有漂亮的小手槍,沒有精致的小皮鞋

這才是真正的八路軍女兵,沒有漂亮的小手槍,沒有精致的小皮鞋

云端小院
2025-05-25 06:33:45
中國博主偶遇波多爾斯基,自稱合影時遭后者種族歧視

中國博主偶遇波多爾斯基,自稱合影時遭后者種族歧視

懂球帝
2025-06-01 17:28:27
2025-06-02 14:28:49
CSDN incentive-icons
CSDN
成就一億技術人
25596文章數 242067關注度
往期回顧 全部

游戲要聞

非酋的逆襲!在《踏風行》里我靠撥云吃上了“暴擊粽”

頭條要聞

女子花460萬買大平層 買第二套時發現土地使用權剩47年

頭條要聞

女子花460萬買大平層 買第二套時發現土地使用權剩47年

體育要聞

傲了一輩子的恩里克,心中永遠住著一個小天使

娛樂要聞

章子怡深夜曬娃,兒女正面照曝光

財經要聞

美稱中方違反經貿會談共識 商務部駁斥

科技要聞

新造車5月再洗牌:問界回前三,小米守第五

汽車要聞

吉利汽車5月銷量23.52萬輛 同比增長46%

態度原創

健康
數碼
游戲
旅游
時尚

唇皰疹和口腔潰瘍是"同伙"嗎?

數碼要聞

機械革命筆記本新模具曝光,提供藍白撞色設計

又一人間胸器!《劍星》Shift Up公布新作主視覺圖

旅游要聞

熱聞|清明假期將至,熱門目的地有哪些?

今年最流行的10條裙子,誰穿誰美!

無障礙瀏覽 進入關懷版 主站蜘蛛池模板: 乃东县| 滁州市| 德格县| 冕宁县| 夹江县| 枣强县| 闻喜县| 嘉黎县| 万宁市| 孟州市| 常熟市| 昌都县| 遂昌县| 寻甸| 红安县| 米泉市| 建德市| 巧家县| 武义县| 马关县| 宽甸| 松江区| 兴业县| 商南县| 普兰店市| 仪征市| 陕西省| 南开区| 开鲁县| 江华| 建水县| 清镇市| 益阳市| 肃北| 柞水县| 南宁市| 旬阳县| 永春县| 雷山县| 大厂| 福州市|