A cross-platform multiplayer game collection built with Flutter
跨平台多人游戏合集 — 纯 Dart,零依赖
👉 Click here to play in browser 👈
No install. No download. Just open and play.
无需安装,无需下载,打开即玩。
A voxel world rendered entirely with
CustomPainter— zero GPU dependencies.纯 Dart 软渲染的体素世界,零 GPU 依赖。
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
Treasure is a cross-platform multiplayer game collection built entirely with Flutter. 11 local games + 5 LAN multiplayer games + 1 chat room — all written in pure Dart with near-zero third-party dependencies.
Treasure 是一个完全用 Flutter 构建的跨平台多人游戏合集。11 款单机游戏 + 5 款局域网联机游戏 + 1 个聊天室 — 纯 Dart 编写,几乎零第三方依赖。
| Feature | 特性 | Description |
|---|---|---|
| 🧩 From Scratch | 从零开始 | Socket networking, 3D renderer, physics engine — all hand-written |
| 🌐 LAN Multiplayer | 局域网联机 | UDP broadcast/multicast room discovery. Same WiFi = instant play |
| 🎮 16 Games | 16 款游戏 | Board games, action, RPG, 3D voxel world, physics simulation |
| 🖥️ Cross-Platform | 跨平台 | Android, iOS, Web, Windows, Linux |
| 📦 Pure Dart | 纯 Dart | 核心零依赖,所有第三方插件均可按需移除 |
| # | Game | 游戏 | Mode | Description |
|---|---|---|---|---|
| 03 | Animal Chess | 斗兽棋 | Local + LAN | Classic animal chess with hidden piece reveal |
| 05 | Gobang | 五子棋 | Local + LAN | Five-in-a-row with undo support |
| 07 | Go | 围棋 | Local + LAN | Full rules: capture, ko, suicide prevention |
| # | Game | 游戏 | Mode | Description |
|---|---|---|---|---|
| 06 | Greedy Snake | 贪吃蛇 | Local + LAN | Multiplayer snake with spatial grid collision |
| 11 | Spaceship | 太空飞船 | Local | Top-down shooter with bosses, props, achievements |
| # | Game | 游戏 | Mode | Description |
|---|---|---|---|---|
| 04 | Elemental Battle | 元素之战 | Local + LAN | Five-element RPG with 25 unique skills |
| 12 | Soft Body | 软体模拟 | Local | Spring-mass physics (Euler/Verlet integration) |
| 13 | Minecraft | 我的世界 | Local | Pure Dart 3D voxel engine with procedural world |
| # | Game | 游戏 | Mode | Description |
|---|---|---|---|---|
| 08 | Sudoku | 数独 | Local | Auto-generated puzzles |
| 09 | Guess | 猜词 | Local | Emoji word guessing |
| 10 | Three Tiles | 三消麻将 | Local | Tile-matching puzzle with props |
| # | Game | 游戏 | Mode | Description |
|---|---|---|---|---|
| 02 | LAN Chat | 局域网聊天 | LAN | Pure text chat room |
All modules follow a consistent three-layer architecture:
所有模块遵循统一的三层架构:
┌─────────────────────────────────────────────────┐
│ upper/ UI pages, rendering, user interaction │
│ UI 页面、渲染、用户交互 │
├─────────────────────────────────────────────────┤
│ middle/ Business logic, algorithms, rules │
│ 业务逻辑、算法、游戏规则 │
├─────────────────────────────────────────────────┤
│ base/ Data models, constants, definitions │
│ 数据模型、常量、核心定义 │
└─────────────────────────────────────────────────┘
lib/
├── 00.common/ # Shared modules (engine, network, widgets)
│ ├── engine/ # Network engines (base, turn-based, real-time)
│ ├── network/ # UDP/TCP/WebSocket, encryption, room discovery
│ └── widget/ # Reusable UI components
├── 01.home/ # Home page
├── 02.lan_chat/ # LAN chat room
├── 03.animal_chess/ # 斗兽棋
├── ...
└── 13.minecraft/ # 3D voxel engine
Each game module follows a consistent pattern:
每个游戏模块遵循统一结构:
├── base.dart # Data models | 数据模型
├── foundation_manager.dart # Shared logic | 通用逻辑
├── local_manager.dart # Local mode logic | 单机逻辑
├── local_page.dart # Local mode UI | 单机界面
├── net_manager.dart # LAN mode logic | 联机逻辑
└── net_page.dart # LAN mode UI | 联机界面
Dual network mode, switchable via one line in config/network_config.dart:
双网络方案,通过 config/network_config.dart 一行切换:
const NetworkMode networkMode = NetworkMode.socket; // TCP + UDP (native)
const NetworkMode networkMode = NetworkMode.webSocket; // WebSocket (Web)┌───────────────────────────────────────────────────────┐
│ Application Layer | 应用层 │
│ NetworkEngine / NetTurnGameEngine / NetRealGameEngine │
├───────────────────────────────────────────────────────┤
│ Message Protocol | 消息协议层 │
│ NetworkMessage (JSON + XOR encryption) │
├───────────────────────────────────────────────────────┤
│ Transport Layer | 传输层 │
│ socket: TCP ServerSocket + UDP broadcast/multicast │
│ webSocket: HttpServer + WebSocket + HTTP discovery │
└───────────────────────────────────────────────────────┘
- Room Discovery — UDP broadcast/multicast (socket) or HTTP scan (WebSocket) | 房间发现
- Reliability — ACK + retry for critical messages | 关键消息确认重试
- Reconnection — Exponential backoff (1s→2s→4s→8s→16s, max 5 attempts) | 指数退避重连
- Encryption — XOR stream encryption with room-shared key | 数据加密传输
- Pure Dart software renderer — no OpenGL, no Vulkan | 纯 Dart 软渲染,无依赖
- Procedural world: 7 biomes via temperature/humidity noise | 基于温湿度噪声的 7 种生物群系
- Optimization: octree, back-face culling, frustum culling, occlusion culling, face merging | 八叉树+裁剪+面合并优化
- AABB collision detection, gravity, friction, jumping | AABB 碰撞+物理
Full docs: lib/13.minecraft/README.md
- Spring-mass model with Hooke's law + damping | 弹簧-质点模型+胡克定律+阻尼
- Dual integration: Euler method and Verlet integration | 欧拉法和 Verlet 积分双方案
- 3D cylindrical tube structure with triangular mesh | 3D 圆柱体三角网格结构
- Five elements (Metal/Wood/Water/Fire/Earth) × 5 skill tiers | 五行 × 5 类技能
- 25 unique skills: passive, active, advanced, auxiliary, ultimate | 25 个独特技能
- Rich effect system: parry, lifesteal, enchant, counter, burn | 格挡/吸血/附魔/反击/灼烧等
- socket mode: UDP broadcast + multicast, zero-config | UDP 广播+组播,零配置
- webSocket mode: HTTP scan + WebSocket, browser multiplayer | HTTP 扫描+WebSocket,浏览器联机
- Dual NIC auto-traversal | 双网卡自动遍历
设计原则:Pure Dart, zero dependencies.
核心功能(网络通信、游戏逻辑、3D 引擎、UI 组件)全部手写,不依赖任何第三方库。 以下插件仅为特定功能引入,每个都可按说明移除,恢复零依赖。
| 插件 | 引入原因 | 影响范围 | 移除后影响 | 移除方法 |
|---|---|---|---|---|
web_socket_channel |
兼容 Web 端通信 | 00.common/network/connection.dart |
Web 端失去联机功能,仅原生平台(Android/iOS/Windows/Linux)可联机 | 在 config/network_config.dart 改为 NetworkMode.socket,删除 WebSocket 分支代码 |
http |
Web 端 HTTP 扫描发现房间 | 00.common/network/http_fetch.dart |
Web 端无法自动发现房间,需手动输入 IP 加入 | 删除 http_fetch.dart 文件 |
image_picker |
聊天发送图片 | 02.lan_chat/net_page.dart |
聊天无法发送图片,仅支持文本/文件/表情 | 删除 _pickImage() 方法,附件菜单自动隐藏相册选项 |
file_picker |
聊天发送文件 | 02.lan_chat/net_page.dart |
聊天无法发送文件,仅支持文本/图片/表情 | 删除 _pickFile() 方法,附件菜单自动隐藏文件选项 |
path_provider |
获取应用专属存储目录 | 00.common/tool/storage_service.dart |
Android/iOS 无法持久化(语言设置、游戏进度、排行榜丢失),桌面端不受影响 | 删除 StorageService 中 path_provider 相关代码,改用 Directory.current(仅桌面端可用) |
cupertino_icons |
iOS 风格图标 | 全局 | 无功能影响,仅图标风格变化 | 用 Material Icons 替代后移除 |
平台权限说明:
image_picker需要 AndroidREAD_MEDIA_IMAGES(Android 13+)/READ_EXTERNAL_STORAGE(Android 12-)和 iOSNSPhotoLibraryUsageDescription。已在AndroidManifest.xml和Info.plist中声明。移除image_picker后可同步删除这些权限声明。
如果不需要 Web 端联机和聊天文件/图片功能,执行以下操作即可恢复完全零依赖:
# 1. 切换到原生 Socket 模式(Web 端将失去联机功能)
# 编辑 lib/00.common/config/network_config.dart
# 将 NetworkMode.webSocket 改为 NetworkMode.socket
# 2. 从 pubspec.yaml 删除以下依赖:
# web_socket_channel (影响:Web 端无法联机)
# http (影响:Web 端无法自动发现房间)
# image_picker (影响:聊天无法发送图片)
# file_picker (影响:聊天无法发送文件)
# 3. 删除相关文件
rm lib/00.common/network/http_fetch.dart
# 4. 删除 net_page.dart 中的 image_picker / file_picker import 和相关方法
# 5. 删除平台权限声明(可选)
# android/app/src/main/AndroidManifest.xml: 删除 READ_MEDIA_IMAGES、READ_EXTERNAL_STORAGE
# ios/Runner/Info.plist: 删除 NSPhotoLibraryUsageDescription
# 6. 清理
flutter pub get
flutter analyze- Flutter SDK ≥ 3.x
git clone https://github.com/rebort-a/treasure.git
cd treasure
flutter pub get
flutter run# Web
flutter build web --release
# Android APK
flutter build apk --release
# Windows
flutter build windows --release
# iOS (requires macOS)
flutter build ios --release
| 11 Local Games |
5 LAN Games |
5 Platforms |
5 Dependencies (all removable) |
| Module | Link |
|---|---|
| 🧊 Minecraft 3D Engine | lib/13.minecraft/README.md |
This project is licensed under the MIT License.
本项目采用 MIT 协议 开源。
Built with Flutter & curiosity. | 用 Flutter 和好奇心构建。
⭐ If you find this interesting, give it a star! | 如果觉得有趣,点个 Star 吧!





