/co-mine

对战版字符扫雷 C-S结构 多人扫雷

Primary LanguageC++

对战版扫雷:填了大一时埋下的坑

当时C语言大作业做的这个,开题的时候,我说过自己可以做一个对战版的,现在大三了,在学习网络编程,回过头把这个坑给填了。


  • 程序主体:默认是使用53286作为端口
  • 保证第一次不会点到雷,但第一次排雷不能直接进行标记雷
  • 不同的用户使用不同的光标以及颜色来表示, 默认绿色光标是自己操作的
  • 由游戏发起人设置雷区:使用相同的随机种子
  • 使用优雅的关闭socket的方式:5s以后关闭
  • 根据操作的频率以及网络延迟,每一段时间更新一次位置,用来强制同步位置信息

程序框架图

程序框架


操作指南:

扫雷阶段的操作:(大写字母) A--点击,B-- 标记雷, JKLI分别对应左下右上移动

效果图:

单机模式:

单机模式

对战模式:

右侧的虚拟机里面设置了随机移动(为了展现效果),同时由于gif图压掉了一些帧,看起来要比实际的快

对战模式


暂未解决的问题

  • 同步 : 也就是网络延迟的问题, 在上图对战模式的最后可以看到已经出现了不一致的位置,有了解决思路,还没有写,具体可以看这里 co-mine_TODO
  • 通信协议设计的有问题, 或者说根本没有设计,扩展的话每次都需要改之中的一些代码,这部分代码设计的也不好
  • 如果两方同时点一个雷:
    • 对于两个用户来说,这个问题是(在我看来)不可解决的,或者说需要额外的判定机制
    • 对于C-S结构,可以由服务器进行判断结果,保证只有一个唯一的结果