免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 33467 | 回复: 122
打印 上一主题 下一主题

[C] Lua 造成的代码冗余太严重了, 这个现状怎么改善? [复制链接]

论坛徽章:
5
技术图书徽章
日期:2013-08-17 07:26:49双子座
日期:2013-09-15 16:46:29双子座
日期:2013-09-25 08:17:09技术图书徽章
日期:2013-09-25 09:11:42天秤座
日期:2013-10-01 16:25:34
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2012-11-17 11:40 |只看该作者 |倒序浏览
本帖最后由 __BlueGuy__ 于 2012-11-17 11:55 编辑



这些 Lua 文件除了名称不一样,里面的代码完全一样,Lua 是这样灵活配置的吗 ?

论坛徽章:
5
技术图书徽章
日期:2013-08-17 07:26:49双子座
日期:2013-09-15 16:46:29双子座
日期:2013-09-25 08:17:09技术图书徽章
日期:2013-09-25 09:11:42天秤座
日期:2013-10-01 16:25:34
2 [报告]
发表于 2012-11-17 11:48 |只看该作者
最头疼的是副本、任务、活动, ...  

论坛徽章:
5
技术图书徽章
日期:2013-08-17 07:26:49双子座
日期:2013-09-15 16:46:29双子座
日期:2013-09-25 08:17:09技术图书徽章
日期:2013-09-25 09:11:42天秤座
日期:2013-10-01 16:25:34
3 [报告]
发表于 2012-11-17 11:51 |只看该作者
劝告大家远离那些 “!C 程序员”,    完全是一群累代码的机器

论坛徽章:
2
亥猪
日期:2014-03-19 16:36:35午马
日期:2014-11-23 23:48:46
4 [报告]
发表于 2012-11-17 12:35 |只看该作者
数学是计算机终极语言,你不是也用数学分析分析程序吗?你把这些文件里的东西全换成数字你就能看懂了。文件名也弄成数字,然后把文件内容和文件名放一起做数学分析,就分析出来了。
嗯。

论坛徽章:
5
狮子座
日期:2013-08-20 10:12:24午马
日期:2013-11-23 18:04:102015年辞旧岁徽章
日期:2015-03-03 16:54:152015亚冠之德黑兰石油
日期:2015-06-29 18:11:1115-16赛季CBA联赛之新疆
日期:2024-02-21 10:00:53
5 [报告]
发表于 2012-11-17 12:35 |只看该作者
自己抽象模型没有搭好,怪Lua…………

我们以前的Lua代码根本就没有重复的内容。重复内容全部被Lua库给完全包裹了。而且Lua的灵活性也不需要所谓“框架内容”。我遇到的几乎全部的Lua的问题,几乎可以表述为:“用写XXX语言的方式写Lua”,比如用写Java的方式写Lua,或者用写C++的方式写Lua,这些都是自找苦吃的典型。

论坛徽章:
1
射手座
日期:2013-08-21 13:11:46
6 [报告]
发表于 2012-11-17 12:55 |只看该作者
哈哈
抽象不足吧

论坛徽章:
5
狮子座
日期:2013-08-20 10:12:24午马
日期:2013-11-23 18:04:102015年辞旧岁徽章
日期:2015-03-03 16:54:152015亚冠之德黑兰石油
日期:2015-06-29 18:11:1115-16赛季CBA联赛之新疆
日期:2024-02-21 10:00:53
7 [报告]
发表于 2012-11-17 13:09 |只看该作者
本帖最后由 starwing83 于 2012-11-17 13:10 编辑

回复 6# egmkang


    看看那些名字吧……用汉语会死啊……指定一个命名规则会死啊……有模块机制会死啊……

只要有了模块机制,重复使用代码会死啊……

return require "shop"

任何文件就都只有这一行而已。

local replication = require "replication"
local M = replication:extend()

function M: onEnter()
   ...
end

...

return M

代码量会成倍减少。

甚至可以更短,连那个一行的文件都可以不要。引擎里面这么写:

function M.loadShop(name)
   if not M.exists(name) then
      return M.new()
   end
   ....
end

假设商店有编号,根据编号从数据库里面取对应商品。

local shop = require 'shop'
return shop.new "ID_xxxx"

怎么办呢?

非常简单!

-- 文件:data/ShopIDs.lua
return {
   ["岐山老店"] = ID_XXXXX,
   .....
}

-- 文件:lib/shop.lua
...
local shopIDs = require 'data.ShopIDs'
...
function M.loadShop(name)
    local ID = shopIDs[name]
    if ID or not M.exists(name) then return M.new(ID) end
    local shop require('shop.' .. name)
    return shop.new()
end
   

这都是非常简单的抽象。自己真的把脚本当作“Write-Only”的一次性用品,完全不考虑设计,最后又怪罪Lua不好,岂有此理?!

论坛徽章:
0
8 [报告]
发表于 2012-11-17 13:15 |只看该作者
用中文做文件名这个个人持保留意见,万一server无中文环境支持,那时候让你哭到死

我遇到的实际情况,很多这些脚本都出自非专业程序员之手,甚至很多是策划人员简单拷贝修改其他脚本后使用的~~

论坛徽章:
5
狮子座
日期:2013-08-20 10:12:24午马
日期:2013-11-23 18:04:102015年辞旧岁徽章
日期:2015-03-03 16:54:152015亚冠之德黑兰石油
日期:2015-06-29 18:11:1115-16赛季CBA联赛之新疆
日期:2024-02-21 10:00:53
9 [报告]
发表于 2012-11-17 13:16 |只看该作者
不是不能把脚本给苦力们码农们写。但是至少你们得先搭个葡萄架子,不然葡萄长歪了怎么办?你们又怪语言,怪码农,你们有没有怪过自己?

最开始的框架必须自己搭,搭到码农们只需要无脑将活动转换成代码即可。定期收取码农的意见,问问他们哪些东西重复劳动了。然后放到架子里面,让码农持续性修改自己的代码——反正码农工资低。码农自己改自己代码久了,就会小心的写了。搭架子的人要记住,码农们也许地位比你们低(也许还未必),但是他们是你们的“客户”,“客户就是上帝”!这样才能在密集劳动力的今天产生不至于是垃圾的代码!

古人都说过了“子不教,父之过”,“代码差,构架错”,就这么简单。

论坛徽章:
5
狮子座
日期:2013-08-20 10:12:24午马
日期:2013-11-23 18:04:102015年辞旧岁徽章
日期:2015-03-03 16:54:152015亚冠之德黑兰石油
日期:2015-06-29 18:11:1115-16赛季CBA联赛之新疆
日期:2024-02-21 10:00:53
10 [报告]
发表于 2012-11-17 13:24 |只看该作者
回复 8# liuspring6


    这些脚本是客户端运行的。客户端可以很容易让中文支持——只需要统一采用utf-8,并保证文件是字节流即可。这些代码不可能是散着放的,否则很容易被别人利用,那么文件名归结到底就是某种打包文件的文件名默认编码问题了。只要程序坚持写utf-8,打包文件能8bit-clean,就绝对没问题。

服务器也可能有这些脚本。不过服务器通常是Linux,8bit-clean,不怕中文脚本名。就算是Windows,也是确定的可以用Utf8做名字的(服务器的C++用W系列函数,或者名字过一道mbstowcs),这都不是问题。

之所以说中文文件名,是基于特定场景的——这一看就是中国风的游戏,很多名字根本无法翻译到英文——第一个副本貌似是“朝歌地牢”吧?《封神榜OL》?既然无法翻译成英文,要写非中文名的唯一办法就是汉语拼音了,这样很难维护的。还不如集中攻关解决一次文件名的问题,然后就统一中文了。从这个细节,可以看出公司的文化特征——是得过且过做事,还是追求完美?我们以前不用中文文件名,虽然也是中国风游戏,但是我们尽量不在文件名里面体现游戏内容——地名什么的。这些东西都被放到了游戏数据里,而不是程序逻辑里。我们将游戏严格划分为支持层,业务逻辑游戏数据三个层面,业务逻辑(即脚本层)是不知道游戏数据(即xml层)的任何细节的。自然也不可能用地名命名副本。归根结底还是设计问题。

但是,在游戏协议中还是会设计到一些很中国风的名字,比如“内力”“根骨”,我们都商量了合理的英文翻译,没有采用拼音。

不追求完美,做什么游戏?要圈钱不如去卖Y做鸭。上头的人要赚钱这没错,做游戏的人也这么浮躁,上面的怎么赚到钱?
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP