關于位運算,網上有挺多好的部落格介紹過,我就不多解釋了
這裡隻記錄一個小例子,是在了解位運算時候寫的,幫助自己加深一下印象,做個筆記mark一下
具體場景
搖骰子遊戲
1每個骰子有6個點,1-3為小,4-6為大,[1,3,5]為單,[2,4,6]為雙
2每次扔3個骰子
問題:如果把每場結果設成實體對象,那麼該如何設計呢?
其他的屬性就不過多糾結,主要在3個骰子這裡
不管是把骰子設成複雜對象,或者是把每個骰子的大小單雙分開記下來,都會顯得很麻煩
如果使用位運算,就會變得簡單許多,代碼如下:
1 public class GameResult
2 {
3 //第一個骰子
4 public int FirstDiceValue { get; set; }
5 public Mode FirstDiceMode { get { return SetModel(FirstDiceValue); } }
6 //第二個骰子
7 public int SecondDiceValue { get; set; }
8 public Mode SecondDiceMode { get { return SetModel(SecondDiceValue); } }
9 //第三個骰子
10 public int ThirdDiceValue { get; set; }
11 public Mode ThirdDiceMode { get { return SetModel(ThirdDiceValue); } }
12
13 private Mode SetModel(int value)
14 {
15 Mode Size;
16 Mode EvenOdd;
17 if (value >= 3) Size = Mode.大;
18 else Size = Mode.小;
19 if (value % 2 == 0) EvenOdd = Mode.雙;
20 else EvenOdd = Mode.單;
21 return Size | EvenOdd;
22 }
23 }
24
25 /// <summary>
26 /// 骰子的大小和單雙結果枚舉
27 /// </summary>
28 [Flags]
29 public enum Mode
30 {
31 //1111 大小單雙
32 雙 = 1,//0001
33 單 = 2,//0010
34 小 = 4,//0100
35 大 = 8//1000
36 }
列印一下檢視結果:
1 class Program
2 {
3 static void Main(string[] args)
4 {
5
6 GameResult resule = new GameResult()
7 {
8 FirstDiceValue = 3,
9 SecondDiceValue = 6,
10 ThirdDiceValue = 2
11 };
12 Console.WriteLine(resule.FirstDiceMode);
13 Console.WriteLine(resule.SecondDiceMode);
14 Console.WriteLine(resule.ThirdDiceMode);
15
16 Console.ReadKey();
17 }
18 }
更正:上面寫判斷的時候用了[(x>=3 )=> 大],是以3也成了大...
出自:部落格園-半路獨行
原文位址:https://www.cnblogs.com/banluduxing/p/9300153.html
本文出自于http://www.cnblogs.com/banluduxing 轉載請注明出處。