tensaix2j avatar

制作一个Decentraland 的象棋棋盘 PART 2

tensaix2j

Published: 12 May 2020 › Updated: 12 May 2020制作一个Decentraland 的象棋棋盘 PART 2

制作一个Decentraland 的象棋棋盘 PART 2

上回说到用 Decentraland SDK 制作一个象棋棋盘的场景

image.png

还没看之前的帖子的, 可以去看 Part 0 和 Part 1

Part 0 : 尝试使用 Decentraland SDK

Part 1:用Decentraland SDK 建模

模型建好后,接下来就可以implement 象棋的逻辑。 这是因为棋子可以走动的范围必须符合棋规,然后要有办法判断绝杀了没有。

首先我到 Github 去找看有哪些现成的代码可以直接使用,然后就找到了这个由 LengYanYu258 开发的 xiangqi.js
https://github.com/lengyanyu258/xiangqi.js

这个象棋引擎已经包含了各种检查, 包挂棋子下一步可以活动的范围,绝杀,长将,长抓等等。


image.png

不过,这个library 是用Javascript 写的, Decentraland 只能跑Typescript 的代码。 虽然Typescript 是 Javascript 的 Superset , 但是我研究了很久还是迟迟无法直接使用。

研究了各种方法, 包挂在 tsconfig 开 allowjs, 加了各种 declaration file 什么 .d.ts 等等还是不行。

最后没办法的情况下, 我把整个 xiangqi.js 转成 xiangqi.ts 了。 大部分的代码不用从写, 只需要稍微的把它用typescript 的object oriented 的方式演绎出来就可以了, (例如加入this. 去各个instance variables 上) ,因为javascript 的 OO 写法 Decentraland貌似不能接受。

这个是原装的代码 ,这个是改过后的代码。 改成 typescript 后就可以在 Decentraland SDK 上用了。


研究过程里,我发现象棋或西洋棋要表达棋局的state 都是用一个叫 FEN 的字串来描述整个棋局 。 FEN是 Forsyth–Edwards Notation 的简写 。

image.png

所以这个字串就已经涵盖了整个棋局的状态。 图里用的字母 H (Horse) 有些则是用 N (Knight) ,

相/象应该是 B (Bishop) 图里用的是 E (Elephant) 。 我是根据 xiangqi.js (N 和 B)的用法 。

image.png

后面还有一个字母是表明现在是轮到谁 (r 或 b ) 还有一些为了配合西洋棋的格式的place holder。

可以把这个 string 字串放到 memcache 就可以随时读取棋局状态了。


暂时就说到此, 其他的改天在说 。

谢谢阅读。

Leave 制作一个Decentraland 的象棋棋盘 PART 2 to:

Written by

A Casual Coder / Crypto Trader / Game Developer / 3D Hobbyist

Read more #hive-105017 posts


Best Posts From tensaix2j

We have not curated any of tensaix2j's posts yet. But you can encourage our curation team to review posts by visiting them regularly and by referring other readers. Because we give priority to frequently read content.

More Posts From tensaix2j