揭秘CardsAgainst:零服务器、2台iPhone即开即玩的P2P恶搞卡牌游戏完全指南
2026/8/22 15:20:49 网站建设 项目流程

揭秘CardsAgainst:零服务器、2台iPhone即开即玩的P2P恶搞卡牌游戏完全指南

【免费下载链接】CardsAgainstAn iOS game for horrible people项目地址: https://gitcode.com/gh_mirrors/ca/CardsAgainst

CardsAgainst 是一款专为 iOS 打造的P2P 恶搞卡牌游戏,它复刻了著名整蛊桌游《Cards Against Humanity》的黑白卡牌玩法:无需注册、零服务器、两台 iPhone 连上同一 Wi-Fi 即开即玩。整款应用使用 Swift 4 开发,基于苹果原生的 Multipeer Connectivity 框架实现设备间直连通信,是学习 iOS 局域网多人游戏的绝佳开源样本。

为什么"零服务器"的P2P卡牌游戏这么香?🎉

传统多人手游必须依赖云端服务器转发数据,而 CardsAgainst 采用P2P(点对点)局域网直连方案:

  • 🚫无需后端:没有账号、没有登录、没有服务器成本
  • 即连即玩:同一 Wi-Fi 下设备自动发现,无需手动输入房间号
  • 🎯隐私友好:牌局数据只在你和朋友的手机构成的小网络里流转

这套能力来自两个核心组件:

  1. PeerKit(位于Vendor/PeerKit/):事件驱动、零配置的 Multipeer Connectivity 封装,负责设备发现与连接;
  2. ConnectionManagerCardsAgainst/Controllers/ConnectionManager.swift):应用层通信管理器,定义了startGameanswervotenextCardendGame等 6 种游戏事件,把所有牌局操作打包成Data在设备间广播。

💡 对新手来说,这个仓库是一个很好的教材:你可以清楚看到"设备发现 → 事件定义 → 数据序列化 → 广播"的完整 P2P 通信链路。

快速上手:2台iPhone三步入局 📱

CardsAgainst 把"开始游戏"简化到了极致,主菜单只有一个按钮:

  1. 两台 iPhone 连接同一 Wi-Fi,分别打开 CardsAgainst;
  2. 主机端打开后,菜单页的玩家列表会自动刷新一旁的设备(MenuViewController.swift通过ConnectionManager.onConnect监听连接事件);
  3. 点击Start Game按钮,主机抽取 1 张黑卡并给每位玩家发 10 张白卡,游戏即刻开始。

相关逻辑集中在 View Controllers/MenuViewController.swift 的startGame方法中——主机先本地抽卡,再通过sendEventForEach把黑卡同步给所有对手。

玩法流程:黑白卡牌的完整一轮 🃏

游戏规则与实体桌游一致,GameState.swiftCardsAgainst/Models/GameState.swift)中仅用 3 个状态就概括了整局流程:

游戏阶段枚举状态玩家在做什么
出牌pickingCard从 10 张白卡中选 1 张,配上黑卡填空
等待waitingForOthers等待其他玩家提交答案
投票pickingWinner翻牌 → 全场大笑 → 投票选出最佳回答

得票最高者获得 1 分,随后进入下一轮(nextCard事件)。整个"抽卡 → 等待 → 投票"的状态机由GameViewController.swift(共 660+ 行)驱动,是仓库里最值得阅读的文件。

卡牌内容在哪?如何解锁"完整牌库" 🔓

所有卡牌都是 JSON 数据,存放在CardsAgainst/Assets/下:

  • cards_pg13.json:PG-13 温和版(默认启用),一小套"绝不可能冒犯任何人"的卡牌;
  • cards.json:完整经典牌库,包含原汁原味的"horrible"内容。

切换方式非常直接——打开CardsAgainst/Controllers/CardManager.swift,把第 11 行的pg13标志从true改成false即可。卡牌的加载、洗牌(takeRandom耗尽后自动重新洗牌)都在这个文件里完成,结构清晰易读。

项目结构速览 🗂️

仓库组织得非常"教科书式",适合新手模仿:

  • Models/Card(黑白卡)、AnswerVotePlayerGameState,全部实现MPCSerializable协议以便网络传输;
  • Controllers/ConnectionManager(P2P 通信)、CardManager(抽卡发牌)、WhiteCardFlowLayout(白卡瀑布流布局);
  • View Controllers/MenuViewController(大厅)、GameViewController(牌桌);
  • Views/PlayerCellWhiteCardCellTouchableLabel
  • Vendor/:三个第三方库 —— PeerKit(组网)、Cartography(代码化布局)、SVProgressHUD(提示浮层)。

构建与运行 🛠️

使用 Xcode 打开项目文件CardsAgainst.xcodeproj,选择 iPhone 目标(需支持 Multipeer Connectivity 的设备,模拟器无法组网),直接编译运行即可。由于依赖库已内置在Vendor/目录中,无需额外配置依赖管理。

写在最后 ⭐

CardsAgainst 用不到 2000 行 Swift 代码证明了一件事:多人游戏不一定需要服务器。如果你想学 Multipeer Connectivity 实战、想给聚会准备一个"损友限定"的整蛊游戏,或者只是好奇 P2P 通信如何落地,这个仓库都值得完整读一遍——毕竟,它自谦为 "An iOS game for horrible people",而你的朋友们一定会很"享受"的 😄

【免费下载链接】CardsAgainstAn iOS game for horrible people项目地址: https://gitcode.com/gh_mirrors/ca/CardsAgainst

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询