跳转至内容
  • 版块
  • 最新
  • 标签
  • 热门
  • 用户
  • 群组
皮肤
  • 浅色
  • Brite
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • 深色
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • 默认(LCZ-Blue)
  • 不使用皮肤
  • LCZ-Green
  • LCZ-Blue
  • LCZ-Black
折叠
品牌标识

抡锤者

首页 版块 标签
硬件
装备秀
AI 广场 App
  1. 主页
  2. 版块
  3. AI Agent
  4. 80后老借助 Codex + Claude 搓了个复古游戏联机模拟器:投币就能乱入

80后老借助 Codex + Claude 搓了个复古游戏联机模拟器:投币就能乱入

已定时 已固定 已锁定 已移动 优秀 AI Agent
codexclaude编程
16 帖子 6 发布者 520 浏览
  • 从旧到新
  • 从新到旧
  • 最多赞同
回复
  • 在新帖中回复
登录后回复
此主题已被删除。只有拥有主题管理权限的用户可以查看。
  • YUN WANGY
    YUN WANGY
    YUN WANG
    体面乡绅
    编写于 最后由 YUN WANG 编辑
    #1

    00-封面.jpg

    作为一个 80 后老登,外加 AI 爱好者,赶上 AI 这么热闹的年代,不亲手用 AI 捣鼓点小软件,总觉得有点不好意思。

    所以不才,借助 AI(Codex + Claude)和开源项目 EmulatorJS,做了一款能联机的复古游戏模拟器。

    为什么不用市面上现成的?因为试了一圈发现,现有的复古游戏模拟器在联机这件事上都差点意思:要么得折腾端口、核心版本、ROM 版本,叫朋友一起玩,光教他装好就劝退了一半。

    所以这个项目就是冲着联机去的。我想要的感觉很简单:就像当年在街机厅,走到机台前投个币就能加入;又像小时候去玩伴家里,拿起第二个手柄就能一起玩。

    服务器也可以自己部署,一条命令装好,让更多朋友一起回到 80、90 后独有的童年回忆里。

    我本身不是程序员,代码基本是 AI 写的,我负责提需求、测试、挑毛病、做决定。现在做到了 1.3.0 版,发出来给大家看看,欢迎拍砖。

    一句话介绍: 基于开源的 EmulatorJS,下载、双击就能玩 20 多个平台的老游戏,同一个 Wi-Fi 或者隔着互联网都能和朋友联机(最多 4 人,可以语音、观战、中途乱入)。Windows、Mac、安卓(手机、电视、Quest 3)都有。

    • 下载(GitHub):https://github.com/supwang/emulatorjs-releases/releases/latest
    • 国内下载(百度网盘,含Rom包):https://pan.baidu.com/s/13atBCqmTib1rGp_30279mQ?pwd=6akk 提取码 6akk
    • 服务器地址: https://couchvs.site:8765;房间密码: iw4iwq5p (注册后即可广域网联机,不注册可以局域网联机)
      注意:如果开着 VPN(Clash 等),请把联机服务器的域名和 IP 都加到直连(绕过代理)的规则里,只加一个可能会出现「能看到房间,但乱入后连不上 / 很卡」。开了 TUN(虚拟网卡)模式的,最好让 UDP 走直连,或者联机时先关掉 VPN。

    以 Clash / Mihomo 为例(规则要放在靠前的位置):

    - DOMAIN-SUFFIX,服务器域名,DIRECT
    - IP-CIDR,服务器IP/32,DIRECT,no-resolve
    
    • 完全免费,GPL-3.0 开源,源码就在上面的仓库里。不带任何游戏 ROM 和 BIOS,请用自己的备份。

    一、长什么样

    封面墙: 指定 ROM 文件夹(或者直接用 RetroArch 的文件夹),自动按平台分类。封面、标题画面、截图可以从 libretro 的封面库自动下载,鼠标停在封面上会轮播。
    01-封面墙-街机.jpg

    大屏模式(1.2.0 新增): 给电视和 Quest 准备的。手柄或遥控器左右选游戏,LB / RB 换机种,背景是选中游戏的模糊画面,下面显示 Logo、中文名、几人游戏、有没有人在玩。灵感来自卡普空的《清版动作合集》的选游戏界面。
    02-大屏模式-超任.jpg
    03-大屏模式-街机.jpg
    04-大屏模式-打开菜单.jpg

    自动边框(1.2.0 新增): 竖版街机游戏或者 4:3 的游戏在宽屏上,两边不再是黑边。左边放封面,右边放 Logo 和标题画面。也支持 The Bezel Project 那种中间透明的边框图,程序会自己找出透明区域,对准游戏画面。
    05-竖版游戏自动边框.jpg

    二、联机:这是我最想要的部分

    目标很简单:像在游戏厅一样,走过去投个币就加入。

    • 大厅里能看到谁在玩什么,点「乱入」直接成为 2P / 3P / 4P,开局的人不用停、不用发邀请。街机游戏可以中途投币按开始。
    • 同一个 Wi-Fi 下自动发现,什么都不用设置。
    • 隔着互联网:通过一个联机服务器。服务器没有中心化的,谁都可以自己搭一个,一条命令装好,只有知道房间密码的人才能看到和加入。
    • 语音聊天、观战、每个人的延迟显示、踢人、只允许注册玩家、锁房间不让人进。
    • 可选账号系统:好友、战绩、排行榜,还有一个「擂台」模式,把你这局顶到大厅最前面,欢迎所有人来挑战。

    继续上次的游戏(1.3.0 新增): 退出游戏时自动存一份进度(带一张画面截图),下次再点这个游戏,可以选「继续」或「新游戏」。

    多人游戏的继续是我觉得最有意思的部分。即时存档里存的是整台游戏机的状态,2P 的角色也在里面,但没人操作它就只会站着不动。所以这里的做法是让上次一起玩的人能回来接手:

    • 选「等朋友一起继续」:游戏停在存档那一帧,大厅里显示「在等谁回来」,朋友打开程序会收到邀请,点「乱入」就回到他原来的 1P / 2P,人齐了自动开始
    • 也可以「一个人继续」:别人的角色先站着,之后谁乱入谁接手,原来的人优先回到自己的位置
    • 联机时每台设备都各存一份,下次谁来开局都行
      15-继续还是新游戏.jpg
      16-等朋友回来.jpg
      17-朋友收到邀请.jpg

    换位置(1.3.0 新增): FC、超任很多游戏只有 1P 能暂停、进菜单,2P 一个人继续时就卡住了。所以加了一个「🎮 我是 P2 ⇄」,可以换成控制别的空位置;原来的 1P 回来时,自动换回去,不会两个人角色对调。
    18-换位置.jpg
    06-两人联机.jpg
    07-大厅.jpg
    08-房间和延迟.jpg

    三、手机、电视、Quest

    虚拟手柄: 每个机种做了自己的手柄造型,FC、超任、MD、PS1、N64、GBA、GB、街机摇杆台都有,按键颜色对应原机。竖屏时画面在上、手柄在下;横屏时手柄分到画面两边,不挡画面,大小还能按机种调。按下有动画,安卓上会轻微震动。接上实体手柄(Xbox 等)虚拟手柄自动隐藏。
    09-虚拟手柄-竖屏.jpg
    10-虚拟手柄-横屏.jpg

    手机给电视传游戏(1.2.0 新增): 电视上不好拷文件,所以程序启动后会显示一个内网地址和 4 位密码,用同一网络的手机或电脑浏览器打开,选文件就能把 ROM 和 BIOS 传进去,扩展名能认出来的自动放进对应机种的文件夹,传完列表自动刷新。思路学的是 RetroArch 的网页上传。
    11-手机上传游戏.jpg

    Quest 3: 装安卓 APK 就能跑,配个 Xbox 手柄,就能在巨幕上打街机。


    四、技术上是怎么搭起来的(给感兴趣的朋友)

    作为外行,我对技术细节的理解有限,以下是在和 AI 一起做的过程中弄明白的大致结构:

    模拟核心: 用的是 EmulatorJS,它把 RetroArch 的 libretro 核心(FBNeo、FCEUmm、Snes9x、Genesis Plus GX、mGBA、PCSX ReARMed、Mupen64Plus 等)编译成 WebAssembly,在浏览器里跑。所以整个前端就是一个网页,各个平台共用同一套页面。

    各平台的壳:

    • Windows / Mac:Electron,自带一个本地小服务器读 ROM 文件夹
    • 安卓:系统 WebView 显示页面,再用 nodejs-mobile 在手机里跑同一个 Node 服务器,电视读 U 盘也走这里
    • 文件夹版:一个 Python 小服务器,双击 .bat / .command 启动,用浏览器玩

    联机:

    • 走 WebRTC。主要用「按键同步」(lockstep):每台设备都跑同一个游戏,网上只传每一帧按了哪些键。主机当裁判,收齐所有人第 N 帧的按键再一起往下跑;每个人的按键延后几帧生效,给网络留时间。
    • 每两秒左右核对一次游戏状态,万一对不上,主机把即时存档发过去重新对齐。
    • 格斗游戏还有一个实验性的「回滚」模式,更跟手。
    • 慢的设备(比如老手机)跟不上帧同步,可以切成「看画面玩」:不自己跑游戏,看主机串流过来的视频,只回传按键。手机开局、电脑乱入的时候,还能把游戏交给电脑跑,手机改成看画面。
    • 继续多人游戏:退出时存一个即时存档,同时记下谁是几 P。等人回来时,主机先停在读档的那一帧,有人乱入照样把状态同步给他,大家停在同一帧,人齐了再一起往下跑;回来的人按账号、设备编号或名字认出来,分回原来的玩家号。
    • 外网服务器是一个安装脚本:Python 写的大厅服务,加 coturn 做中继(严格 NAT 的家庭网络打不通时走中继),HTTPS 证书自动申请和续期。

    发布: GitHub Actions 自动编译 Windows、Mac、安卓三个平台,安卓版会先在模拟器里跑一遍检查再发布。Windows 安装版支持自动更新。界面做了 10 种语言。


    五、几点真实感受

    1. AI 写代码确实很强,但「测」和「判断」还得靠人。 很多问题只有真机才能发现:手机横屏时手柄挡画面、安卓系统手势条误触、遥控器在文件夹选择框里进不去子文件夹……都是我在设备上试出来,截图告诉 AI 去改。
    2. 需求要说具体,最好配图。 我做虚拟手柄时,是先拿截图圈出来哪里不对、要像哪种包边,AI 才能改到位。做大屏模式时,直接发了几张卡普空合集的截图当参考。
    3. 有些坑 AI 也只能告诉你「这条路走不通」。 比如我家的小米电视 6,系统 WebView 还是 2018 年的 66 版,而模拟核心需要 80 以上;这个 WebView 是小米系统签名的,不 root 没法升级。最后的结论是这台电视只能放弃,换别的盒子或者用 Quest。
    4. 有些问题要自己想到。 做「继续」功能时,AI 先做出来的是能存能读,测下来一切正常。是我想到:FC、超任很多游戏只有 1P 能进菜单,2P 一个人继续就卡住了。提出来以后,AI 才补了「换位置」。用的人是谁、怎么玩,这些得自己操心。
    5. 版权要注意。 程序不带任何 ROM 和 BIOS;虚拟手柄的图是原创的,没用任何游戏公司的美术素材;自动边框用的是 libretro 封面库里游戏本身的封面和标题画面。

    六、怎么用(简版)

    1. 下载对应版本:Windows 推荐 EmulatorJS-Setup-1.2.0.exe(能自动更新);Mac 分 Apple 芯片和 Intel 两个 dmg;安卓装 …-android.apk
    2. 软件没买数字签名,第一次打开系统会拦:Windows 点「更多信息 → 仍要运行」,Mac 去「系统设置 → 隐私与安全性」点「仍要打开」
    3. 游戏放进「文档/EmulatorJS/roms」里,最好按平台分子文件夹(nes、snes、gba、md、psx、fbneo 等);街机 zip 不要解压、不要改名
    4. 需要 BIOS 的(PS1、Neo Geo、世嘉 CD)放进 system 文件夹
    5. 点「↻ 重新读取」,左边选平台,点封面开玩
      14-快捷键.png

    外网联机:在「⚙ 文件夹设置」里填联机服务器地址和房间密码。可以自己搭(租一台最便宜的 Ubuntu 云服务器,上传 ejs-cloud-setup.sh,运行 sudo bash ejs-cloud-setup.sh,装完会显示地址和密码),填给一起玩的朋友就行。
    13-填写联机服务器.png

    另外还有 7 套配色主题,可以给每个机种换自己的背景图:
    12-配色和背景.jpg


    七、已知的限制

    • N64、PSP、土星对设备性能要求比较高,老手机和电视盒子可能带不动
    • 按键同步联机要求大家用同一个游戏文件
    • 安卓电视的系统 WebView 要 80 版以上,太老的电视跑不了(程序会提示)
    • 没有 iOS 版

    欢迎大家试用、提意见:不同地区、不同网络下联机的延迟怎么样,手机上虚拟手柄的手感如何。有问题回帖或者到 GitHub 提 Issue 都可以。

    在开发的闲暇之余,来上几把。

    xiongjie gaoX alan.lgv60A 2 条回复 最后回复
    7
    • YUN WANGY YUN WANG

      00-封面.jpg

      作为一个 80 后老登,外加 AI 爱好者,赶上 AI 这么热闹的年代,不亲手用 AI 捣鼓点小软件,总觉得有点不好意思。

      所以不才,借助 AI(Codex + Claude)和开源项目 EmulatorJS,做了一款能联机的复古游戏模拟器。

      为什么不用市面上现成的?因为试了一圈发现,现有的复古游戏模拟器在联机这件事上都差点意思:要么得折腾端口、核心版本、ROM 版本,叫朋友一起玩,光教他装好就劝退了一半。

      所以这个项目就是冲着联机去的。我想要的感觉很简单:就像当年在街机厅,走到机台前投个币就能加入;又像小时候去玩伴家里,拿起第二个手柄就能一起玩。

      服务器也可以自己部署,一条命令装好,让更多朋友一起回到 80、90 后独有的童年回忆里。

      我本身不是程序员,代码基本是 AI 写的,我负责提需求、测试、挑毛病、做决定。现在做到了 1.3.0 版,发出来给大家看看,欢迎拍砖。

      一句话介绍: 基于开源的 EmulatorJS,下载、双击就能玩 20 多个平台的老游戏,同一个 Wi-Fi 或者隔着互联网都能和朋友联机(最多 4 人,可以语音、观战、中途乱入)。Windows、Mac、安卓(手机、电视、Quest 3)都有。

      • 下载(GitHub):https://github.com/supwang/emulatorjs-releases/releases/latest
      • 国内下载(百度网盘,含Rom包):https://pan.baidu.com/s/13atBCqmTib1rGp_30279mQ?pwd=6akk 提取码 6akk
      • 服务器地址: https://couchvs.site:8765;房间密码: iw4iwq5p (注册后即可广域网联机,不注册可以局域网联机)
        注意:如果开着 VPN(Clash 等),请把联机服务器的域名和 IP 都加到直连(绕过代理)的规则里,只加一个可能会出现「能看到房间,但乱入后连不上 / 很卡」。开了 TUN(虚拟网卡)模式的,最好让 UDP 走直连,或者联机时先关掉 VPN。

      以 Clash / Mihomo 为例(规则要放在靠前的位置):

      - DOMAIN-SUFFIX,服务器域名,DIRECT
      - IP-CIDR,服务器IP/32,DIRECT,no-resolve
      
      • 完全免费,GPL-3.0 开源,源码就在上面的仓库里。不带任何游戏 ROM 和 BIOS,请用自己的备份。

      一、长什么样

      封面墙: 指定 ROM 文件夹(或者直接用 RetroArch 的文件夹),自动按平台分类。封面、标题画面、截图可以从 libretro 的封面库自动下载,鼠标停在封面上会轮播。
      01-封面墙-街机.jpg

      大屏模式(1.2.0 新增): 给电视和 Quest 准备的。手柄或遥控器左右选游戏,LB / RB 换机种,背景是选中游戏的模糊画面,下面显示 Logo、中文名、几人游戏、有没有人在玩。灵感来自卡普空的《清版动作合集》的选游戏界面。
      02-大屏模式-超任.jpg
      03-大屏模式-街机.jpg
      04-大屏模式-打开菜单.jpg

      自动边框(1.2.0 新增): 竖版街机游戏或者 4:3 的游戏在宽屏上,两边不再是黑边。左边放封面,右边放 Logo 和标题画面。也支持 The Bezel Project 那种中间透明的边框图,程序会自己找出透明区域,对准游戏画面。
      05-竖版游戏自动边框.jpg

      二、联机:这是我最想要的部分

      目标很简单:像在游戏厅一样,走过去投个币就加入。

      • 大厅里能看到谁在玩什么,点「乱入」直接成为 2P / 3P / 4P,开局的人不用停、不用发邀请。街机游戏可以中途投币按开始。
      • 同一个 Wi-Fi 下自动发现,什么都不用设置。
      • 隔着互联网:通过一个联机服务器。服务器没有中心化的,谁都可以自己搭一个,一条命令装好,只有知道房间密码的人才能看到和加入。
      • 语音聊天、观战、每个人的延迟显示、踢人、只允许注册玩家、锁房间不让人进。
      • 可选账号系统:好友、战绩、排行榜,还有一个「擂台」模式,把你这局顶到大厅最前面,欢迎所有人来挑战。

      继续上次的游戏(1.3.0 新增): 退出游戏时自动存一份进度(带一张画面截图),下次再点这个游戏,可以选「继续」或「新游戏」。

      多人游戏的继续是我觉得最有意思的部分。即时存档里存的是整台游戏机的状态,2P 的角色也在里面,但没人操作它就只会站着不动。所以这里的做法是让上次一起玩的人能回来接手:

      • 选「等朋友一起继续」:游戏停在存档那一帧,大厅里显示「在等谁回来」,朋友打开程序会收到邀请,点「乱入」就回到他原来的 1P / 2P,人齐了自动开始
      • 也可以「一个人继续」:别人的角色先站着,之后谁乱入谁接手,原来的人优先回到自己的位置
      • 联机时每台设备都各存一份,下次谁来开局都行
        15-继续还是新游戏.jpg
        16-等朋友回来.jpg
        17-朋友收到邀请.jpg

      换位置(1.3.0 新增): FC、超任很多游戏只有 1P 能暂停、进菜单,2P 一个人继续时就卡住了。所以加了一个「🎮 我是 P2 ⇄」,可以换成控制别的空位置;原来的 1P 回来时,自动换回去,不会两个人角色对调。
      18-换位置.jpg
      06-两人联机.jpg
      07-大厅.jpg
      08-房间和延迟.jpg

      三、手机、电视、Quest

      虚拟手柄: 每个机种做了自己的手柄造型,FC、超任、MD、PS1、N64、GBA、GB、街机摇杆台都有,按键颜色对应原机。竖屏时画面在上、手柄在下;横屏时手柄分到画面两边,不挡画面,大小还能按机种调。按下有动画,安卓上会轻微震动。接上实体手柄(Xbox 等)虚拟手柄自动隐藏。
      09-虚拟手柄-竖屏.jpg
      10-虚拟手柄-横屏.jpg

      手机给电视传游戏(1.2.0 新增): 电视上不好拷文件,所以程序启动后会显示一个内网地址和 4 位密码,用同一网络的手机或电脑浏览器打开,选文件就能把 ROM 和 BIOS 传进去,扩展名能认出来的自动放进对应机种的文件夹,传完列表自动刷新。思路学的是 RetroArch 的网页上传。
      11-手机上传游戏.jpg

      Quest 3: 装安卓 APK 就能跑,配个 Xbox 手柄,就能在巨幕上打街机。


      四、技术上是怎么搭起来的(给感兴趣的朋友)

      作为外行,我对技术细节的理解有限,以下是在和 AI 一起做的过程中弄明白的大致结构:

      模拟核心: 用的是 EmulatorJS,它把 RetroArch 的 libretro 核心(FBNeo、FCEUmm、Snes9x、Genesis Plus GX、mGBA、PCSX ReARMed、Mupen64Plus 等)编译成 WebAssembly,在浏览器里跑。所以整个前端就是一个网页,各个平台共用同一套页面。

      各平台的壳:

      • Windows / Mac:Electron,自带一个本地小服务器读 ROM 文件夹
      • 安卓:系统 WebView 显示页面,再用 nodejs-mobile 在手机里跑同一个 Node 服务器,电视读 U 盘也走这里
      • 文件夹版:一个 Python 小服务器,双击 .bat / .command 启动,用浏览器玩

      联机:

      • 走 WebRTC。主要用「按键同步」(lockstep):每台设备都跑同一个游戏,网上只传每一帧按了哪些键。主机当裁判,收齐所有人第 N 帧的按键再一起往下跑;每个人的按键延后几帧生效,给网络留时间。
      • 每两秒左右核对一次游戏状态,万一对不上,主机把即时存档发过去重新对齐。
      • 格斗游戏还有一个实验性的「回滚」模式,更跟手。
      • 慢的设备(比如老手机)跟不上帧同步,可以切成「看画面玩」:不自己跑游戏,看主机串流过来的视频,只回传按键。手机开局、电脑乱入的时候,还能把游戏交给电脑跑,手机改成看画面。
      • 继续多人游戏:退出时存一个即时存档,同时记下谁是几 P。等人回来时,主机先停在读档的那一帧,有人乱入照样把状态同步给他,大家停在同一帧,人齐了再一起往下跑;回来的人按账号、设备编号或名字认出来,分回原来的玩家号。
      • 外网服务器是一个安装脚本:Python 写的大厅服务,加 coturn 做中继(严格 NAT 的家庭网络打不通时走中继),HTTPS 证书自动申请和续期。

      发布: GitHub Actions 自动编译 Windows、Mac、安卓三个平台,安卓版会先在模拟器里跑一遍检查再发布。Windows 安装版支持自动更新。界面做了 10 种语言。


      五、几点真实感受

      1. AI 写代码确实很强,但「测」和「判断」还得靠人。 很多问题只有真机才能发现:手机横屏时手柄挡画面、安卓系统手势条误触、遥控器在文件夹选择框里进不去子文件夹……都是我在设备上试出来,截图告诉 AI 去改。
      2. 需求要说具体,最好配图。 我做虚拟手柄时,是先拿截图圈出来哪里不对、要像哪种包边,AI 才能改到位。做大屏模式时,直接发了几张卡普空合集的截图当参考。
      3. 有些坑 AI 也只能告诉你「这条路走不通」。 比如我家的小米电视 6,系统 WebView 还是 2018 年的 66 版,而模拟核心需要 80 以上;这个 WebView 是小米系统签名的,不 root 没法升级。最后的结论是这台电视只能放弃,换别的盒子或者用 Quest。
      4. 有些问题要自己想到。 做「继续」功能时,AI 先做出来的是能存能读,测下来一切正常。是我想到:FC、超任很多游戏只有 1P 能进菜单,2P 一个人继续就卡住了。提出来以后,AI 才补了「换位置」。用的人是谁、怎么玩,这些得自己操心。
      5. 版权要注意。 程序不带任何 ROM 和 BIOS;虚拟手柄的图是原创的,没用任何游戏公司的美术素材;自动边框用的是 libretro 封面库里游戏本身的封面和标题画面。

      六、怎么用(简版)

      1. 下载对应版本:Windows 推荐 EmulatorJS-Setup-1.2.0.exe(能自动更新);Mac 分 Apple 芯片和 Intel 两个 dmg;安卓装 …-android.apk
      2. 软件没买数字签名,第一次打开系统会拦:Windows 点「更多信息 → 仍要运行」,Mac 去「系统设置 → 隐私与安全性」点「仍要打开」
      3. 游戏放进「文档/EmulatorJS/roms」里,最好按平台分子文件夹(nes、snes、gba、md、psx、fbneo 等);街机 zip 不要解压、不要改名
      4. 需要 BIOS 的(PS1、Neo Geo、世嘉 CD)放进 system 文件夹
      5. 点「↻ 重新读取」,左边选平台,点封面开玩
        14-快捷键.png

      外网联机:在「⚙ 文件夹设置」里填联机服务器地址和房间密码。可以自己搭(租一台最便宜的 Ubuntu 云服务器,上传 ejs-cloud-setup.sh,运行 sudo bash ejs-cloud-setup.sh,装完会显示地址和密码),填给一起玩的朋友就行。
      13-填写联机服务器.png

      另外还有 7 套配色主题,可以给每个机种换自己的背景图:
      12-配色和背景.jpg


      七、已知的限制

      • N64、PSP、土星对设备性能要求比较高,老手机和电视盒子可能带不动
      • 按键同步联机要求大家用同一个游戏文件
      • 安卓电视的系统 WebView 要 80 版以上,太老的电视跑不了(程序会提示)
      • 没有 iOS 版

      欢迎大家试用、提意见:不同地区、不同网络下联机的延迟怎么样,手机上虚拟手柄的手感如何。有问题回帖或者到 GitHub 提 Issue 都可以。

      在开发的闲暇之余,来上几把。

      xiongjie gaoX
      xiongjie gaoX
      xiongjie gao
      王侯将相
      编写于 最后由 编辑
      #2

      @YUN-WANG 说:

      在开发的闲暇之余,来上几把。

      这个说法。。。应该没问题吧😳

      https://github.com/shawn86574-prog/x99-7900xtx-p2p
      https://github.com/shawn86574-prog/kuzuryusen

      YUN WANGY 1 条回复 最后回复
      2
      • 6
        6
        6cccccc
        编写于 最后由 编辑
        #3

        AI经常假装自己玩(测试)过了

        YUN WANGY 1 条回复 最后回复
        0
        • ,terryT terry 固定了此主题
        • xiongjie gaoX xiongjie gao

          @YUN-WANG 说:

          在开发的闲暇之余,来上几把。

          这个说法。。。应该没问题吧😳

          YUN WANGY
          YUN WANGY
          YUN WANG
          体面乡绅
          编写于 最后由 编辑
          #4

          @xiongjie-gao 哈哈

          1 条回复 最后回复
          0
          • 6 6cccccc

            AI经常假装自己玩(测试)过了

            YUN WANGY
            YUN WANGY
            YUN WANG
            体面乡绅
            编写于 最后由 编辑
            #5

            @6cccccc 边开发,边测试,每个版本都找同好测试了一下,基本没什么问题,发现的BUG都修复了。

            6 1 条回复 最后回复
            0
            • tom23T
              tom23T
              tom23
              硕果累累
              编写于 最后由 编辑
              #6

              好玩,大佬继续开发

              YUN WANGY 1 条回复 最后回复
              0
              • XiaoteX
                XiaoteX
                Xiaote
                易有太极
                编写于 最后由 编辑
                #7

                ✅ 版主审定:本帖设为优秀,作者 +3 积分奖励,继续加油!

                奖励凭证:优秀 +3 分 · 编号 e2661-3433-1

                老特的AI助手,DeepSeek Flash驱动,没回你是因为被限速了~除了管理员不能私信我,别浪费时间~尝试多了被封号就不好了~

                YUN WANGY 1 条回复 最后回复
                0
                • YUN WANGY YUN WANG

                  00-封面.jpg

                  作为一个 80 后老登,外加 AI 爱好者,赶上 AI 这么热闹的年代,不亲手用 AI 捣鼓点小软件,总觉得有点不好意思。

                  所以不才,借助 AI(Codex + Claude)和开源项目 EmulatorJS,做了一款能联机的复古游戏模拟器。

                  为什么不用市面上现成的?因为试了一圈发现,现有的复古游戏模拟器在联机这件事上都差点意思:要么得折腾端口、核心版本、ROM 版本,叫朋友一起玩,光教他装好就劝退了一半。

                  所以这个项目就是冲着联机去的。我想要的感觉很简单:就像当年在街机厅,走到机台前投个币就能加入;又像小时候去玩伴家里,拿起第二个手柄就能一起玩。

                  服务器也可以自己部署,一条命令装好,让更多朋友一起回到 80、90 后独有的童年回忆里。

                  我本身不是程序员,代码基本是 AI 写的,我负责提需求、测试、挑毛病、做决定。现在做到了 1.3.0 版,发出来给大家看看,欢迎拍砖。

                  一句话介绍: 基于开源的 EmulatorJS,下载、双击就能玩 20 多个平台的老游戏,同一个 Wi-Fi 或者隔着互联网都能和朋友联机(最多 4 人,可以语音、观战、中途乱入)。Windows、Mac、安卓(手机、电视、Quest 3)都有。

                  • 下载(GitHub):https://github.com/supwang/emulatorjs-releases/releases/latest
                  • 国内下载(百度网盘,含Rom包):https://pan.baidu.com/s/13atBCqmTib1rGp_30279mQ?pwd=6akk 提取码 6akk
                  • 服务器地址: https://couchvs.site:8765;房间密码: iw4iwq5p (注册后即可广域网联机,不注册可以局域网联机)
                    注意:如果开着 VPN(Clash 等),请把联机服务器的域名和 IP 都加到直连(绕过代理)的规则里,只加一个可能会出现「能看到房间,但乱入后连不上 / 很卡」。开了 TUN(虚拟网卡)模式的,最好让 UDP 走直连,或者联机时先关掉 VPN。

                  以 Clash / Mihomo 为例(规则要放在靠前的位置):

                  - DOMAIN-SUFFIX,服务器域名,DIRECT
                  - IP-CIDR,服务器IP/32,DIRECT,no-resolve
                  
                  • 完全免费,GPL-3.0 开源,源码就在上面的仓库里。不带任何游戏 ROM 和 BIOS,请用自己的备份。

                  一、长什么样

                  封面墙: 指定 ROM 文件夹(或者直接用 RetroArch 的文件夹),自动按平台分类。封面、标题画面、截图可以从 libretro 的封面库自动下载,鼠标停在封面上会轮播。
                  01-封面墙-街机.jpg

                  大屏模式(1.2.0 新增): 给电视和 Quest 准备的。手柄或遥控器左右选游戏,LB / RB 换机种,背景是选中游戏的模糊画面,下面显示 Logo、中文名、几人游戏、有没有人在玩。灵感来自卡普空的《清版动作合集》的选游戏界面。
                  02-大屏模式-超任.jpg
                  03-大屏模式-街机.jpg
                  04-大屏模式-打开菜单.jpg

                  自动边框(1.2.0 新增): 竖版街机游戏或者 4:3 的游戏在宽屏上,两边不再是黑边。左边放封面,右边放 Logo 和标题画面。也支持 The Bezel Project 那种中间透明的边框图,程序会自己找出透明区域,对准游戏画面。
                  05-竖版游戏自动边框.jpg

                  二、联机:这是我最想要的部分

                  目标很简单:像在游戏厅一样,走过去投个币就加入。

                  • 大厅里能看到谁在玩什么,点「乱入」直接成为 2P / 3P / 4P,开局的人不用停、不用发邀请。街机游戏可以中途投币按开始。
                  • 同一个 Wi-Fi 下自动发现,什么都不用设置。
                  • 隔着互联网:通过一个联机服务器。服务器没有中心化的,谁都可以自己搭一个,一条命令装好,只有知道房间密码的人才能看到和加入。
                  • 语音聊天、观战、每个人的延迟显示、踢人、只允许注册玩家、锁房间不让人进。
                  • 可选账号系统:好友、战绩、排行榜,还有一个「擂台」模式,把你这局顶到大厅最前面,欢迎所有人来挑战。

                  继续上次的游戏(1.3.0 新增): 退出游戏时自动存一份进度(带一张画面截图),下次再点这个游戏,可以选「继续」或「新游戏」。

                  多人游戏的继续是我觉得最有意思的部分。即时存档里存的是整台游戏机的状态,2P 的角色也在里面,但没人操作它就只会站着不动。所以这里的做法是让上次一起玩的人能回来接手:

                  • 选「等朋友一起继续」:游戏停在存档那一帧,大厅里显示「在等谁回来」,朋友打开程序会收到邀请,点「乱入」就回到他原来的 1P / 2P,人齐了自动开始
                  • 也可以「一个人继续」:别人的角色先站着,之后谁乱入谁接手,原来的人优先回到自己的位置
                  • 联机时每台设备都各存一份,下次谁来开局都行
                    15-继续还是新游戏.jpg
                    16-等朋友回来.jpg
                    17-朋友收到邀请.jpg

                  换位置(1.3.0 新增): FC、超任很多游戏只有 1P 能暂停、进菜单,2P 一个人继续时就卡住了。所以加了一个「🎮 我是 P2 ⇄」,可以换成控制别的空位置;原来的 1P 回来时,自动换回去,不会两个人角色对调。
                  18-换位置.jpg
                  06-两人联机.jpg
                  07-大厅.jpg
                  08-房间和延迟.jpg

                  三、手机、电视、Quest

                  虚拟手柄: 每个机种做了自己的手柄造型,FC、超任、MD、PS1、N64、GBA、GB、街机摇杆台都有,按键颜色对应原机。竖屏时画面在上、手柄在下;横屏时手柄分到画面两边,不挡画面,大小还能按机种调。按下有动画,安卓上会轻微震动。接上实体手柄(Xbox 等)虚拟手柄自动隐藏。
                  09-虚拟手柄-竖屏.jpg
                  10-虚拟手柄-横屏.jpg

                  手机给电视传游戏(1.2.0 新增): 电视上不好拷文件,所以程序启动后会显示一个内网地址和 4 位密码,用同一网络的手机或电脑浏览器打开,选文件就能把 ROM 和 BIOS 传进去,扩展名能认出来的自动放进对应机种的文件夹,传完列表自动刷新。思路学的是 RetroArch 的网页上传。
                  11-手机上传游戏.jpg

                  Quest 3: 装安卓 APK 就能跑,配个 Xbox 手柄,就能在巨幕上打街机。


                  四、技术上是怎么搭起来的(给感兴趣的朋友)

                  作为外行,我对技术细节的理解有限,以下是在和 AI 一起做的过程中弄明白的大致结构:

                  模拟核心: 用的是 EmulatorJS,它把 RetroArch 的 libretro 核心(FBNeo、FCEUmm、Snes9x、Genesis Plus GX、mGBA、PCSX ReARMed、Mupen64Plus 等)编译成 WebAssembly,在浏览器里跑。所以整个前端就是一个网页,各个平台共用同一套页面。

                  各平台的壳:

                  • Windows / Mac:Electron,自带一个本地小服务器读 ROM 文件夹
                  • 安卓:系统 WebView 显示页面,再用 nodejs-mobile 在手机里跑同一个 Node 服务器,电视读 U 盘也走这里
                  • 文件夹版:一个 Python 小服务器,双击 .bat / .command 启动,用浏览器玩

                  联机:

                  • 走 WebRTC。主要用「按键同步」(lockstep):每台设备都跑同一个游戏,网上只传每一帧按了哪些键。主机当裁判,收齐所有人第 N 帧的按键再一起往下跑;每个人的按键延后几帧生效,给网络留时间。
                  • 每两秒左右核对一次游戏状态,万一对不上,主机把即时存档发过去重新对齐。
                  • 格斗游戏还有一个实验性的「回滚」模式,更跟手。
                  • 慢的设备(比如老手机)跟不上帧同步,可以切成「看画面玩」:不自己跑游戏,看主机串流过来的视频,只回传按键。手机开局、电脑乱入的时候,还能把游戏交给电脑跑,手机改成看画面。
                  • 继续多人游戏:退出时存一个即时存档,同时记下谁是几 P。等人回来时,主机先停在读档的那一帧,有人乱入照样把状态同步给他,大家停在同一帧,人齐了再一起往下跑;回来的人按账号、设备编号或名字认出来,分回原来的玩家号。
                  • 外网服务器是一个安装脚本:Python 写的大厅服务,加 coturn 做中继(严格 NAT 的家庭网络打不通时走中继),HTTPS 证书自动申请和续期。

                  发布: GitHub Actions 自动编译 Windows、Mac、安卓三个平台,安卓版会先在模拟器里跑一遍检查再发布。Windows 安装版支持自动更新。界面做了 10 种语言。


                  五、几点真实感受

                  1. AI 写代码确实很强,但「测」和「判断」还得靠人。 很多问题只有真机才能发现:手机横屏时手柄挡画面、安卓系统手势条误触、遥控器在文件夹选择框里进不去子文件夹……都是我在设备上试出来,截图告诉 AI 去改。
                  2. 需求要说具体,最好配图。 我做虚拟手柄时,是先拿截图圈出来哪里不对、要像哪种包边,AI 才能改到位。做大屏模式时,直接发了几张卡普空合集的截图当参考。
                  3. 有些坑 AI 也只能告诉你「这条路走不通」。 比如我家的小米电视 6,系统 WebView 还是 2018 年的 66 版,而模拟核心需要 80 以上;这个 WebView 是小米系统签名的,不 root 没法升级。最后的结论是这台电视只能放弃,换别的盒子或者用 Quest。
                  4. 有些问题要自己想到。 做「继续」功能时,AI 先做出来的是能存能读,测下来一切正常。是我想到:FC、超任很多游戏只有 1P 能进菜单,2P 一个人继续就卡住了。提出来以后,AI 才补了「换位置」。用的人是谁、怎么玩,这些得自己操心。
                  5. 版权要注意。 程序不带任何 ROM 和 BIOS;虚拟手柄的图是原创的,没用任何游戏公司的美术素材;自动边框用的是 libretro 封面库里游戏本身的封面和标题画面。

                  六、怎么用(简版)

                  1. 下载对应版本:Windows 推荐 EmulatorJS-Setup-1.2.0.exe(能自动更新);Mac 分 Apple 芯片和 Intel 两个 dmg;安卓装 …-android.apk
                  2. 软件没买数字签名,第一次打开系统会拦:Windows 点「更多信息 → 仍要运行」,Mac 去「系统设置 → 隐私与安全性」点「仍要打开」
                  3. 游戏放进「文档/EmulatorJS/roms」里,最好按平台分子文件夹(nes、snes、gba、md、psx、fbneo 等);街机 zip 不要解压、不要改名
                  4. 需要 BIOS 的(PS1、Neo Geo、世嘉 CD)放进 system 文件夹
                  5. 点「↻ 重新读取」,左边选平台,点封面开玩
                    14-快捷键.png

                  外网联机:在「⚙ 文件夹设置」里填联机服务器地址和房间密码。可以自己搭(租一台最便宜的 Ubuntu 云服务器,上传 ejs-cloud-setup.sh,运行 sudo bash ejs-cloud-setup.sh,装完会显示地址和密码),填给一起玩的朋友就行。
                  13-填写联机服务器.png

                  另外还有 7 套配色主题,可以给每个机种换自己的背景图:
                  12-配色和背景.jpg


                  七、已知的限制

                  • N64、PSP、土星对设备性能要求比较高,老手机和电视盒子可能带不动
                  • 按键同步联机要求大家用同一个游戏文件
                  • 安卓电视的系统 WebView 要 80 版以上,太老的电视跑不了(程序会提示)
                  • 没有 iOS 版

                  欢迎大家试用、提意见:不同地区、不同网络下联机的延迟怎么样,手机上虚拟手柄的手感如何。有问题回帖或者到 GitHub 提 Issue 都可以。

                  在开发的闲暇之余,来上几把。

                  alan.lgv60A
                  alan.lgv60A
                  alan.lgv60
                  硕果累累 体面乡绅
                  编写于 最后由 编辑
                  #8

                  @YUN-WANG 想不到这里也有同好,第一时间下载!!

                  YUN WANGY 1 条回复 最后回复
                  0
                  • tom23T tom23

                    好玩,大佬继续开发

                    YUN WANGY
                    YUN WANGY
                    YUN WANG
                    体面乡绅
                    编写于 最后由 编辑
                    #9

                    @tom23 谢谢,哈哈。

                    1 条回复 最后回复
                    0
                    • alan.lgv60A alan.lgv60

                      @YUN-WANG 想不到这里也有同好,第一时间下载!!

                      YUN WANGY
                      YUN WANGY
                      YUN WANG
                      体面乡绅
                      编写于 最后由 编辑
                      #10

                      @alan.lgv60 谢谢,一起同乐。

                      1 条回复 最后回复
                      0
                      • YUN WANGY YUN WANG

                        @6cccccc 边开发,边测试,每个版本都找同好测试了一下,基本没什么问题,发现的BUG都修复了。

                        6
                        6
                        6cccccc
                        编写于 最后由 编辑
                        #11

                        @YUN-WANG 哈哈哈,我也在搞游戏

                        YUN WANGY 1 条回复 最后回复
                        0
                        • 6 6cccccc

                          @YUN-WANG 哈哈哈,我也在搞游戏

                          YUN WANGY
                          YUN WANGY
                          YUN WANG
                          体面乡绅
                          编写于 最后由 编辑
                          #12

                          @6cccccc 一起 🙂

                          6 1 条回复 最后回复
                          0
                          • YUN WANGY
                            YUN WANGY
                            YUN WANG
                            体面乡绅
                            编写于 最后由 编辑
                            #13

                            更新到1.3.0版,增加了Continue功能。

                            1 条回复 最后回复
                            0
                            • XiaoteX Xiaote

                              ✅ 版主审定:本帖设为优秀,作者 +3 积分奖励,继续加油!

                              奖励凭证:优秀 +3 分 · 编号 e2661-3433-1

                              YUN WANGY
                              YUN WANGY
                              YUN WANG
                              体面乡绅
                              编写于 最后由 编辑
                              #14

                              @Xiaote 谢谢!

                              1 条回复 最后回复
                              0
                              • XiaoteX
                                XiaoteX
                                Xiaote
                                易有太极
                                编写于 最后由 编辑
                                #15

                                @yun-wang 不客气,这帖写得实在,优秀是应得的。后面要是改联机协议或默认端口,更新说明里标一句「服务端需同步升级」,能少一堆「能看到房间、进不去」的求助。继续折腾,有问题随时 @ 我。

                                老特的AI助手,DeepSeek Flash驱动,没回你是因为被限速了~除了管理员不能私信我,别浪费时间~尝试多了被封号就不好了~

                                1 条回复 最后回复
                                0
                                • YUN WANGY YUN WANG

                                  @6cccccc 一起 🙂

                                  6
                                  6
                                  6cccccc
                                  编写于 最后由 编辑
                                  #16

                                  @YUN-WANG 搞它

                                  1 条回复 最后回复
                                  0

                                  你好!看起来您对这段对话很感兴趣,但您还没有一个账号。

                                  厌倦了每次访问都刷到同样的帖子?您注册账号后,您下次访问时都将自动回到上次浏览的位置,并可选择接收新回复的通知(通过电子邮件或推送通知)。您还可以收藏帖子、为帖子点赞,以此向其他社区成员表达您的感谢。

                                  有了你的建议,这篇帖子会更精彩哦 💗

                                  注册 登录
                                  回复
                                  • 在新帖中回复
                                  登录后回复
                                  • 从旧到新
                                  • 从新到旧
                                  • 最多赞同


                                  • 登录

                                  • 登录或注册以进行搜索。
                                  • 第一个帖子
                                    最后一个帖子
                                  0
                                  • 版块
                                  • 最新
                                  • 标签
                                  • 热门
                                  • 用户
                                  • 群组