铁血丹心

 找回密码
 我要成为铁血侠客
搜索
查看: 412|回复: 10

[C++复刻] 玩家互联机对战

[复制链接]
发表于 2018-8-20 12:14 | 显示全部楼层 |阅读模式

马上注册,结交更多侠友!

您需要 登录 才可以下载或查看,没有帐号?我要成为铁血侠客

x
本帖最后由 btxdex 于 2018-8-28 01:37 编辑

这里介绍一个简单的直连实现玩家互联机对战。
首先假设两个玩家有另一交流渠道,约战,无作弊行为(双方不会修改r数据,程序等)。

行动
首先我们需要传输一个可序列化的战场行动记录,即一个玩家的行动可以被保存下来然后传送到对面再重现一次。
机器猫老师的kys-cpp中有个AI_Action用于实现电脑行动,记录人物行动是移动还是攻击,走到那里,攻击哪里等。
基本完美符合需求。
  1.     struct SerializableBattleAction
  2.     {
  3.         int Action;
  4.         int MoveX, MoveY;
  5.         int ActionX, ActionY;
  6.         int magicID = 0;
  7.         int itemID = -1;
  8.     };
复制代码
具体流程
1. 跑集气条
2. 轮到玩家1行动,玩家1操作,玩家2等待
3. 玩家1将自己的行动记录传送给玩家2
4. 玩家2将行动记录在本机重现
5. 继续跑集气条回到1
选择tcp而不是udp的原因是,tcp比较方便。

握手
玩家1选择成为主机,玩家2输入玩家A的IP连接(固定端口)。
为了简化这里禁止使用物品,并且暂且限定双方只有1人出战
1. 出战角色,双方交换人物数据,然后创造一个类似沙盒的r数据环境。注意人物ID一般用作于下标,所以需要额外字段保存原ID做战斗特效等等的判断。
2. 随机种子,统一后两边随机结果全部一样。

连接
tcp由于家庭路由器的存在(NAT),直连很难。
解决方案0,玩家知道怎么在路由器中设置端口转发,这是最完美的
解决方案1,虚拟局域网软件。效果类似浩方vs对战平台等。但直接提供虚拟局域网的,国内这种软件没有,都是英文软件(ZeroTier, Hamachi等)
解决方案2,写个(代理)服务器
解决方案3,改用udp,再还是需要服务器打洞获取双方路由器转换后的端口
不解决只能局域网内连接。即便如此,主机方也要记得在个人电脑上防火墙让程序通行。

后续工程
选择多个角色参战,允许使用携带物品等等不重要的
服务器,进行简单的ID配对,tcp代理连接传递
验证数据和行动等等太麻烦,先不考虑

代码
基于kys-cpp实现,采用asio作为socket库,代码已经进入kys-cpp主杆 https://github.com/scarsty/kys-cpp/pull/18
(主流lua版由于代码太j8乱,请直接放弃。)

欢迎任何评论建议,对具体实现细节或demo等可以在巨基游玩讨论群找到我

更新
目前已经成功的搞了个转发服务器
连接协议如下
玩家1,输入自己的id
玩家2,输入对方的id
然后双方就连接上了
以后可以很容易再加入查看现在有那些玩家1等待连接
代码
https://github.com/three0s/kys-server


[发帖际遇]: btxdex在光明顶击退六大派,扬名武林,增加4 声望。 幸运榜 / 衰神榜
【武侠.中国】铁血丹心论坛(大武侠):致力于推广和发展武侠文化,让我们一起努力,做全球最大的武侠社区。
可能是目前为止最好的金庸群侠传MOD游戏交流论坛,各种经典武侠游戏等你来玩,各种开源制作工具等你来实现你的游戏开发之梦。
发表于 2018-8-20 19:05 | 显示全部楼层
完成度???????????????
【武侠.中国】铁血丹心论坛(大武侠):致力于推广和发展武侠文化,让我们一起努力,做全球最大的武侠社区。
可能是目前为止最好的金庸群侠传MOD游戏交流论坛,各种经典武侠游戏等你来玩,各种开源制作工具等你来实现你的游戏开发之梦。
发表于 2018-8-20 19:11 | 显示全部楼层
无比强大
[发帖际遇]: bt路遇太岳四侠拦路打劫,被对方的阵势吓住,乖乖交出6 银两保命。 幸运榜 / 衰神榜
【武侠.中国】铁血丹心论坛(大武侠):致力于推广和发展武侠文化,让我们一起努力,做全球最大的武侠社区。
可能是目前为止最好的金庸群侠传MOD游戏交流论坛,各种经典武侠游戏等你来玩,各种开源制作工具等你来实现你的游戏开发之梦。
 楼主| 发表于 2018-8-20 20:33 | 显示全部楼层
guotong1988 发表于 2018-8-20 19:05
完成度???????????????

单挑已经完成了,想测试可以联系我

点评

带队群殴搞定  发表于 2018-8-20 22:14
[发帖际遇]: 发现闯王宝藏后,侥幸躲过“雪山飞狐”,btxdex 九死一生揣了几块金银逃下山,赚到4 银两。 幸运榜 / 衰神榜
【武侠.中国】铁血丹心论坛(大武侠):致力于推广和发展武侠文化,让我们一起努力,做全球最大的武侠社区。
可能是目前为止最好的金庸群侠传MOD游戏交流论坛,各种经典武侠游戏等你来玩,各种开源制作工具等你来实现你的游戏开发之梦。
发表于 2018-8-21 00:09 来自手机 | 显示全部楼层
只能局域网???????????

点评

非也,解决方案0和1都可以绕过这个问题。黑山群,准备好了私聊我,我做主机,您可以连我  发表于 2018-8-21 00:25
【武侠.中国】铁血丹心论坛(大武侠):致力于推广和发展武侠文化,让我们一起努力,做全球最大的武侠社区。
可能是目前为止最好的金庸群侠传MOD游戏交流论坛,各种经典武侠游戏等你来玩,各种开源制作工具等你来实现你的游戏开发之梦。
发表于 2018-8-21 11:39 | 显示全部楼层
经测试效果不错,可以认为是里程碑突破。
【武侠.中国】铁血丹心论坛(大武侠):致力于推广和发展武侠文化,让我们一起努力,做全球最大的武侠社区。
可能是目前为止最好的金庸群侠传MOD游戏交流论坛,各种经典武侠游戏等你来玩,各种开源制作工具等你来实现你的游戏开发之梦。
发表于 2018-8-21 13:03 | 显示全部楼层
相当期待啊!
[发帖际遇]: 江东行者在回疆无意中捡到一张带血的手帕,被陈达海追杀,损失19 银两。 幸运榜 / 衰神榜
【武侠.中国】铁血丹心论坛(大武侠):致力于推广和发展武侠文化,让我们一起努力,做全球最大的武侠社区。
可能是目前为止最好的金庸群侠传MOD游戏交流论坛,各种经典武侠游戏等你来玩,各种开源制作工具等你来实现你的游戏开发之梦。
发表于 2018-8-21 14:14 来自手机 | 显示全部楼层
甭管主流lua版代码乱成啥jb样,我只想知道数据怎么做才能传输到对面谢谢

点评

可稍微学习一下TCP, 这个很简单的。就是一边开连接,一边连。读个例子就会了 https://blog.csdn.net/wxywxywxy110/article/details/78154435  发表于 2018-8-21 21:22
【武侠.中国】铁血丹心论坛(大武侠):致力于推广和发展武侠文化,让我们一起努力,做全球最大的武侠社区。
可能是目前为止最好的金庸群侠传MOD游戏交流论坛,各种经典武侠游戏等你来玩,各种开源制作工具等你来实现你的游戏开发之梦。

本版积分规则

关注论坛微信公众号

小黑屋|手机版|铁血丹心 ( 粤ICP备16123140号-1 )

GMT+8, 2018-9-24 10:01 , Processed in 2.320296 second(s), 20 queries , Gzip On.

Powered by Discuz! X3.3 Licensed

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表