我正在制作一个带有windows,c ++的客户端和服务器
我决定的设计是
服务器只是发送客户端必须呈现的内容取决于客户端的发送消息。
可以在客户端绘制各种图块和对象,图片,线条,矩形,圆形
并且客户端只是从服务器接收命令并呈现某些内容
如果服务器发送消息,如“draw picture.png srcX srcY width height destX destY”。 (picture.png在客户端) 然后客户端只解析字符串并执行我想要的操作。
但是。 我也想发送一个控制信号
如下所示 “for(y = 0; y< 30; y ++){for(x = 0; x< 30; x ++){draw tile.png 0 0 16 16 x * 16 y * 16}}”
我意识到sending a function is not a good idea (感谢所有回复。)
有什么好主意可以解决这个问题吗?
发送
“draw tile.png 0 0 16 16 0 0”
“draw tile.png 0 0 16 16 0 16”
“draw tile.png 0 0 16 16 0 32”
“draw tile.png 0 0 16 16 0 48”
“draw tile.png 0 0 16 16 0 64”
“draw tile.png 0 0 16 16 0 96”
“draw tile.png 0 0 16 16 0 112”
“draw tile.png 0 0 16 16 0 128”
“draw tile.png 0 0 16 16 0 132”
... 30 * 30时间会有点矫枉过正
我正在寻找有效的方式发送消息“客户必须绘制什么” 绘图不仅限于图块和对象,但它可能包含任何坐标上的绘图效果图片命令。
感谢阅读。
答案 0 :(得分:0)
定义语言,在客户端上实现解析器并将命令作为纯文本发送。 您必须在服务器中实现反向解析器以发送优化的消息。
答案 1 :(得分:0)
好吧,如果您不想发送和执行脚本,请尝试找一些简单的解决方案。例如,消息格式可以定义为:
draw file name srcX srcY width height destX destY [srcX srcY width height destX destY ...]
可能会应用某些优化,例如,您只能传递上一个和当前图像之间的差异:
draw tile.png 0 0 16 16 0 0 (5 16)
这意味着:将前一个数据包的成员#5增加16个。
我知道这很原始,但实施起来很简单。