遊戲中,常常有這樣的提示「需要完成某主線任務才開放此模組」,這樣的功能如何實現。
比如,玩家需要完成代號為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 == 0 無許可權 判斷是否有**模組 許可權7&2 判斷是否有酒館模組許可權 7&1
與運算實現許可權控制
與運算 計算方法 參與運算的兩個資料,按照二進位制位進行 與運算 運算規則 0 0 0 0 1 0 1 0 0 1 1 1 即 兩位同時為1,則值為1。否則為0 例如 6 7 110 111 110 6 8 3 1000 11 0 0 十進位制轉化成二進位制 整數 看圖現有許可權id父級選單 子選單...
與或非 和 邏輯 與或 運算
謹記 與或非是針對二進位制進行計算的,邏輯與和非是針對事件真假進行計算。二進位制的 與 運算a ba b00 0100 0101 11 二進位制的 或 運算a ba b00 0101 0111 11 二進位制的 非 運算a a0 1127 128 1211 邏輯 與 運算 事件 a 事件 a 事件 ...
(與運算) (或運算) (異或運算)
即 兩個運算元同為 1 的時候為1 0 0 0 1 0 1 0 1 1 1 1 1 即 兩個運算元中至少有乙個為 1 的時候為1 0 0 0 0 1 1 1 0 1 1 1 0 即 兩個運算元不同的時候為1 運算規則 1 0 0 1 即 對乙個二進位制數按位取反,即將0變1,1變0。將乙個運算物件的...