制作一个Decentraland 的象棋棋盘 PART 2
上回说到用 Decentraland SDK 制作一个象棋棋盘的场景
还没看之前的帖子的, 可以去看 Part 0 和 Part 1
Part 0 : 尝试使用 Decentraland SDK
模型建好后,接下来就可以implement 象棋的逻辑。 这是因为棋子可以走动的范围必须符合棋规,然后要有办法判断绝杀了没有。
首先我到 Github 去找看有哪些现成的代码可以直接使用,然后就找到了这个由 LengYanYu258 开发的 xiangqi.js
https://github.com/lengyanyu258/xiangqi.js
这个象棋引擎已经包含了各种检查, 包挂棋子下一步可以活动的范围,绝杀,长将,长抓等等。
不过,这个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 的简写 。
所以这个字串就已经涵盖了整个棋局的状态。 图里用的字母 H (Horse) 有些则是用 N (Knight) ,
相/象应该是 B (Bishop) 图里用的是 E (Elephant) 。 我是根据 xiangqi.js (N 和 B)的用法 。
后面还有一个字母是表明现在是轮到谁 (r 或 b ) 还有一些为了配合西洋棋的格式的place holder。
可以把这个 string 字串放到 memcache 就可以随时读取棋局状态了。
暂时就说到此, 其他的改天在说 。
谢谢阅读。
Leave 制作一个Decentraland 的象棋棋盘 PART 2 to:
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
- 收藏 POAP NFT
- 在 Decentraland 上给Hive.blog 刷存在感
- 参加了Decentraland GameJam 2020 游戏制作赢了一些奖金
- 第二个上Metazone 的游戏。有Youtuber到此一游
- 把本地电视台在Decentraland场景里的电视屏幕播放
- 尝试写一个跑马游戏
- 尝试制作篮球游戏
- 写好游戏放到 metazone 贩售
- 尝试做一个桌球游戏
- 尝试做一个弹珠台 (Pinball) 的游戏
- 一人一款怀旧游戏 | Habbo 旅馆
- 尝试把建好的游戏Deploy到Decentraland的土地
- 尝试做BomberMan游戏 Part02, 制作炸弹和爆炸效果
- 尝试制作 Bomber Man 游戏
- 用 Decentraland SDK 制作一个多人连线扑克游戏
- 制作一个Decentraland 的象棋场景 PART 3 多人连线
- 制作一个Decentraland 的象棋场景 PART 3 多人连线
- 制作一个Decentraland 的象棋棋盘 PART 2
- 用Decentraland SDK制作一个可以互动的场景
- 尝试使用 Decentraland SDK