游戏中,常常有这样的提示“需要完成某主线任务才开放此模块”,这样的功能如何实现。
比如,玩家需要完成代号为501220的主线任务时,才会开启战斗模块,需要完成代号为501221的主线任务,才开启贸易模块。
实现方式可以借鉴linux的权限管理系统来实现这样的功能。在linux中,查看这个文件的所有者的权限的时候可能是7 表示这个文件的所有者对这个文件可读(4),可写(2),可执行(1)。如下图:
(1表示有这个权限,0表示无这个权限)
从这个图可以看出,如果某个操作者对这个文件的权限是7,即二进制位111。那么,程序是如何根据二进制111来判断操作者对文件是否有可读,可写,可操作的权限的,又如何把可读,可写,可操作权限赋予操作者。
下面,我们解决第一个问题,以可读权限来说,如果操作者可以读取这个文件的话,那么 二进制显示为100,即十进制为4,这个时候,程序会读取操作者的权限代号,读取出来的是111,即十进制为7,把4和7按位与运算 100&111 根据计算结果判断是否有这个权限。
如果把读权限赋予某个操作者,使用或运算 100 | 000,结果为100,即有可读权限。根据这个原理,就可以实现我们需要功能:
开启战斗模块:4,开启贸易模块:2,开启酒馆模块:1,默认用户权限代号为0
开启战斗模块的 4 | 0 = 4 然后在开启贸易模块 2 | 4 =6; 接着开启酒馆模块 6|1=7; 最好用户的权限代码变成了7.
判断是否有战斗模块 权限7&4 判断是否有贸易模块 权限7&2 判断是否有酒馆模块权限 7&1
本文介绍了一种基于Linux权限管理系统的游戏模块解锁方法。通过使用二进制位运算,实现了只有完成特定任务后才能解锁对应游戏功能的机制。
597

被折叠的 条评论
为什么被折叠?



