lua项目思想日常解读【1】

[先说个前提哈,以上所说的都是在lua这门语言中,不同的语言有不同的处理技巧,不过话说回来,真正的这种面向对象的思维方式作为程序都是通用的,只不过是在不同的语言有不同的数据结构来支撑的实现而已].

今天再次看项目里面的现金赛代码,接着上篇提到的,我们是构造了一个完美二叉树的形,最开始我的比较初级(low)的想法的直接根据这个树的型(也就是指lua中的table的结构类型),即树的每个节点(table数据类型)一个大table包涵管理俩个人战斗的各种数据状态。
然后刚看了项目中的实现代码,发现上面的想法还是 too young too naive,实际上像如此大的数据状态的table需要存储管理的话,应该单独列一个模块出来处理,也就是在lua中的module ,然后里面内容也是包涵一个大table,加上各种实现处理的函数接口,调用

最后用一个全局函数OnNew () 如下 其实这个的思想也是使lua模仿c++的面向对象的编程思想来的

function OnNew()
    local b= class("BattleTree", battle_tree) --class函数是lua里面
    b:Init()
    return b
end
说明下 class()是cocos2d-x为我们封装的函数,本身Lua没有这个函数。
PS: 在Lua中类的概念就是table表,说白了,函数的代码功能主要做的就是对父类super的表进行拷贝,不必深究细节,会用就行,起码我在项目里面看到的使用calss函数就是只有复制拷贝这一个作用而已

然后再这个table实现一个OnCreate()方法 或者init方法 作用就是以初始化成员变量,完成一些数据的赋值。如下:

function battle_tree:OnCreateNode(node_id,node_level,node_no)
    self.node_id    = node_id
    self.node_level = node_level
    self.node_no    = node_no
    self.create_ts  = os.time()
end

然后这里就应该想到联系的问题了,这种思想是以完成了每个节点的俩俩人的一组对战状态的维护了,但是根据上面所说的比赛方式(32进16 - 16进8 - 8进4),我们还应该需要他们有关联的信息关系,而如何建立这种关系呢,就用到前面所建立的tree的信息了,主要就是dep 和num 这样能使他们有完善的联系,即给别人客户端也能根据这个num,dep所推出他们的各种节点的相关信息。

得有一个提供关联的SetRelation函数 如下:

function battle_tree:SetRelation(parent_node_id,lchild_node_id,rchild_node_id)
    self.parent_node_id = parent_node_id or ''
    self.lchild_node_id = lchild_node_id or ''
  
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值