【发布时间】:2017-07-14 08:02:36
【问题描述】:
我已经开始开发一个简单的 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
【问题讨论】:
标签: c++ sockets terminal game-engine mud