“与”和“或”运算实现权限管理

本文介绍了一种基于Linux权限管理系统的游戏模块解锁方法。通过使用二进制位运算,实现了只有完成特定任务后才能解锁对应游戏功能的机制。

游戏中,常常有这样的提示“需要完成某主线任务才开放此模块”,这样的功能如何实现。

比如,玩家需要完成代号为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

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值