自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(24)
  • 资源 (1)
  • 收藏
  • 关注

原创 前言:在学习本专栏之前

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

2020-09-22 12:04:26 514

原创 动手之前要做的事:梳理开发环境

这一系列课程既然是实录,那么我们将从创建项目开始,然后一步一步地根据实际开发的过程推进,直至项目目标达成!在这之前,需要请先确认开发环境。确认开发环境教程中,我们作示例的开发环境如下:macOS Catalina 10.15.3, running on Macbook Pro 2017Flutter 1.15.18, base on Dart 2.8.0主力开发工具:VSCode 1...

2020-09-22 12:04:25 254

原创 先画它一个棋盘:绘制棋盘 Board

这一节作为将这一系列课程真正的开始!当然我们肯定不是要创建什么 HelloWord 的啦。象棋游戏在 AppStore 中的游戏主要分类是什么 — Board 类!Board 是棋类游戏的主要关注点。这一节开始,我们将以上一节创建的项目 chessroad 为基础,使用 Canvas 绘制的我们的棋盘 Board。本节目标为了适应各种各样的屏幕,我们绘制棋盘没有使用图片资源,全部使用 Can...

2020-09-22 12:04:23 1397

原创 战场怎能缺少兵卒:棋子的绘制

上一节我们完成的棋盘的布署和绘制,棋子自然是接下来的重要内容了!CustomPaint 可以将绘制内容分成背景和前景两款部分,上一节中,我们在 CustomPaint 中将 painter 指向了我们的 BoardPainter 对象,它正是用来指定背景 Painter 的。本节提要思考棋子与棋盘的关联讨论象棋「局面」的表示方式使用 Canvas 绘制各个棋子规划局面的管理工具类应...

2020-09-22 12:04:21 335

原创 支持行棋动作:处理移动棋子和吃子逻辑

上一节,我们的棋盘棋子都非常漂亮地呈现在屏幕上了,但还不支持走棋动作。这一节,我们要记让棋子可以支持行棋动作,这将依赖于手势检测 Feature。检测到用户点击后,我们将结合棋类游戏的棋子移动方案,处理移动棋子和吃子逻辑。本节提要检测棋盘点击事件将点击坐标换算成棋盘上的棋子位置谁是棋盘点击事件的接管者处理行棋和吃子逻辑检测棋盘点击在 Flutter 中,要检测用户的点击、长按、...

2020-09-22 12:04:20 277

原创 实现游戏骨架:添加基本的界面元素

到目前,我们的「棋路-中国象棋」游戏已经有些眉目了!为了不至于太紧张,在做了一大堆复杂工作后,现在是做点轻松且有成效的工作的时间了!本节让我们来给象棋游戏添加基本的界面元素!本节提要添加游戏主菜单页布局对战页面配置全屏/竖屏模式讨论不同屏幕的适配我们将在游戏中使用全屏界面,考虑到目前手机中有大量的刘海屏存在,所以我们再 ChessroadApp 中定义一个状态栏高度的命名常量,游...

2020-09-22 12:04:18 211

原创 挑战云主机战:学习使用云端服器象棋云库

象棋游戏总是需要人和电脑之间进行对战的,毕竟象棋就是一种双向对抗游戏!一般来说,象棋人机对战需要实现一套人工智能的算法来为电脑侧的 NPC 提供着法选择。「棋路」中国象棋当然需要人机对战,人和手机 AI 对战的部分,我们将在后续章节中详细介绍!但在这之前,我们来点狠货 — 让人来挑战我们的云端服器 — 象棋云库。相对于普通人类玩家,象棋云库是强大的,它几乎是一个不可战胜的对手!会有些复杂的工...

2020-09-22 12:04:17 3629

原创 确保着法合规:象棋通用规则解析

到现在为止,我们的象棋游戏能支持玩家与云库引擎正常地交替下棋了!但现在的游戏没有细致的规则限制,玩家可以不按照中国象棋的规则行棋。本节我们需要限制用户的行棋动作,遵循象棋游戏的通用规则。本节概要中国象棋游戏规范介绍实现可行着法枚举工具类实现着法合法性检查工具类应用着法合法性检查中国象棋游戏规范中国象棋游戏规范知道大家都不爱看文档,所以我简单地把行棋的规则和一般的输赢判断规则列举...

2020-09-22 12:04:15 523

原创 检查对战结果:实现胜负的逻辑

中国象棋游戏的胜负判断非常复杂,以至于象棋游戏的裁判都需要进行等级考试!通常来说,人机对战的胜负判断要比真实比较比赛的裁判简单很多。在人机对战游戏中,我们要实现的逻辑是有限的:如果 A 方行棋后,无论对方走什么棋,下一步都能吃掉对方的老将,则可判断 A 方获胜如果 A 方行棋后,对方无棋可走,则可判断 A 方获胜如果 A 方连续将军,造成三个连续的重复局面,则判断 A 方败阵无吃子超过...

2020-09-22 12:04:14 235

原创 提升体验:为游戏添加声色

经过之前的持续努力,我们有了一个可以正常对战、且规则完备的象棋游戏了!但要做为放在市场上的的一个有一定竞争力的游戏,体验还不能达标 — 太安静了、太朴素了!本节我们来提升游戏的综合体验!本节概要导入音乐/图片设计资源美化主菜单页面象棋游戏中动效实现实现音效和音乐播放Flutter 图像资源的组织我们先来配置一下游戏中需要使用的图像资源。为了方便大家跟随课程做试验性开发,我们...

2020-09-22 12:04:12 275

原创 实现真正的「人机」对战:引入三方 AI 引擎

引入三方 AI 引擎前边,我们实现了与云库对战的象棋游戏。这一节中,我们将开始实现真正的「人机」对战 — 人与手机 AI 之间对弈;实现一套象棋 AI 工程浩大,这个工作我们后续文章会做一番介绍。现代软件工程并不主张每个人都「造轮子」,因此我们要有「站在巨人肩膀上」的小智慧。本节概要从 github 寻找开源中象引擎梳理引擎接入的思路寻找适合的开源中国象棋引擎github 上有大...

2020-09-22 12:04:11 642

原创 规划引擎工作模式

本节概要重构游戏的现有引擎结构规划游戏的 Flutter 层与原生引擎之间的接口提前解决启用开局库的问题实现 Flutter 层面的引擎封装「单机对战」和「挑战云主机」两种游戏模式都是处理人机对弈的场景。我们计划在两种场景使用相同的 BattlePage 页面,仅配置不同的 AI 引擎。调整引擎组织方式我们之前已经存在 CloudEngine 了,它和本地引擎将有一些不同的实...

2020-09-22 12:04:09 278

原创 封装 iOS 原生引擎

凡使我痛苦者,必使我强大!上一节、这一节以及下一节,我们正在面对本系列教程中最复杂的任务!不要放弃,黎明在望!本节概要调整引擎代码理解引擎工作模式添加引擎协作工具类与引擎对话在 Method Channel 中控制引擎调整引擎代码回顾上一节中,我们解决 Flutter 一侧的工作, 现在面对的任务其实很清晰,在 iOS 和 Android 两端封装 eleeye 的引擎,并...

2020-09-22 12:04:07 296

原创 封装 Androd 原生引擎

到上了节为止,我们在 iOS 平台下封装了 eleeye 引擎,我们已经可以愉快地与 iOS 设备进行单机对战了。Android 和 iOS 两个移动系统,对于 C++ 原生代码的混编支持都比较友好,而且在进行 iOS 封装前我们已经对 eleeye 代码进行了必要的改造,这些改造对于 Android 都是同样适用的。本节概要修改 Android 包名添加原生的 Library 包装类...

2020-09-22 12:04:06 259

原创 记谱以提供悔棋功能

生命应张弛有度!前面连续三节课程中,我们进行了紧张的原生引擎封装工作,这一节我们来做一点轻松的内容!在与 AI 对战过程,人类玩家经常需要悔棋功能,这种让时间倒流的技能不会太简单的,这一节的任务就是让我们的象棋游戏支持悔棋!本节概要重构 Phase 类,抽取记谱功能依据棋谱记录添加悔棋逻辑显示对战着法的棋谱Phase 重构目前,在我们的 Phase 类中已经存在一些记录之前走棋过...

2020-09-22 12:04:04 186

原创 超神能力:云库局面分析

局面分析是一个让你可以「超神」的能力!一方面,有了局面分析功能,你下棋过程中像是有一个云服务器始终在给你支招。这很利于学棋者提升自己对局面的理解;另一方面,对于开局的某一个局面,可能让云端分析告诉你目前走哪了步比较好,主要的几种可靠招法的效果得多少分。本节概要添加 Flutter 版的 Toast 组件翻译中文行棋着法调用云库 API 分析局面呈现局面分析结果因为有「象棋云库」...

2020-09-22 12:04:03 2194

原创 为软件添加全网排行榜

在对战游戏中使用榜单,可以鼓励棋友与别人进行比较,从而激发他更多的提升自己的分数的热情。本节概要实现象棋游戏的积分机制上报玩家积分呈现玩家排行现在实现一个榜单,我们有三个方面的问题要面对:积分方案的设计服务端实现榜单查询云服务积分查询和上报对于我们目前阶段的中国象棋游戏,我们鼓励对战,这是我们游戏的主要内容。所以我们的积分体系中对在「单机对战」中获胜的事件、以及在「挑战云...

2020-09-22 12:04:01 141

原创 用 Koa2 实现后台服务

在前一节的排行榜实现中,我们使用了 Mock 数据,模拟了云端服务器的数据查询和提交。现在我们将在后端实现一个基于 Koa2 的 Web 服务器,由它来为我们 Flutter App 提供排行榜的 Web 服务接口。这样一来所有玩家看到来自全网的其它玩家排名的真实数据!本节概要Koa2介绍MySQL 数据库准备用 Koa2 实现排行逻辑在游戏中使用真实的排行数据我们的课程并非必需...

2020-09-22 12:03:59 732

原创 添加游戏设置

从游戏的完整性角度来说,我们还有一些工作要做。例如人机对战的难度,我们可以进行调节;背景音乐要不要自动播放,我们也需要设置;如果有人喜欢我们的游戏,想联系我们,我们应该有个关于页面让别人能找到我们。因此,我们需要给游戏添加一个设置页。本节概要实现本地配置的持久化工具实现设置页面在关于页面中获取版本信息和链接实现保存配置的工具类为了能让玩家的设置被保留起来,我们先在 lib/comm...

2020-09-22 12:03:57 438

原创 为上架作准备

经历了漫长的征程,我们即将到达到目的地!也好似种了一季的庄稼,终于到了收割的时节了!关于 Flutter 的 App 发布,官方其实有规范的文档可以参考的:打包并发布 iOS 应用打包并发布 Android 应用我们的游戏在这一块也不怎么特别!我们顺着文档一步一步地往下走!本节概要准备 iOS 发布准备 Android 发布准备 iOS 发布我们从 iOS 应用开始吧!你先...

2020-09-22 12:03:56 121

原创 后记:作者有话说

为什么是 Flutter使用 Flutter,我高效地完成了「新棋路」的升级和完善!我几乎使用以前开发 iOS 的一个同体量的 App 的时间代价,完成了 Android 和 iOS 两个体验接近的 Apps。可以肯定,现在使用 Flutter 做跨平台的应用开是是正确的选择!回看使用 Flutter 开发这个过程,我有一些自己的体会。项目中体会到的 Flutter 优点Flutte...

2020-09-22 12:03:55 112

原创 中国象棋通用引擎协议 UCCI

概述中国象棋通用引擎协议 (Universal Chinese Chess Protocol,简称UCCI),是一种象棋界面和象棋引擎之间的基于文本的通讯协议。规范通用引擎协议 UCCI 协议,为棋软的 AI 引擎与界面分享提供标准接口,一些团队可以实现优美的界面,而另一些团队可以关注于 AI 引擎算法提升。中国象棋的软件理论主要参考了国际象棋,通用引擎协议也是这样。UCCI 参考国际象棋的...

2020-09-22 12:03:53 4632

原创 中国象棋游戏规范

象棋棋具棋盘棋子活动的场所,叫作“棋盘”。在方形的平面上,由九条平行的竖线和十条平行的横线相交组成,共有九十个交叉点,棋子就摆在交叉点上。中间部分,也就是棋盘的第五,第六两横线之间未画竖线的空白地带称为“河界”。两端的中间,也就是两端第四条到第六条竖线之间的正方形部位,以斜交叉线构成“米”字方格的地方,叫作“九宫”(它恰好有九个交叉点)。整个棋盘以“河界”分为相等的两部分。为了比赛记录和学习...

2020-09-22 12:03:52 657

原创 FEN 局面表示

简述FEN (Forsyth-Edwards Notation) 是专门用来表示象棋局面的记录规范,在这个规范下,一个局面可以简单地用一行“FEN格式串”来表示。FEN 由有限的几个字母、数字和符号组成一个字符串,便于传递棋局局面信息。  FEN 格式规约FEN 局面表示来源于国际象棋,在中国象棋的 FEN 局面记录中延续了国际象棋的规则,另有一些变通。国际象棋的 FEN 串由 6 段 ...

2020-09-22 12:03:50 2046

java轻量级ORM实现-jorm (Just ORM)

This project is based on Java, is a lightweight ORM model. Only concerned about the Object-Relationl Mapping, therefore more simple and easier to use, easier to control. Key support functions and features: Object-relational mapping; Two kinds of mechanisms to automatically generate primary key (numeric field) value; Hibernate support, and a similar sample of queries; Support additional SQL clause, an extension of inquiries; Support for optimistic locking; A rich set of tools for SQL statements;

2010-01-14

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除