上周为了处理一个 eaf-browser 里 focus 状态同步的需求(见 eaf 和 evil 的磨合 - #22,来自 twiddling ), 陆续看了小部分 eaf 代码,想着正好周末,要不趁热继续做一个 eaf/qt 的项目(还是想太多了),但 eaf 里已经实现了日常生活办公最常用的工具了,一下也想不起来还有什么足够简单又有用的应用能练手,于是就改变目标,写一个足够简单、没啥用但可能有趣,同时花的时间越少越好的项目。
我第一个想到的就是 2048 了,毕竟这游戏的简单和当年的流行程度令人印象深刻,想必也会有很多现成的实现,避免从头写,带着 “代码量少但 UI 不要太简陋” 的目的, 从 github 搜索到 GitHub - jingdao/2048-pyqt: clone of 2048 game on PyQt 后就开始改代码:
UI 、逻辑都没改(改了或许就不叫 2048 了),花时间最多的环节是从 pyQt4 到 pyQt6 的迁移, 很多常量的接口有变化,得一个一个查文档改。但由于 “代码少” 的要求,这游戏总的也就 200 行,因此没有太过于折腾。其次是把所有需要鼠标点击的控件都删了,改成键盘控制,还有就是一些奇怪的布局上的问题,总的还是花了大半天 - -!
效果就上图所示了,hjkl 和方向键控制上下左右, 按数字后再按 r 是启一个新的布局重新开始游戏(数字只支持两位,表示行列数)。
也可以本地 python buffer.py num 直接运行,参数是格子行列数, 要在 emacs eaf 跑则将代码放到 eaf/app 目录下,见 readme 。
总的来说这完全就是改 QT6 代码,emacs 只是作为启动器和环境,把按键默认传过去
另外 emacs 里当把 gridsize 设置很大时,比如 20x20,没法及时刷新布局,不清楚什么原因,但谁会去玩 20x20 的 2048? 3x3 的都不玩了