小游戏合集 - 基于 Flutter 的多游戏应用,灵感来自 Nintendo Switch 的《世界游戏大全51》
| 游戏 | 状态 | AI 难度 | 存档系统 |
|---|---|---|---|
| 猜数字 (Hit & Blow) | ✅ 完成 | - | 排行榜 |
| 游艇骰子 (Yacht Dice) | ✅ 完成 | 简单/中等/困难 | 5 个存档位 |
| 猜排列 (Guess Arrangement) | ✅ 完成 | 简单/中等/困难 | 游戏记录 |
| 2048 | ✅ 完成 | - | 5 档位 + 自动存档 |
| 播棋 (Mancala) | ✅ 完成 | 简单/中等/困难 | 5 个存档位 |
| 红心大战 (Hearts) | ✅ 完成 | 简单/中等/困难 | 5 个存档位 |
| 骰子对战 (Dice Battle) | 🚧 开发中 | 简单/中等/困难 | 游戏记录 |
猜数字组合灵感来自 Nintendo Switch 的《世界游戏大全51》中的猜数字。
简介: 猜出隐藏的 n 个数字和位置的游戏,默认 n 为 4。从 1-n 中选择数字放到位置上,按下"检查"即可检查对错:
- Hit (彩色对钩):位置和数字都正确
- Blow (灰色对钩):数字正确但位置错误
持续猜测直到全部正确!
特性:
- 两种难度:简单(4 位数字,1-6),困难(6 位数字,1-8)
- 最多 10 次尝试
- 猜测历史记录
- 计时器和游戏时长统计
- 按尝试次数排序的排行榜
游艇骰子灵感来自 Nintendo Switch 的《世界游戏大全51》中的游艇骰子。
简介: 投掷骰子凑出排列组合来竞争总分!投掷后点击骰子"保留"好的骰子,重新投掷其余的。双击分数类别确认得分。每个类别每局只能选择一次。总分最高者获胜!
游戏模式:
- 双人模式:本地多人对战
- 对战 AI:简单(随机)、中等(规则策略)、困难(最优策略)
特性:
- 骰子滚动动画
- 有效类别高亮的分数预览
- 保留和重投机制(每回合最多 3 次投掷)
- 保存/恢复游戏功能
- 全部 13 个 Yahtzee 类别
受推演类桌游启发的猜牌游戏。
简介: 两位玩家各自抽取 8 张牌,牌面朝下按从小到大排列(A=1,K=13)。轮流猜测对手的牌,猜测位置和点数。猜对翻开该牌并累计连击!
游戏规则:
- 猜牌:"第 3 张是 7"(只猜点数,不猜花色)
- 猜对:翻开该牌,继续猜测,累计连击
- 猜错:回合交给对手,连击归零
- 胜利条件:先翻开对手所有牌的玩家获胜
游戏模式:
- 双人对战:本地多人,隐藏牌面
- 对战 AI:简单(随机)、中等(位置规则)、困难(概率分析)
特性:
- 卡牌翻转动画效果
- 连击追踪系统
- 位置推演(牌按升序排列)
- AI 回合总结对话框
- 游戏记录持久化
经典滑块益智游戏。
简介: 向四个方向滑动方块,合并相同数字的方块。当两个相同数字的方块碰撞时,它们会合并成一个数值翻倍的方块。尝试达到 2048 方块!
游戏规则:
- 上下左右滑动移动所有方块
- 相同数字的方块碰撞时会合并
- 每次移动后随机生成新方块(90% 概率为 2,10% 概率为 4)
- 无法移动时游戏结束
计分系统:
- 基础分数:合并后的方块数值(如两个 4 合并得 8 分)
- 多重合并奖励:×1.5
- 连续合并奖励:×2.0
特性:
- 方块滑动和生成动画
- 每 3 分钟自动存档
- 5 个存档位(1 自动 + 4 手动)
- 最高分记录
- 游戏计时器
- 明/暗主题支持
古老的播种策略游戏。
简介: 收集比对手更多的种子!每位玩家有 6 个小坑和 1 个大坑。从你的一个小坑中取出所有种子,逆时针播撒。
游戏规则:
- 从你一侧的一个小坑中取出所有种子
- 逆时针逐个播撒,跳过对手的大坑
- 落入你自己的大坑:再来一次!
- 落入你的空坑且对面有种子:捕获对面所有种子!
- 当一方小坑全部为空时游戏结束,剩余种子归其所有者
- 种子多者获胜
游戏模式:
- 双人对战:本地多人
- 对战 AI:简单(随机)、中等(启发式)、困难(Minimax + Alpha-Beta剪枝)
特性:
- 种子播撒动画
- 回合指示器
- 再来一次逻辑
- 捕获动画
- 5 个存档位
- 游戏计时器
经典轮次卡牌游戏 - 避免收集红心和黑桃皇后!
简介: 四人红心大战,包含换牌阶段和全收月亮机制。避免收集分数(红心 = 每张 1 分,Q♠ = 13 分)。先达到 100 分的玩家输掉游戏!
游戏规则:
- 换牌阶段:选择 3 张牌传递(左 → 右 → 对面 → 不换,循环)
- 轮次出牌:尽可能跟牌,最大的牌赢得该轮
- 计分:红心 = 每张 1 分,黑桃皇后 = 13 分
- 全收月亮:收集全部 26 分 = 对手各得 26 分!
- 首位达到 100 分触发游戏结束 - 分数最低者获胜
游戏模式:
- 玩家对战 3 AI:人类玩家对抗 AI 对手
- AI 难度:简单(避免分数)、中等(策略性)、困难(卡牌追踪 + 全收月亮)
特性:
- 4 方向换牌循环
- 卡牌追踪系统(AI 记忆已出的牌)
- 全收月亮检测和计分
- 换牌计时器选项(15秒、30秒、60秒、无)
- 月亮公告设置(隐藏/显示)
- 5 个存档位保存完整游戏状态
- 计分板和轮次历史
- 规则验证和计分逻辑
策略骰子战斗游戏,包含攻击/防御阶段和特殊效果!
简介: 回合制骰子对战游戏,玩家投掷骰子进行攻击和防御。在攻击和防御阶段交替,选择骰子以最大化伤害或防御。
游戏规则:
- 准备阶段:每位玩家选择具有独特攻击/防御值的骰子组合
- 硬币翻转:随机决定先手
- 攻击阶段:投掷骰子,选择攻击骰子,最多重投 2 次
- 防御阶段:防守方投掷并选择防御骰子
- 伤害计算:攻击总值 - 防御总值 = 造成伤害
- 效果:特殊场地效果从第 2 回合开始激活
- 当玩家 HP 为 0 时游戏结束
游戏模式:
- 双人对战:本地多人
- 对战 AI:简单(随机)、中等(基本策略)、困难(最优选择 + 重投)
注意: 此游戏目前处于开发阶段。核心机制已实现,但可能有未完成的功能或视觉打磨。
特性(已实现):
- 6 种独特骰子类型(标准、攻击、防御等)
- 8 种场地效果(奇数加成、偶数加成、连击、双倍伤害等)
- 骰子重投系统(每次攻击最多 2 次)
- 生命条可视化
- 战斗日志与回合历史
- 伤害显示动画
- 骰子选择和确认界面
| 游戏 | 截图文件 |
|---|---|
| 猜数字组合 | arts/hnb.webp, arts/hnb_leaderboard.webp |
| 游艇骰子 | arts/dices.webp |
- 猜排列
- 2048
- 播棋
- 红心大战
- 骰子对战
- Flutter SDK: 3.27+ (安装 Flutter)
- Dart SDK: 3.11+ (随 Flutter 安装)
- 平台特定要求:
- Android: Android SDK, Java 17
- iOS/macOS: Xcode 15+
- Windows/Linux: Visual Studio Build Tools / Clang
-
克隆仓库
git clone https://github.com/z7workbench/minigames.git cd minigames -
安装依赖
flutter pub get
-
生成代码 (Riverpod 和 Drift 必需)
flutter pub run build_runner build --delete-conflicting-outputs
-
运行应用
flutter run
# Android
flutter build apk
flutter build appbundle # 用于 Play Store
# iOS
flutter build ios
flutter build ipa # 用于分发
# Web
flutter build web # 输出: build/web/
# Windows
flutter build windows
# Linux
flutter build linux
# macOS
flutter build macos# 代码生成监视模式(持续运行)
flutter pub run build_runner watch --delete-conflicting-outputs
# 在特定设备运行
flutter run -d android
flutter run -d ios
flutter run -d windows
flutter run -d macos
flutter run -d linux
flutter run -d chrome # Web
# 运行测试
flutter analyze
flutter test| 类别 | 技术 | 版本 | 用途 |
|---|---|---|---|
| 框架 | Flutter | 3.27+ | 跨平台 UI |
| 语言 | Dart | 3.11+ | 应用代码 |
| 游戏引擎 | Flame | 1.19+ | 游戏渲染与逻辑 |
| 音频 | flame_audio | 2.10+ | 音效 |
| 状态管理 | Riverpod | 2.5+ | 响应式状态 |
| 数据库 | Drift | 2.28+ | SQLite 持久化 |
| 国际化 | flutter_localizations | SDK | i18n 支持 |
| 存储 | shared_preferences | 2.2+ | 设置持久化 |
| 平台 | 状态 | CI/CD |
|---|---|---|
| Android | ✅ 完全支持 | GitHub Actions |
| iOS | ✅ 完全支持 | GitHub Actions |
| Web | ✅ 完全支持 | GitHub Actions |
| Windows | ✅ 完全支持 | GitHub Actions |
| Linux | ✅ 完全支持 | GitHub Actions |
| macOS | ✅ 完全支持 | GitHub Actions |
所有游戏均可离线运行 - 无需网络连接。
lib/
├── data/ # 数据层 (Drift 数据库)
│ ├── database.dart # 主数据库类
│ ├── tables/ # 表定义
│ │ ├── game_records.dart
│ │ ├── game_settings.dart
│ │ ├── user_progress.dart
│ │ ├── yacht_dice_saves.dart
│ │ ├── twenty48_saves.dart
│ │ ├── hearts_saves.dart
│ │ └── mancala_saves.dart
│ └── daos/ # 数据访问对象
│ └── providers/ # 数据库 providers
│
├── games/ # 游戏实现
│ ├── hit_and_blow/ # 猜数字游戏
│ ├── yacht_dice/ # 游艇骰子游戏
│ ├── guess_arrangement/ # 猜排列游戏
│ ├── twenty48/ # 2048 益智游戏
│ ├── mancala/ # 播棋游戏
│ ├── hearts/ # 红心大战卡牌游戏
│ └── dice_battle/ # 骰子对战 RPG
│
├── ui/ # 共享 UI 层
│ ├── screens/ # 应用页面 (首页、设置)
│ ├── widgets/ # 可复用组件
│ │ ├── game_card.dart
│ │ ├── wooden_button.dart
│ │ └── wooden_app_bar.dart
│ └── theme/ # 主题系统
│ ├── app_theme.dart
│ ├── wooden_colors.dart
│ ├── starlight_colors.dart
│ ├── forest_colors.dart
│ ├── theme_colors.dart # 主题感知扩展
│ └── theme_provider.dart
│
├── l10n/ # 国际化
│ ├── app_en.arb # 英文
│ ├── app_zh.arb # 中文
│ └── generated/ # 生成的本地化文件
│
├── providers/ # 全局状态 providers
├── models/ # 共享数据模型
├── utils/ # 工具类
└── main.dart # 应用入口
三层架构:
- 数据层 (
data/): Drift 数据库、表、DAO 用于持久化 - 游戏层 (
games/): Flame 引擎、游戏逻辑、AI 系统 - UI层 (
ui/): Flutter 组件、页面、主题系统
本应用支持 3 种配色方案 × 2 种亮度模式 = 6 种主题组合:
| 配色方案 | 浅色模式 | 深色模式 |
|---|---|---|
| 木质 (Wooden) | 暖木色调(卡其色、棕色) | 深胡桃色(深棕、乌木) |
| 星空 (Starlight) | 柔和紫色、天蓝色 | 深紫色、深蓝色 |
| 森林 (Forest) | 柔和绿色、薄荷色 | 墨绿色(深森林色) |
开发组件时,务必使用主题感知颜色,通过 context.theme* 扩展访问:
import 'package:flutter/material.dart';
import '../../ui/theme/theme_colors.dart';
class MyWidget extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Container(
// ✅ 正确:自动适配木质/星空/森林 + 深色/浅色
color: context.themeBackground,
child: Text(
'你好',
style: TextStyle(color: context.themeTextPrimary),
),
);
}
}| 扩展属性 | 用途 |
|---|---|
context.themePrimary |
主色(AppBar、主要按钮) |
context.themeBackground |
背景色(Scaffold) |
context.themeSurface |
表面色(卡片、容器) |
context.themeCard |
卡片背景 |
context.themeAccent |
强调色(图标、高亮) |
context.themeTextPrimary |
主要文字 |
context.themeTextSecondary |
次要文字 |
context.themeBorder |
边框色 |
context.themeOnPrimary |
主色上的文字/图标(AppBar 图标) |
context.themeSuccess |
成功/正面颜色 |
context.themeError |
错误/负面颜色 |
context.themeWarning |
警告颜色 |
// ❌ 错误:这会破坏星空/森林主题
Icon(Icons.settings, color: WoodenColors.accentAmber),
// ✅ 正确:适用于所有主题
Icon(Icons.settings, color: context.themeOnPrimary),以下组件已正确适配多主题:
WoodenButton- 按钮(primary、secondary、accent、ghost 变体)WoodenAppBar- 应用栏GameCard- 游戏卡片ThemeToggle- 主题切换控件
欢迎贡献代码!请遵循以下指南。
- Fork 仓库
- 创建功能分支:
git checkout -b feature/amazing-feature - 按照现有模式进行修改
- 运行测试和检查:
flutter analyze && flutter test - 使用 Conventional Commits 提交
- 推送:
git push origin feature/amazing-feature - 创建 Pull Request
- 文件命名:
snake_case(如game_records_dao.dart) - 类命名:
PascalCase(如GameRecordsDao) - 方法/变量:
camelCase(如getHighScore) - 私有成员:
_prefix(如_database) - 提交前运行
flutter format .
<类型>(<范围>): <描述>
类型: feat, fix, docs, refactor, test, chore
范围: game, ui, data, i18n, theme, deps
示例:
- feat(game): 添加红心大战 AI 困难难度
- fix(data): 修正最高分计算
- docs(readme): 添加安装章节
- refactor(ui): 将主题颜色提取为扩展方法
- 创建游戏文件夹:
lib/games/<game_name>/ - 实现:
- Provider (Riverpod 状态管理)
- Screen (主游戏 UI)
- Models (游戏状态、数据结构)
- Components (可复用组件)
- AI (如需要: easy、medium、hard)
- 在
lib/models/game_type.dart的GameType枚举中添加 - 更新
lib/ui/screens/home_screen.dart导航 - 在
lib/l10n/app_en.arb和app_zh.arb添加本地化字符串 - 如需存档系统则创建数据库表
- 更新此 README
本项目采用 MIT 许可证 - 详情见 LICENSE 文件。
版权所有 (c) 2021 ZeroGo Yoosee
- 灵感来自 Nintendo Switch 的《世界游戏大全51》
- 使用出色的 Flame 游戏引擎构建
- 感谢 Flutter 和 Dart 社区
- AI 算法改编自经典博弈论实现
用 Flutter & Flame 以 ❤️ 制作
