首页 › games › 《pong-wars》他写了一场打不完的仗

凌晨两点,你在时间线上刷到一段十几秒的视频:一块画布,左边白的,右边黑的,两颗小球在各自半场里弹来弹去。看着看着你发现不对劲——白球飞进黑区,脚下的黑色格子就一块块翻成白色;黑球突进白区,又把领地一寸寸啃回来。屏幕角落两个百分比数字在悄悄地此消彼长,像两条股票分时线绞在一起。你本来只想看十秒,结果盯了十五分钟,最后默默点了个收藏。这不是什么3A大作,它叫 Pong Wars,一个荷兰开发者 Koen van Gilst 在2024年1月一个周末捣鼓出来的网页小游戏,仓库 vnglst/pong-wars,全部代码就是一个 index.html。到今天它拿了1697颗星、215次fork,README里挂着四十多个社区移植版——从Atari 2600到SwiftUI,从Godot到M5Stack硬件,全世界的开发者用各自顺手的平台把这场“打不完的仗”重写了一遍。更值得玩味的是作者自己的坦白:这个点子不是他原创的,他是在别处看到类似的东西,觉得“这好像是个很老的想法”,然后自己动手写了一版。一个二手点子,一个单文件实现,一夜传遍开发者社区——这对所有想搞副业的个人开发者来说,本身就是一篇教材。

仓库档案

个人账号、单人主笔、几百行代码、MIT白送——完全符合“周末项目”的全部特征,但它取得的传播效果超过绝大多数团队精雕细琢的作品。

这游戏是什么

一句话:半屏白半屏黑的网格画布上,两颗球各守一方,球飞过敌方领地就把脚下的格子染成自己的颜色——一场没有终局、谁也无法彻底取胜的乒乓拉锯战。

规则拆开看只有三条:

  1. 画布被切成几十乘几十的小方格,初始对半分:一边浅色(日),一边深色(夜)。
  2. 每边各有一颗球,从己方半场出发。球撞到同色格子会被弹开,撞到异色格子则把格子翻转成己方颜色,然后继续反弹。
  3. 没有比分判定,没有游戏结束。屏幕角落两个百分比默默记录双方领地占比,唯一的事是——战争永远打下去。

注意这游戏的玩家是谁:没有人。两颗球各自为战,你只能看。它是康威生命游戏的近亲,一个标准的“零玩家游戏”(zero-player game)——但作者做了一件关键的事:给细胞自动机套上了“对抗”的皮。Pong 的球拍弹球是电子游戏最古老的公共记忆,把它和生命游戏式的领地翻转嫁接在一起,一个抽象系统立刻就有了故事感:这是白天与黑夜、好与坏的永恒之战——仓库描述里作者就是这么写的。

它的核心循环长这样:

flowchart LR
    A[两颗球各守半场] --> B[球在网格上飞行<br>同色格弹开 异色格占领]
    B --> C[格子翻转成己方颜色<br>领地此消彼长]
    C --> D[领地形状变了<br>两球下一条弹道也变了]
    D --> B
    C --> E[百分比来回拉锯<br>眼看一方要赢 又被翻回来]
    E --> F[没有终局 没有失败<br>随时停下 随时回来看]
    F --> B

为什么上头

一个没人操作的页面能让开发者社群集体驻足,靠的不是运气,是几条非常扎实的心理机制,而且每一条都能抄到你自己下次的作品里。

第一,对抗叙事给了围观者立场。 生命游戏很美但它是冥想——没有立场,看十分钟就腻了。Pong Wars 一开场就划分了阵营:亮色与暗色。哪怕游戏本身不需要你操作,你的眼睛会自动站队:“白色这波推得很凶”“黑色在下方偷了一大片”。有了立场,每一次格子翻转都是一次战报。这是把“模拟器”包装成“比赛”的经典手法,直播平台上那些蚂蚁窝模拟、部落战争模拟视频能火,同理。

第二,即时反馈密度极高。 每秒钟几十次格子翻转、十几次弹墙反弹,每一帧画面都在变化,视觉系统永远有新东西可吃。对比一下传统放置游戏点一下等一分钟的节奏,Pong Wars 是把反馈密度拉满、把操作密度降为零——观感上的“热闹”和认知上的“省力”同时满足,这正是解压类内容的配方。配色还专门选了 Alex Cristache 的 Mindful Palette(作者在README里专门致谢),低饱和的蓝白对撞,看久了不刺眼,这是它适合“挂着”的关键。

第三,永远差一口气的拉锯。 这是设计上最妙的一笔。因为球撞到异色格子才翻转、翻转又改变弹道,系统天然趋向动态平衡:一方眼看推到七成,领地形状让自己的弹道越来越“顺墙走”,渗透效率下降,另一方在自己半场攒出的复杂地形反而成了反攻的跳板。百分比数字常年在一半附近晃,偶尔冲到六几比三几,又慢慢荡回来。心理学上这叫“未完成感”——蔡格尼克效应对未完成事件的记忆远强于已完成事件。一个永不完成的过程,就是一个可以反复回来的页面。

第四,没有失败,所以没有退出的心理成本。 传统游戏输赢是双刃剑:赢了爽,输了挫败,挫败攒多了人就走了。Pong Wars 干脆砍掉胜负——你没有“这局打完了”的时刻,也就没有“打完了该走了”的理由。离线变体里甚至有人专门做了个"Gold Wars",README里特意标注“这个版本有终局!”——反过来说明大家默认原版就是无终局的,而且这个特征值得被变体当卖点讨论。

第五,每局面目全不同。 弹道对领地形状极端敏感,开局几秒后两颗球就进入混沌轨道,你永远看不到两次相同的攻防路线。随机奖励的变体是“确定性系统的不可预测性”——不靠骰子,靠混沌,这让围观者能编出自己的叙事:“白球这招斜线渗透太秀了”,其实什么都没发生,只是物理。

技术拆解

这个仓库在工程上值得看的不是炫技,恰恰是克制。

架构就是最小的那一档:一个 index.html,HTML 负责骨架,CSS 负责配色和布局,原生 JavaScript 负责全部逻辑。没有 Canvas 库、没有游戏引擎、没有打包器,浏览器直接打开就能跑。作者在仓库描述里明确写了这是"one index.html"。对个人开发者这是个重要信号:传播最狠的形态是摩擦最小的形态。没有安装、没有注册、没有加载页,链接点开即战——Mastodon 上传播的就是一个动图加一个裸链接。

核心数据结构是网格状态数组:画布按方块划分,每个格子存一个“属于哪方”的状态,渲染时按状态填色。球的每次移动检查落点格子颜色:同色弹开,异色则翻转归属再反弹。整个“战争系统”就是一个被弹球不断写入的二维数组。

碰撞检测是刻意做糙的。作者在README的PR守则里写得很直白:欢迎改进碰撞检测或者加随机性的PR,但“我想保持简单、代码最少化”(keep this simple and the code minimal);想扩展玩法请 fork 出去做你自己的版本。这是一个非常成熟的开源小作品维护观——核心仓库守住最小可读,膨胀需求全部外溢到生态。事实上那四十多个移植版就是这么长出来的:有人做了带球拍对打的版本,有人做了带道具和AI的"Reloaded"多人版,有人做成所有观众共享同一局状态的 Svelte 版,还有人搬上了 Framework 16 的 LED 矩阵屏和 M5Stack 小硬件。核心逻辑足够小,一个下午就能搬进任何新平台——这正是“小而美”的工程价值:它是一个可以被整个社区当作乐高积木的骨架。

可直接复用的三件套:网格领地状态机(任何领土争夺类玩法的地基)、球体-网格反弹逻辑(弹球、打砖块、breakout 类通吃)、按状态批量重绘的渲染循环。MIT 协议加作者“随便拿去改”的明示,商用门槛为零。

变现观察

先说仓库本身:没有任何变现痕迹。在线页面没有广告位,没有内购,没有赞助链接,页脚只有一行“made by Koen van Gilst”。Koen 的收益是间接的——这个项目成了他个人品牌的高光展品,一个1697星的传播级作品对独立开发者接活、涨粉、推自己其他产品的价值,远超直接挂广告。

但这类玩法变现的路是清晰的,而且都被验证过:

给我的灵感

点子一:给战争装上终局和天梯——做成小程序对峙游戏。 原版最反直觉的设计是没有终局,你反着做:限定时长或先占领60%判胜,加连胜、段位、好友排行榜。改动量很小——网格状态机和渲染循环直接用 MIT 代码,你写的是计分、结算和社交层。MVP 一到两周。适合微信/抖音小游戏,广告位插在局与局之间的结算页,这类“看戏型”玩法用户看完一局还想看下一局,广告展示频次天然高。

点子二:换皮成题材化领地战——做解压挂机站。 格子还是那些格子,把“日与夜”换成雪线与沙漠、森林与城市、红蚁与黑蚁,配上白噪音和翻转音效,就是一个ASMR向解压页面。原版连配色都是现成调色板拿来的,说明美术成本可以压到多低。MVP几天到一周。挂自有域名跑 AdSense,页脚放爱发电/Patreon 打赏码;这种页面一旦被“解压网站合集”类账号收录,长尾流量能挂很多年。

点子三:异步接力战——一局球,接力传下去。 社区已经替你验证了方向:有人做了全员共享一个战场的 Svelte 版,有人做了带AI对手的多人版。你做更轻的——异步接力:我玩五分钟,系统冻结当前局面生成一个链接发给你,你在我的领地基础上接着打,最后比对两人各自任期内扩张了多少格子。像 Wordle 的分享链接一样,每局自带传播出口。MVP两到四周(要加存档序列化和分享页)。适合买断制App或内购皮肤(格子翻转特效、弹球拖尾都是天然的内购位)。

三个点子共用同一个判断:这个仓库最值钱的不是代码,是它证明了一个极简对抗系统自带围观价值——你只需要给它找一个“必须分出胜负”的理由,围观的人就会变成玩的人。

上手

[!tip] 51学通信知识星球 星主:爱卫生(微信:gprshome201101)——公众号「51学通信」创办者,19 年通信行业运维与讲师经验,著有《GPRS网络信令实例详解》《EPC原理与实践》《5G核心网原理与实践》三本纸质书(各大电商平台有售)。 星球定位:深耕 5G 核心网、IMS、NFV/AI、云原生等 ICT 领域,主打运维岗位与信令分析。 当前规模:5200 篇主题 / 990 个回答,198 元/年。 加入福利:加入星球后请加爱卫生微信,拉您进知识星球年度陪伴与答疑群——不限量回复您的各种问题,另有群内分享。 AI 加持:51学通信知识星球已作为 skill 接入 WorkBuddy,使用 deepseek-4-flash 在海量星球帖子中精准找贴、找视频、找 FAQ 和案例,做总结、找文档和 PPT 等场景全覆盖。

51学通信知识星球海报-扫码加入