• 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 转载请注明出处。

  • 相关阅读:
    【鬼脸原创】github搭建动态网站
    WebStorm配置(2016/11/18更新)
    前端学习入门
    css笔记
    c# 将文本中的数据快速导入到数据库(200万左右的数据量)
    3.数据库单多表查询
    2.数据库表的增删改
    1.数据库建表
    浏览器的兼容性测试
    python-路径处理path
  • 原文地址:https://www.cnblogs.com/banluduxing/p/9300153.html
Copyright © 2020-2023  润新知