游戏中的角色名字长度
前两天又纠结了一波名字的问题,纠结的起因是,做csb的,在csb里面把玩家输入名字的Text作了个最多15个字符的限制,联盟名字限制7个字符(excuse,7?),然后程序中有一个宏是#define NAME_LEN 32
.然后就出了意料之外的情况:
- 中文名超过10字,就不显示了,因为超过了
NAME_LEN
,我在程序中用的是sprintf\_s
,所以显示不出来, - 刚好十个字,还是太宽了啊,有些csb显示不下
- 输入英文,联盟最多也只能7个字符,一个单词也写不下啊
在经过激烈讨论过后,居然把NAME_LEN
给改了,改到了100,限制还是15个字符,同时把csb的显示名字的地方改宽了。。。虽然能解决问题,我觉得这个非常非常不好,虽然只多了那么点内存..因为,我邮件里面也用到了这宏,如果改大了,一封邮件的体积就变大了不少,这样下去,浪费的内存就不少了
我的想法被说了NO,我表示很不服
csb还是要加宽.
我NAME_LEN
不变,还是32,然后我在输入的时候程序中处理,输入如果用UTF-8编码,那么就能准确得到当前新输入字(符)的中文还是英文,还是日语韩语啥的,也能知道这个字占了几个字符,然后用std::string::size()
知道总共占了多少个字符,只要不超过我的NAME_LEN
,我就继续读取玩家的输入.
这样的效果就是,你可以输入NAME_LEN
个英文,约NAME_LEN / 3
个中文(一个中文三个字节),解决了第1和3点.
如果硬要说我这方案被说NO的原因,好吧,其实是因为他们在担心阿拉伯语,一个文字要占5个字节,我那方案就只能输入6个阿拉伯文字.
对比之下,感觉他们浪费的内存有点多,邮件中有好多种邮件必须要存玩家名字.我的方案邮件体积小,但对不起阿拉伯的大爷们了(虽然我觉得玩游戏六个字够了)