Unity3D开发之游戏兑换码的分析设计以及生成

来源:互联网 发布:linux gpt分区格式化 编辑:程序博客网 时间:2024/04/23 17:55
原贴地址:http://gad.qq.com/article/detail/7159010
1、前言
  抛开引擎来说,其实对于很多游戏开发里有一个比较常见的模块就是兑换码功能。在入游戏开发坑之初,我也被要求过开发过一个这样的模块,然后我网上搜过好像也没有相关的文章,在这里打算把我个人对游戏兑换码的设计进行阐述,当然只是浅浅的见解,进一步的扩展还要根据项目自身进行,用Unity3D作为开发平台来说明罢了。
 
2、分析
  一个兑换码从生成到使用的过程大概是:生成 -> 加密 -> 兑换验证 -> 存储。下面我就以这几个步骤分别说说。           
生成 
   兑换码作为一串携带一定信息的字符串,我们以最基本的信息来对待,如果要相应的项目需求就自身进行扩展吧,这里一个兑换码包含了三个信息:渠道识别码+活动识别码+兑换码识别内容。这里的兑换码识别内容我用了时间戳来填充,到时候解密就可以根据这个时间戳来作为兑换码是否有效的一个基本要素了。兑换码位数方面,采取了 2+2+10=14的分布,大概是这样的一个排布:


  比如,应用宝代号为01,活动码为01,时间戳是现在(2016年4月24日17点34分00秒)1461490440,那可以得到的这一刻的兑换码就是01011461490440。
  同时,为了验证这个兑换码有效,那就必须验证这个兑换码是否在有效期内。为了同一个渠道商同一个活动码互斥,就可以从有效期的开始到结束这段时间内每增加一秒生成一个兑换码,这样算下来,以一个月30天的有效期为例,就可以生成 60*60*24*30 = 2592000个不一样的兑换码,对于一个渠道商中的一个活动来说,将近二百六十万个兑换码也差不多了,当然还可以根据实际来扩展。
 加密
  加密这部分网上就有很多的方法了,这里就不详细去说了,只要选一种自己觉得可逆的,别生成一些符号字符的就可以了,我还是推荐自己写个简单的对应算法就足够用了,让原本生成未加密的兑换码(0-9)的字符对应到(a-z,0-9)任意的组合码就可以看起来足够随机了。这里说说我的做法,由于我们只需要加密0-9的字符,那就是’a’的ascII码对应加10位、’z’的ascII码缩进去10位以内、0-9本身这三种范围我们都可以使用来对应了,然后再加上一些本身兑换码的移位或者换位,加密就足够用了。下面代码是我的一个简单对应关系,仅供参考。

  

  上面两个函数就只是个简单的对应,下图是同一个码加密前后的对应效果,当然我还加了随机大小写的功能进去:

                            
  我相信应该足够使用了。
兑换验证
  兑换验证这一步就包含了兑换码的位数、是否正确加密、能否正确解密、解密后的兑换码是否有效、有效的兑换码能兑换什么物品、兑换后的记录等等功能。这几步的验证并不麻烦,只要跟前面对应上就好了,记得要记录着此用户曾经使用过这一类型的兑换码就OK了。     
0 0