铁血丹心

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

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

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

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

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

x
本帖最后由 btxdex 于 2018-10-20 15:36 编辑

这里介绍一个简单的直连实现玩家互联机对战。
首先假设两个玩家有另一交流渠道,约战,无作弊行为(双方不会修改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

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

传输代码
啊,请百度tcp socket编程。或者在最下面的链接读代码。

连接
tcp由于家庭路由器的存在(NAT),直连很难,需要公网ip(要会在路由器中设置转发)
这里基于这个原因写了一个kys-server做转发服务器
服务器收听连接,协议如下
玩家1,主动连接,输入自己的id(服务器检测是否存在),等待玩家2
玩家2,主动连接,输入对方的id
服务器确定双方存在后,负责转发两边的数据
代码
https://github.com/three0s/kys-server

后续工程
使用携带物品比较困难
服务器处理玩家1超时还比较垃圾,这是个tcp一直存在的问题,不好解决

代码
基于kys-cpp实现,采用asio作为网络库,代码已经进入kys-cpp主杆 https://github.com/scarsty/kys-cpp/pull/18

欢迎任何评论建议,对具体实现细节或demo等可以私信或者在巨基游玩讨论群(90455474)找到我。
(注:在下不发布exe,请自行编译或联系我,或找机器猫更新kys-cpp的exe)
【武侠.中国】铁血丹心论坛(大武侠):致力于推广和发展武侠文化,让我们一起努力,做全球最大的武侠社区。
可能是目前为止最好的金庸群侠传MOD游戏交流论坛,各种经典武侠游戏等你来玩,各种开源制作工具等你来实现你的游戏开发之梦。
发表于 2018-8-20 19:05 | 显示全部楼层
完成度???????????????
【武侠.中国】铁血丹心论坛(大武侠):致力于推广和发展武侠文化,让我们一起努力,做全球最大的武侠社区。
可能是目前为止最好的金庸群侠传MOD游戏交流论坛,各种经典武侠游戏等你来玩,各种开源制作工具等你来实现你的游戏开发之梦。
发表于 2018-8-20 19:11 | 显示全部楼层
无比强大
【武侠.中国】铁血丹心论坛(大武侠):致力于推广和发展武侠文化,让我们一起努力,做全球最大的武侠社区。
可能是目前为止最好的金庸群侠传MOD游戏交流论坛,各种经典武侠游戏等你来玩,各种开源制作工具等你来实现你的游戏开发之梦。
 楼主| 发表于 2018-8-20 20:33 | 显示全部楼层
guotong1988 发表于 2018-8-20 19:05
完成度???????????????

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

点评

带队群殴搞定  发表于 2018-8-20 22:14
【武侠.中国】铁血丹心论坛(大武侠):致力于推广和发展武侠文化,让我们一起努力,做全球最大的武侠社区。
可能是目前为止最好的金庸群侠传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 | 显示全部楼层
相当期待啊!
【武侠.中国】铁血丹心论坛(大武侠):致力于推广和发展武侠文化,让我们一起努力,做全球最大的武侠社区。
可能是目前为止最好的金庸群侠传MOD游戏交流论坛,各种经典武侠游戏等你来玩,各种开源制作工具等你来实现你的游戏开发之梦。
发表于 2018-8-21 14:14 来自手机 | 显示全部楼层
甭管主流lua版代码乱成啥jb样,我只想知道数据怎么做才能传输到对面谢谢

点评

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

点评

已经完全研究完了,甚至进入了kys-cpp主干,服务器也仍然在跑,只是没有exe面世而已  发表于 2018-10-20 07:12
【武侠.中国】铁血丹心论坛(大武侠):致力于推广和发展武侠文化,让我们一起努力,做全球最大的武侠社区。
可能是目前为止最好的金庸群侠传MOD游戏交流论坛,各种经典武侠游戏等你来玩,各种开源制作工具等你来实现你的游戏开发之梦。
发表于 2019-5-11 18:50 | 显示全部楼层
牛逼````````
【武侠.中国】铁血丹心论坛(大武侠):致力于推广和发展武侠文化,让我们一起努力,做全球最大的武侠社区。
可能是目前为止最好的金庸群侠传MOD游戏交流论坛,各种经典武侠游戏等你来玩,各种开源制作工具等你来实现你的游戏开发之梦。
发表于 2020-4-10 19:18 | 显示全部楼层
闻讯前来贺喜
【武侠.中国】铁血丹心论坛(大武侠):致力于推广和发展武侠文化,让我们一起努力,做全球最大的武侠社区。
可能是目前为止最好的金庸群侠传MOD游戏交流论坛,各种经典武侠游戏等你来玩,各种开源制作工具等你来实现你的游戏开发之梦。

本版积分规则

小黑屋|手机版|铁血丹心

GMT+8, 2024-11-21 21:02

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2021, Tencent Cloud.

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