Mike 发表于 2021-7-26 20:46:57

实训课俄罗斯方块之三 基本类型设计

// 列举出所有形状的枚举
    enum BlockType
    {      
      I2,// 竖线,由2个方块组成      
      I3,   // 竖线,由3个方块组成      
      I4, // 竖线,由4个方块组成      
      T1, // T型,由4个方块组成      
      T2,// T型,由5个方块组成      
      TR1,          // 凹形      
      TR2,         // 深凹形   
      L,             // L型,由4个方块组成      
      LR,      // 反向L型,由4个方块组成
      Square   // 田子型,由4个方块组成
    }针对枚举类型做的计算机存储的定义
static class ShapeTable
    {
      static Dictionary<BlockType, List<int[,]>> Tabs = new Dictionary<BlockType, List<int[,]>>();

      // 在此初始化所有的形状
      static ShapeTable()
      {//int[,]:前一个数组声明行列值;后面赋值存储1表示有个块0表示没有;
//s.Add:表示存储了几种类型的方块。
            List<int[,]> s0 = new List<int[,]>();
            s0.Add(new int{{1,1}});
            s0.Add(new int { {1},{1} });
            Tabs.Add(BlockType.I2, s0);

            List<int[,]> s1 = new List<int[,]>();
            s1.Add(new int { { 1,1, 1 } });
            s1.Add(new int { {1 }, {1 }, { 1 } });
            Tabs.Add(BlockType.I3, s1);

            List<int[,]> s2 = new List<int[,]>();
            s2.Add(new int { { 1, 1, 1,1 } });
            s2.Add(new int { { 1 }, {1 }, {1 }, {1 } });
            Tabs.Add(BlockType.I4, s2);

            List<int[,]> s3 = new List<int[,]>();
            s3.Add(new int { { 1, 1, 1},{0, 1,0 } });
            s3.Add(new int { {0, 1 }, {1, 1 }, {0, 1 } });
            s3.Add(new int { { 0, 1,0 }, { 1, 1,1 } });
            s3.Add(new int { { 1,0 }, { 1, 1 }, { 1, 0 } });
            Tabs.Add(BlockType.T1, s3);

            List<int[,]> s4 = new List<int[,]>();
            s4.Add(new int { { 1, 1, 1 }, { 0, 1, 0 }, { 0, 1, 0 } });
            s4.Add(new int { {0, 0, 1 }, {1, 1, 1 }, {0, 0, 1 } });
            s4.Add(new int { { 0, 1, 0 }, { 0, 1, 0 }, { 1, 1, 1 } });
            s4.Add(new int { { 1, 0, 0 }, { 1, 1, 1 }, { 1, 0, 0 } });            
            Tabs.Add(BlockType.T2, s4);

            List<int[,]> s5 = new List<int[,]>();
            s5.Add(new int { { 1, 0, 1 }, { 1, 1, 1 } });
            s5.Add(new int { { 1, 1 }, { 1, 0 }, { 1, 1 } });
            s5.Add(new int { { 1, 1, 1 }, { 1, 0, 1 } });
            s5.Add(new int { { 1, 1 }, { 0, 1 }, { 1, 1 } });
            Tabs.Add(BlockType.TR1, s5);

            List<int[,]> s6 = new List<int[,]>();
            s6.Add(new int { { 1, 0, 1 }, { 1, 0, 1 }, { 1, 1, 1 } });
            s6.Add(new int { { 1, 1, 1 }, { 1, 0, 0 }, { 1, 1, 1 } });
            s6.Add(new int { { 1, 1, 1 }, { 1, 0, 1 }, { 1, 0, 1 } });
            s6.Add(new int { { 1, 1, 1 }, { 0, 0, 1 }, { 1, 1, 1 } });
            Tabs.Add(BlockType.TR2, s6);

            List<int[,]> s7 = new List<int[,]>();
            s7.Add(new int { { 1, 0 }, { 1, 0 }, { 1, 1 } });
            s7.Add(new int { { 1, 1, 1 }, { 1, 0, 0 } });
            s7.Add(new int { { 1, 1 }, { 0, 1 }, { 0, 1 } });
            s7.Add(new int { { 0, 0, 1 }, { 1, 1, 1 } });
            Tabs.Add(BlockType.L, s7);

            List<int[,]> s8 = new List<int[,]>();
            s8.Add(new int { { 0, 1 }, { 0, 1 }, { 1, 1 } });
            s8.Add(new int { { 1, 0, 0 }, { 1, 1, 1 } });
            s8.Add(new int { { 1, 1 }, { 1, 0 }, { 1, 0 } });
            s8.Add(new int { { 1, 1, 1 }, { 0, 0, 1 } });
            Tabs.Add(BlockType.LR, s8);

            List<int[,]> s9 = new List<int[,]>();
            s9.Add(new int { { 1, 1 }, { 1, 1 } });
            Tabs.Add(BlockType.Square, s9);
            //……

      }
      public static List<int[,]> GetShapes(BlockType tid)
      {
            return Tabs;
      }
//?
      public static int[,] GetShape(BlockType tid, int num) //T1,6
      {
            
            List<int[,]> list = GetShapes(tid); //根据t1:得到值是s3;
            return list; //返回默认形状; 7%4求余,得到产生的是3;
            
      }
      public static int ShapeCount
      {
            get
            {
                return Tabs.Count;
            }
      }
    }} +


 

文档来源:51CTO技术博客https://blog.51cto.com/u_2096101/3188762
页: [1]
查看完整版本: 实训课俄罗斯方块之三 基本类型设计