我已经开始开发一个简单的 MUD(基于文本的多人地下城),其中客户端仅使用终端连接和播放。
但是我以不同的方式接近它,我希望玩家能够在房间 (x,y) 周围移动并查看房间的地图,如下面的屏幕截图所示
所看到的整个屏幕正在由服务器发送到客户端进行更新,例如:
有人搬家了,当前位置发生了变化,有人丢了东西,等等......
在屏幕的底部,有一个地方可以让客户端输入如下命令:
看,东,西,拿起,放下,库存,...
问题
然而,设计的问题是,当用户正在输入命令时,同时服务器已经更新了它的屏幕(有人移动了,或者生成了一些事件),他将失去他正在输入的命令,因为整个屏幕都得到了神清气爽。
如何将屏幕发送给播放器?
我在服务器端构建视图,当发送到客户端时,我使用 ANSI 字符:
- 清屏(\u001b[H\u001b[2J)
- 将光标定位在窗口的特定区域 (\033[....) 以绘制视图的特定区域
问题
是否有可能,当我向他们发送视图时,客户不会丢失他们的输入?
换句话说,是否有可能(可能需要一些 ANSI 代码?)当我在终端中输入某些内容并且同时如果我收到某些内容时,我的输入不会被新收到的消息破坏?
可视化问题:
好的:
from server: aaa
from server: bbb
> input
当前的:
from server: aaa
> in
from server: bbb
put