本帖最后由 newstart 于 2023-7-9 11:27 AM 编辑
写在最前面的话
最早想要自己写MUD客户端的念头,还是在几年前。但前几年事情太多,人太忙,我记得自20年疫情之后,到今年年初就没有再登陆过北侠了。今年春节之后空闲一些,于2月分重启MUD客户端的计划。我翻了一下自己的提交记录,最早是2023年2月19日开始正式启动程序计划,4月9号实现第一个可实现基本功能的初始版本,然后边玩边修复客户端bug,到5月22号才形成基本完善的初始版本(也就是5月29日发布到github的0.05b版)。自2月19日启动项目以来,截止7月9日,已进行过225次提交和修改(在自建的git服务器上,未发布到github),才有目前的0.10b版状态。
在自己写客户端之前,我主要用过zmud和mushclient两个客户端,北大侠客行一直是用mushclient(玩的那会儿还没有mudlet)。我认为mushclient是一个功能非常强大的客户端,唯一缺点是不支持跨平台。由于工作原因,上班的地方不能上网,手机玩的话,确实没有特别适合的跨平台客户端(tintint++倒是支持,但一直不想重学然后重写我在mushclient里的所有python脚本),加上我是一个软件爱好者(当然现在岗位也不是程序员),所以决定自己干起,正好在游戏之中学习了。
因为我要综合平衡工作、生活、写代码、当然还有自己玩,所以整个更新节奏不会很快,但我认为我会一直更新下去的。感谢北大侠客行巫师团队的努力,北侠吸引我玩的动力,也是我不断更新完善客户端的动力 1. 需求、安装与运行 1.1 环境需求 PyMUD是一个原生基于Python语言的MUD客户端,因此最基本的环境是Python环境而非操作系统环境。理论上,只要你的操作系统下可以运行Python,就可以运行PyMUD。另外,本客户端的UI设计是基于控制台的,因此也不需要有图形环境的支持。 1.2 安装- 安装Python,这个就不讲了。如果不会python语言可以学,如果不会任何编程语言,用这个客户端可能还是有点难度。所以假设用户是会python的
- 安装支持包,pip安装即可, pip install prompt-toolkit pyperclip。理论上wcwidth和pygment包在安装prompt-toolkit时会自动安装(因为是依赖项),如果没有就自行安装。pyperclip是跨平台剪贴板的处理包,prompt-toolkit中默认使用了自己的InMemoryClipboard,但这个只能在程序内部复制,所以我使用了pyperclip,可以在操作系统中的程序间复制(此处备注:经测试,在华为鸿蒙系统的termux下,pyperclip包无法复制,因此在手机上的复制,请直接使用termux的复制功能)
- 获取PyMUD程序本体:(1)可以直接使用git从github上clone。命令行执行 git clone https://github.com/crapex/pymud.git (2)可以从github页面下载(3)可以从北侠论坛下载 https://www.pkuxkx.com/forum/thread-48138-1-1.html。后续考虑将PyMUD发布到pip上,到时候也可以直接pip install来安装了(暂时还没做)
1.3 运行在命令行下,PyMUD目录内,直接运行python pymud.py即可。linux下有时候python链接到python2,此时需要执行python3 pymud.py即可。
2. 目录文件结构及主要内容
git clone/论坛下载下来的程序本体一共10个文件(0.10b版),一个文件夹。
其中,screen_shot文件夹,是我在windows、ubuntu、以及华为手机(鸿蒙3.0)下的运行截图; LICENSE是GNU GPL V3协议;README.md是说明文件,都不是程序本体内容。 - settings.py 程序应用的配置文件(如何配置将在后面详述)
- pymud.py 主入口对象,PyMudApplication的实现,主要处理界面、菜单、快捷键、鼠标、会话管理等功能;
- extras.py 对prompt-toolkit库里某些类的继承修改,以适应东方字符的宽度、北大侠客行字符对齐、鼠标操作、显示的分屏处理等;
- dialogs.py 调用的各种对话框的实现(ui界面内容)
- protocol.py 处理Telnet协议,以及MUD的各种扩展协议(如MTTS、GMCP等)
- session.py 会话管理对象,每一个会话,就是一个角色的世界,所有会话处理,包括与protocol之间的交互、触发器、别名、变量等的处理均在此实现
- objects.py MUD基本对象,触发器、别名、定时器、命令等的实现类
- pkuxkx.py 这个文件不是程序的组成部分,只是使用pymud写的角色脚本的一个示例(如何写脚本将在后面详述)
3. 主要界面和操作
上图是主要界面,用1-7标注出7个主要内容,含义如下:
- 菜单栏,可以鼠标操作(手机上是触控),目前只有3个1级菜单(慢慢完善中)
- 多会话的显示和切换标签。多个会话时,每一个会话的名称会在此处,灰底亮字的是当前会话。颜色为绿色的表示当前会话处于连接状态,未处于连接状态的为白色(灰色)。可以直接单击会话名称切换会话。键盘的话,Ctrl+左右箭头可以切换
- 滚动条。滚动条是显示上半部显示的内容在全文中的位置。注意:这个滚动条只能看,不能点。上下翻页只能使用鼠标滚轮,或者PageUp\PageDown按键。鼠标滚轮是一次一行,键盘是一次一页(由于自动折行原因,滚动的时候可能不是正好这么多,这是prompt-toolkit的问题,还在完善中)
- 中间分隔线。当向上滚动或翻页的时候,会产生中间分隔线,此时上半部分不再滚动,下半部分持续滚动显示最新的消息(由于自动折行原因,显示可能会把最下面的行折行给漏掉,这是prompt-toolkit的问题,还在完善中)。取消分隔的话,可以向下滚动到底,或者Ctrl-Z快捷键取消(仿zmud操作)
- 命令输入行。命令输入行支持历史记录、以及基于历史记录的自动建议和自动完成。键盘上下方向键可以在历史记录中选择,键盘右键实现历史记录建议的自动完成。比如前面输入过ask pu about job,后面输入ask的时候,后面的 pu about job会以灰色显示(表示自动建议),只需键盘右箭头,即可完成输入。
- 状态栏,显示状态信息,目前只有会话切换、复制内容的信息会显示,可以通过app.set_status来设置显示的文字
- 状态栏(右),显示连接状态和连接时间。因为基于控制台的ui不是时刻刷新,因此链接的时间有时会滞后显示,看上去就是秒在跳动,不影响时间记录.
__________________________________________________________________________________________
PS:吐个槽,写这个好麻烦,论坛编辑更麻烦,我只能慢慢来写了。啥时候论坛能支持markdown语法解决啊...
|