当时C语言大作业做的这个,开题的时候,我说过自己可以做一个对战版的,现在大三了,在学习网络编程,回过头把这个坑给填了。
- 程序主体:默认是使用53286作为端口
- 保证第一次不会点到雷,但第一次排雷不能直接进行标记雷
- 不同的用户使用不同的光标以及颜色来表示, 默认绿色光标是自己操作的
- 由游戏发起人设置雷区:使用相同的随机种子
- 使用优雅的关闭socket的方式:5s以后关闭
- 根据操作的频率以及网络延迟,每一段时间更新一次位置,用来强制同步位置信息
扫雷阶段的操作:(大写字母) A--点击,B-- 标记雷, JKLI分别对应左下右上移动
右侧的虚拟机里面设置了随机移动(为了展现效果),同时由于gif图压掉了一些帧,看起来要比实际的快
- 同步 : 也就是网络延迟的问题, 在上图对战模式的最后可以看到已经出现了不一致的位置,有了解决思路,还没有写,具体可以看这里 co-mine_TODO
- 通信协议设计的有问题, 或者说根本没有设计,扩展的话每次都需要改之中的一些代码,这部分代码设计的也不好
- 如果两方同时点一个雷:
- 对于两个用户来说,这个问题是(在我看来)不可解决的,或者说需要额外的判定机制
- 对于C-S结构,可以由服务器进行判断结果,保证只有一个唯一的结果