揭秘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 下设备自动发现,无需手动输入房间号
- 🎯隐私友好:牌局数据只在你和朋友的手机构成的小网络里流转
这套能力来自两个核心组件:
- PeerKit(位于
Vendor/PeerKit/):事件驱动、零配置的 Multipeer Connectivity 封装,负责设备发现与连接; - ConnectionManager(
CardsAgainst/Controllers/ConnectionManager.swift):应用层通信管理器,定义了startGame、answer、vote、nextCard、endGame等 6 种游戏事件,把所有牌局操作打包成Data在设备间广播。
💡 对新手来说,这个仓库是一个很好的教材:你可以清楚看到"设备发现 → 事件定义 → 数据序列化 → 广播"的完整 P2P 通信链路。
快速上手:2台iPhone三步入局 📱
CardsAgainst 把"开始游戏"简化到了极致,主菜单只有一个按钮:
- 两台 iPhone 连接同一 Wi-Fi,分别打开 CardsAgainst;
- 主机端打开后,菜单页的玩家列表会自动刷新一旁的设备(
MenuViewController.swift通过ConnectionManager.onConnect监听连接事件); - 点击Start Game按钮,主机抽取 1 张黑卡并给每位玩家发 10 张白卡,游戏即刻开始。
相关逻辑集中在 View Controllers/MenuViewController.swift 的startGame方法中——主机先本地抽卡,再通过sendEventForEach把黑卡同步给所有对手。
玩法流程:黑白卡牌的完整一轮 🃏
游戏规则与实体桌游一致,GameState.swift(CardsAgainst/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(黑白卡)、Answer、Vote、Player、GameState,全部实现MPCSerializable协议以便网络传输; - Controllers/:
ConnectionManager(P2P 通信)、CardManager(抽卡发牌)、WhiteCardFlowLayout(白卡瀑布流布局); - View Controllers/:
MenuViewController(大厅)、GameViewController(牌桌); - Views/:
PlayerCell、WhiteCardCell、TouchableLabel; - 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),仅供参考