各位同行好,我是「棋路-中国象棋」App 的开发者贺照云。我喜欢中国象棋,一直希望在象棋传统文化的传承中做点什么。
早在 2007 年 Android 刚刚提供开发者工具的时候,我实现了一份 Java 版的「棋路」游戏;5 年后的 2012 年,我在 AppStore 上提交了基于 Cocos2d 的 iOS 版的「棋路」游戏;多年来棋路的用户累计超过了100万人。

「棋路」游戏一直有自己的风格——了解棋友的需要、注重体验!因此「棋路」积累了不少象棋爱好者,但因为工作关系,多年未更新棋路 App,许多棋友陆续对「新棋路」提出了建议和希望。
当我动了重新实现「新棋路」的心思后,一直在考虑用跨平台方式,实现在 Android 和 iOS 平台同步发布「新棋路」。
经过了一段时间的考量,我决定用 Flutter 这种 Google 推荐的全新框架来高效、跨平台地解决「新棋路」的开发需求。
初心
Flutter 出来不久,我开始了解和学习过一段时间的 Flutter,对其开发和运行效率是有信心的。所担心的是中国象棋游戏是一个复杂的项目,其中有不少界面外的需求,例如与原生 C/C++ 代码的融合、原生引擎对多进程/多线程的协作的实现、棋谱文件格式解析、音效等等。
这个过程应该有不少坑要趟~
但回头一想,Flutter 现在所处的阶段需要多一些的探路者,棋软也需要更多的开发者!我这一段趟塘坑经历,可能对 Flutter 推广、对 Flutter 或棋软的开发者有用!于是我就坚定了用 Flutter、并同步推出一系列 Flutter 中国象棋开发教程的意志。
为了帮助开发者了解象棋软件开发的基本知识,也为了给 Flutter 的初学者一份详实的教程,我打算把这个开发过程以「图文实录」的方式记录下来。
诚然,作为 Flutter 教程来说,市面上已经有很多的 Flutter 教程了。但我将以「一步一步」、「实录」的方式来向你展示 Flutter 在真实项目中的应用。
软件开发终究是讲究「手底下见正章」的,正是「行胜于言」!让我们远离教条,简单明快地在实践中提升开发技能!
我可以承诺,只要一步一步地跟随本专栏,你一定能做出「棋路」中国象棋,并超越它!
基于真实项目「棋路」的开发历程形成专栏,不是市面上的各种「HelloWorld」。
专栏内容包含其中的每一行代码,都得到了两次验证,跟随我们的专栏,定能达成目标。
真实项目环境中遇到的大量问题,专栏中都给出了实用的解决方案。
对开源的 C++ 引擎的包装和混编,有大量市面上找不到的经验和方法。
为什么应尽早学习 Flutter
这个世界已经有太多的框架,我们为什么需要学习一种新的?
简单点来回答这个问题——效率!
跨平台的解决方案,做一套应用,可以在 iOS、Android、WEB、MacOS、Windows 多端运行
基于 Dart 语言建立的原生绘图性能,超越 Hybrid 方案和其它 JS 翻译方案
调试期间的热加载,不需要每次都编译代码,能极大地提升开始发效率
更先进的界面布局理念,上手后做同样的界面花费的代价低于 iOS 或是 Android
掌握前沿的技术,顺应技术演进的趋势,抱紧 google 的大腿,现在就是上路的时候了!
现在学习 Flutter 的常见痛苦
看了官方的文档和教程,感觉是大师的理论堆砌,与手上的项目无法关联起来。
中文的 Flutter 教程也真不少,但都是一个一个的 Demo,没有深入的应用和讨论。
自己尝试使用 Flutter 开发时,遇到一些坑点时,无人帮忙,各种教程从未提到这些复杂场面。
我们的专栏中完整跟进了「棋路」象棋游戏在开发中遇到的各种问题,尝试解决问题的方式不限于 Flutter 或 Dart,而是实用为王。从真实项目的,你能得到语言或框架以外的经验和知识。
目标读者
现实当中,每一个真实产品的开发过程几乎不可能只使用一种技术、甚至一套技术栈!正是由于这个原因,许多开发人员学习了某种语言的一系列专栏、完成一系列专栏中的 demo 后,并不能实际完成公司或项目组交给的真实项目任务!这正是纯理论专栏的短板!
我们的专栏反映了真实项目的众多细节,中间的衔接与各种技术的综合运用来自于长期的项目实践!接近并学习这些知识,能快速地提升你独立完成真实项目任务的能力!
如果你是开发界的新兵,学习我们的专栏将助你在实际中学习 Dart/Flutter 综合应用能力,关键能提升你对互联网产品的整个生命周期的理解。
如果你已经是经验丰富的开发老兵了,跟随这个专栏你除了能学习到一些具体问题的解决方法外,还将学习到解决问题的更多思路、各种设计模式与开发的流程!
如果你是学生,将会发现这个专栏和你以前读到的各种课本完全不同,它实用而不教条!在带给你难得的项目实践经验的同时,也帮助你打开广阔的技术视野!

专栏涉及到的主要技术
以下的专栏中涉及到的主要知识点,以及推荐的学习资源:
Dart 语言知识
Dart 语言容易学习和使用,如果你学习过 C++ 或是 Java,学习 Dart 将非常容易和快捷。可以试看 GitChat 专栏 《Dart 入门实践》,你能在几个小时内掌握 Dart 语言的精义。
Flutter 开发技术
如果你有过 iOS 或 Android 的开发经验,亦或是你有 Ionic 或 Web 开发经验,则完全不用担心 Flutter 的入门问题。即使什么开发经验都没有,Dart 的入门也是容易的。使用中文的 Flutter 官方文档,是 Flutter 入门的好办法!
iOS 和 Android 开发基础知识
我们要做的是跨平台的游戏 App,对 iOS 和 Android 开发有基本的了解是很有帮助的,但这并不是这个专栏的前提!我们的专栏中除了单机引擎部分调用了 C++ 原生引擎、需要在 iOS 和 Android 平台上进行少量混合开发外,其它的内容都是在 Flutter 环境下实现的。即使你没有 iOS 和 Android 开发基础,跟着我们的专栏指示,你也能完成全部的开发任务。
Android 开发技术
C/C++开发技术
专栏中将使用 C++ 语言实现的人机对战引擎来做电脑端的大脑,如果有一定的 C++ 基础,将有利于你得更好地理解象棋对战引擎的实现原理。这当然不是学习这门专栏的前提。即使没有接触过 C/C++ 语言,你不会阻碍你顺畅地学习我们的专栏。
Nodejs / Koa 开发技术
Nodejs 技术栈非常流行,其生态也是枝繁叶茂!我们的专栏并不要求你掌握 Nodejs 技术栈的知识,但 Nodejs 学习和应用极简单明快,是我技术学习过程中最愉快的一段经历了!我推荐大家课后学习 nodejs 技术;作为一个现代的开发人员,不应该对如此活跃的一个生态一无所知。
不必担心自己尚未掌握这些技术点!我们专栏的每一个环节都呈现了可执行的代码和指令,这些代码都经过了作者的至少两轮从头到尾的验证!
只需要跟着专栏的脚步,一步一步地往下走,在实践中去做、去体会,理论正是来自于实践的!
实践中你将收获
跟随我们的专栏,实现中国象棋的游戏过程,你将学习到以下知识点:
Flutter 基础知识
组件及布局知识
手势检测
Http 通信
Canvas 绘制
Method Channel 与原生应用通信
动画技术要领
音乐、音效
用户本地配置解决方案
多种设备屏幕适配
象棋软件开发知识
象棋的基本规则
象棋着法枚举和有效性判断
长捉和胜负检测
FEN 局面表示
UCCI 引擎通信协议
XQF 象棋棋谱格式的解析
Native 开发知识
在 iOS 和 Android 中访问 Flutter 资源包
iOS 中 Object C 与 C++ 的混合开发
iOS 的多线程通信
Android 中 Java 与 C++ 通过 JNI 协同
Android 的多线程通信
产品设计知识
用户需求提炼
交互设计
一个完整的产品涉及到的细节比较多,有些特定场景到我们遇到时再和大家分解。现在订阅专栏,让我们一起掌握用 Flutter 打造游戏 App 需要的全部技能吧!
即日起至 5 月 9 日,专栏《实战 Flutter 象棋:从零到上架》限时特惠!