双链表运用于SLG游戏领土删减性能优化

在SLG游戏中,由于领土上限增加和玩家行为改变导致领土检查性能问题。原有算法在处理不相邻领土删除时造成服务器卡顿。通过引入双链表数据结构,优化领土增删过程中的相邻检查,实现一次性返回所有不相邻领土,显著提升了服务器性能,降低了运算压力。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

公司的SLG项目上线运行挺久的,军团领土这一块一直没大问题,大概玩法就是玩家可以创建军团,军团长可以在世界上创建军团基地,玩家可以占领相邻的格子,变为军团领土,增加所有军团成员的收益。如果放弃某个格子,或者由于被其他军团抢夺而失去,则会检查不与基地相连的领土,全部失去。

直到去年一月份一个大版本的更新:军团领土上限变多了很多,并且由于奖励的机制,玩家原本块状的军团领土变成了线条性。更新后玩家群反馈是不是无法操作,类似断网的体验。问题来了,那就开查根据服务器日志,很快定位到卡顿点:但军团失去领土,服务器会因为运算因为不相邻而失去的领土足足卡几秒。看了下现有的算法,伪代码还难以展现它的可怕之处,直接上核心代码(如下图),这函数本身就包含一次排序和多次的加减运算(幸好没有乘除,不然更卡),卡点在于要循环N次(N为领土数量)调用这个函数,每个格子都要检查一次是否相邻。

function LegionWorldMapHelp.CheckCoordConnectByList(nStartCoordX, nStartCoordY, nEndCoordX, nEndCoordY, tGridList)
	local nCalcTimes = 0	
	local nIndex = 0
	local tConnectList= {
		[1] = {nCoordX = nStartCoordX, nCoordY = nStartCoordY},
	}
	local tSortGridList = LegionWorldMapHelp.SortGridListByNearCoord(nStartCoordX, nStartCoordY, tGridList)--根据距离返回一个排序
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值