天天看點

c#位運算小例子筆記

關于位運算,網上有挺多好的部落格介紹過,我就不多解釋了

這裡隻記錄一個小例子,是在了解位運算時候寫的,幫助自己加深一下印象,做個筆記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 轉載請注明出處。