字符界面的中国象棋

一个小建议:可以考虑下 https://github.com/casouri/valign 这样的处理方式,用实线代替虚线。

车马相士将炮兵刚好可以对应键盘 CMXSJPB 选子

3 个赞

牛逼啊,有趣 :+1:

已经实现了走子/吃子规则,但将帅尚未实现不能见面的规则. 接下来的工作:

1 个赞

实现棋盘一般使用bitboard,不用二维数组.

参考:

https://github-wiki-see.page/m/yangboz/godpaper/wiki/位棋盘(BitBoard)

https://www.xqbase.com/computer/eleeye_struct.htm

1 个赞

就高性能搜索才需要 bit encoding 节约体积,不讲究的用 list of list 的都有

一开始不知道 elisp 有数组,所以弄成了 list 套 list,不过现在懒得改了,只要不做人工对战,光人工走棋这没啥性能要求.

有联机的功能吗?

应该不会有人想在 emacs 中联机玩象棋吧 :joy:

emacs用户可能愿意。 联机的话需要服务器吧,或者用区块链分布式点对点联机。

这个看起来还成了大工程,尤其想玩联机的话 :joy:

区块链象棋一般人玩不起吧…

联机我感觉比较那啥,还是先实现人机对战靠谱,起码不用人格分裂自己跟自己下了.

国际象棋是可以联机玩的,lichess平台提供了对战api,自己用emacs画好界面调api连上去就可以联机对战了

刚刚实现了保存和加载棋局.

elisp 干这事简直不要太爽,只要把棋局当前状态包裹成为一个 lisp 对象,然后直接将其按输出格式写到文件中就 OK,加载的话,就将文件内容按 list 的读入语法加载到内存就行.

保存棋局执行 chess-cn–save 命令,会保存棋局文件到变量 chess-cn–saved-dir 指定目录下,以时间戳为文件名并以 .chess 为后缀. 该文件内容就是一个 list 对象,人眼可读.

加载棋局执行 chess-cn–load 命令,选择棋局文件即可,默认展开到 变量 chess-cn–saved-dir 指定目录下.

棋步历史和悔棋也搞定了,悔棋命令 chess-cn–undo (暂未绑定快捷键)

已添加将帅不可见面的规则。

搞定了将军判断以及将死判断(胜负判决).

1 个赞

感觉联机还是很有用的,比如在手机上使用emacs时,把电脑端的整个emacs配置移到手机端没有意义,到了手机上就不想折腾了,只想放松玩下游戏……我刚刚实现了在手机上 联机使用org-mode

最后一步棋步突出显示