标题: 谈谈三国游戏开发的变量名命名问题
性别:未知-离线 陈珺

Rank: 6Rank: 6Rank: 6
组别 校尉
级别 军师将军
好贴 5
功绩 26
帖子 927
编号 3820
注册 2003-12-27
来自 福建福州


发表于 2005-1-30 16:45 资料 个人空间 短消息 只看该作者
引用:
问:武力用wl变量名好吗?
答:不好。现在的语言,变量长度可以达到32位,基本上够你描述清楚一个比较复杂的问题,几个单词的容量还是够的,不怕麻烦,怕记不清楚.
我认为程序变量名有达到如下要求就够了,不要那么多:
1.好记好读
2.不混淆

我认为程序变量名不一定非要一大串的英文来命名,你试想如果一个变量名30个字符的,在一段程序中十几二十次用到这个变量名比起五六个字符的,是不是开发效率要降低很多?其实只要满足我上面所说的几个条件就够了,何必要那么复杂呢?
我们知道之所以不用拼音命名,是因为拼音容易混淆,可读性差,而英文的可读性好也好记,所以绝大多数的程序命名用英文.

但是,作为三国游戏来说,一个词比如武力,如果要真能表达它,不是power之类来表达的,万一以后又出现一个力量的属性怎么办?还要整个程序去大改吗?
因此,我认为在三国游戏开发开发的过程中,遇到武力智力之类的用英文命名,并不是明智之举,当然也不能用拼音命名了.需要建立一个专有名词英文对照表来,按专有名词英文对照表里面的名称来命名,但是在游戏中要加上相应的前缀,以免与游戏中其它的变量混淆.

专有名词英文对照表如下(一小点点):
武力-wl 智力-zl 政治-zz

看到这,有人就要问了,你这不是明摆着用拼音命名吗?我要说明的是,看wl,zl,zz等之类的时侯可以把这些看作专有名词看待.之所以这样命名是为了好记好写.当然不是所有的都这样命名,因为就会出现一些混淆的情况,比如:
魅力-ml 命力-?

这样就出现了拼音命名混淆的问题了,因为在游戏中魅力用得更多,所以魅力用ml,而命力用mn命名.虽然说mn跟命力没有什么关系,但是用得少,实在要用可以在专有名词英文对照表里面查.但我不否认这的确是这种命名的一个缺点.
但是这种命名与英文命名比起来,书写上就容易了很多,便于提高开发效率,也便于以后AI之类的算法研究(因为字母少表达这个意思的时间就少,使得更有精力去研究算法).而且还要说一点的是,一个三国游戏中的专有名词比如武力用英文有非常多种表达方式,因为程序员之间需要合作,那么就要统一这个变量名,但是可能程序员之间对武力这个词的英文表达不同,为了统一,程序员照样要去查,这个变量名怎么表达,也不能省下查的时间.

因此我认为,用专有名词英文对照表的方式虽然有缺陷,但跟长长的英文名命名比起来来说,还是好一些.当然这些专有名词英文在游戏中要加如a_之类的前缀以示区别.

当然最根本的,还是需要三国游戏制作者达成共识,制定出一个完整的专有名词英文对照表,如果遇到新名词还要补充.这样一来,一方面便于三国游戏制作者程序员之间合作(因为易懂变量名的意思),另一方面也便于研究算法(毕竟无论是打还是写wl总比武力来的简单吧)和交流(交流时侯打zl总比智力来得简单,这样有利于加快速度,传递更多的信息)
当然以目前的情况来说,大多数人可能还会不接受这样子做,但是随着时间的推移,逐渐就会流行起来的(就跟网络语的流行的一样的),如果是这样将能大大加快交流,同时也能免去硬记的麻烦.


顶部
性别:未知-离线 陈珺

Rank: 6Rank: 6Rank: 6
组别 校尉
级别 军师将军
好贴 5
功绩 26
帖子 927
编号 3820
注册 2003-12-27
来自 福建福州


发表于 2005-2-19 05:12 资料 个人空间 短消息 只看该作者
由于三国游戏会涉及很多中国古代文化的东西,不像软件制作都能有很多合适的英文对应词,所以需要制订一套专门的英文标识符来作为变量名。当然并不是所有变量名都要一套标识符(具体的会在跟贴说明)。
一、标识符
在制订标识符之前,先来确定几项内容:
1.制订标识符的变量名的范围:制订标识符是为解决某些变量没有合适的英文对应词而服务的,显然只有那些没有合适的英文对应词的变量才需要制订。不过像武力这类词可能可以用power命名,不过因为它属于三国游戏术语的范畴也采用标识符的做法。
2.标识符在程序中的应用范围:因为这些变量也是以前三国游戏制作者为了衡量某个量的大小增强这个游戏的游戏性引入的。所以这些变量主要是用在显示,储存和算法上。
3.标识符的变量名的分类:由上面可知,之所以这些变量,是为了在显示,储存和算法上提高开发效率和增强可维护性上。为了更好的达到这个效果根据在程序中用到的次数分为常用标识符和不常用标识符。对常用标识符的变量名更加简化以达到提高开发效率的目的。但是由于常用标识符与不常用标识符的不确定性,所有标识符应有常用标识符与不常用标识符两种情况的标识符形势)
二、常用标识符
接下来列举常用标识符(简称常标):(常标主要是出现在算法中)
制订原则:简洁(长度两个英文字母加上衡量的不同部分构成,衡量部分的字母为一个且为大写),易记读,不混淆
命名规则:
1.制订的都是原始变量,不包括导出变量(绝大多数属于临时变量)
2.临时变量在变量名之前加上"t_",导出变量在变量名之前加上"d_",若该变量既是导出又是临时在变量名之前加上"t_"。
3.几种常用的后缀(大写):MIN(最小值),MAX(最大值),AD(原因),DO(指令),表示状态词+T(状态),I(某个数字)。如果同时用到其中几个按这里的顺序依次结合(比如最大值指令,由于最大值在指令的左边,所以写作MAXDO)
4.分类的分类前缀应由一次分类前缀+二次分类前缀+...+N次分类前缀表示
5.如果一个变量既属于A分类又属于B分类,则以这两个分类的优先级为准,但是两个分类都要注明此变量(属于多个分类,同样的道理)
6.变量名的数据类型加在变量名的最后面(_数据类型英文简写名[大写]) 整数:N,浮点:F,字符:C,枚举:E,其中枚举类型中的枚举数据在两边加上“”,以示区别(变量名+_枚举+空格+枚举数据1+枚举数据2+...+枚举数据n)
衡量武将部分[J](根据不同的策划有所不同)---一次分类,一级优先
武力:Jwl
智力:Jzl
政治:Jzz
统率:Jts
声望:Jsw
义理:Jyl
生命力:Jsl
魅力:Jml
人名:Jrm
功绩:Jgj
技能:Jjn
        衡量武将部分的部队[B]---二次分类
        兵力:JBbl
        训练:JBxl
        纪律:JBjl
        士气:JBsq
衡量城市部分[C](根据不同的策划有所不同)---一次分类,二级优先
金钱:Cjq
粮食:Cls
人口:Crk
农业:Cny
商业:Csy
治水:Czs
民心:Cmx
税率:Csl
物价:Cwj
年:Cnf
月:Cyf
日:Crq
旬:Cxs
增长率:Czz
技能:Jjn
衡量势力部分[S](根据不同的策划有所不同)---一次分类,三级优先
友好度:Syh
声望:Ssw
技能:Jjn
衡量战争部分[Z](根据不同的策划有所不同)---一次分类,四级优先
暂无
不常用标识符(简称不常标)制订原则:易记读,不混淆
命名规则同常标
具体内容:略

附:
状态表示举例
所属势力能够从城池中收获粮食:ClsccshT
变量状态表示举例
某月农业值:CnyyfIT
注1:以上所有变量因为是三国游戏术语部分,为与非术语部分区别,在程序中统一加上前缀"sg_"
注2:以上部分前缀可用类代替


顶部
性别:未知-离线 金圭子

白衣伯爵中大夫

Rank: 14Rank: 14Rank: 14Rank: 14Rank: 14
组别 白衣卿相
级别 征西将军
好贴 4
功绩 265
帖子 4926
编号 27961
注册 2004-12-16


发表于 2005-2-21 09:45 资料 文集 短消息 只看该作者
这种变量命名法在1000行代码以上会有10%的概率出错。
如果用了类加20%概率,用了继承再加15%。


最后如果有10W行代码,N多类,N层继承,还用头文件,还有数据库中的名字也这么用。这么不出错是不可能的。



最最关键的是:这样一旦出错了,查都查不到…………
放心,我不会眼睁睁的看着你往火炕里面跳的;我会闭上眼的- -
顶部

正在浏览此帖的会员 - 共 1 人在线




当前时区 GMT+8, 现在时间是 2025-2-11 06:45
京ICP备2023018092号 轩辕春秋 2003-2023 www.xycq.org.cn

Powered by Discuz! 5.0.0 2001-2006 Comsenz Inc.
Processed in 0.013105 second(s), 10 queries , Gzip enabled

清除 Cookies - 联系我们 - 轩辕春秋 - Archiver - WAP