评论

收藏

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

编程语言 编程语言 发布于:2021-07-26 20:46 | 阅读数:439 | 评论:0

// 列举出所有形状的枚举
  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, 2]{{1,1}});
      s0.Add(new int[2, 1] { {1},{1} });
      Tabs.Add(BlockType.I2, s0);
      List<int[,]> s1 = new List<int[,]>();
      s1.Add(new int[1, 3] { { 1,1, 1 } });
      s1.Add(new int[3, 1] { {  1 }, {  1 }, { 1 } });
      Tabs.Add(BlockType.I3, s1);
      List<int[,]> s2 = new List<int[,]>();
      s2.Add(new int[1, 4] { { 1, 1, 1,1 } });
      s2.Add(new int[4, 1] { { 1 }, {1 }, {1 }, {1 } });
      Tabs.Add(BlockType.I4, s2);
      List<int[,]> s3 = new List<int[,]>();
      s3.Add(new int[2, 3] { { 1, 1, 1},{0, 1,0 } });
      s3.Add(new int[3, 2] { {0, 1 }, {1, 1 }, {0, 1 } });
      s3.Add(new int[2, 3] { { 0, 1,0 }, { 1, 1,1 } });
      s3.Add(new int[3, 2] { { 1,0 }, { 1, 1 }, { 1, 0 } });
      Tabs.Add(BlockType.T1, s3);
      List<int[,]> s4 = new List<int[,]>();
      s4.Add(new int[3, 3] { { 1, 1, 1 }, { 0, 1, 0 }, { 0, 1, 0 } });
      s4.Add(new int[3, 3] { {0, 0, 1 }, {1, 1, 1 }, {0, 0, 1 } });
      s4.Add(new int[3, 3] { { 0, 1, 0 }, { 0, 1, 0 }, { 1, 1, 1 } });
      s4.Add(new int[3, 3] { { 1, 0, 0 }, { 1, 1, 1 }, { 1, 0, 0 } });      
      Tabs.Add(BlockType.T2, s4);
      List<int[,]> s5 = new List<int[,]>();
      s5.Add(new int[2, 3] { { 1, 0, 1 }, { 1, 1, 1 } });
      s5.Add(new int[3, 2] { { 1, 1 }, { 1, 0 }, { 1, 1 } });
      s5.Add(new int[2, 3] { { 1, 1, 1 }, { 1, 0, 1 } });
      s5.Add(new int[3, 2] { { 1, 1 }, { 0, 1 }, { 1, 1 } });
      Tabs.Add(BlockType.TR1, s5);
      List<int[,]> s6 = new List<int[,]>();
      s6.Add(new int[3, 3] { { 1, 0, 1 }, { 1, 0, 1 }, { 1, 1, 1 } });
      s6.Add(new int[3, 3] { { 1, 1, 1 }, { 1, 0, 0 }, { 1, 1, 1 } });
      s6.Add(new int[3, 3] { { 1, 1, 1 }, { 1, 0, 1 }, { 1, 0, 1 } });
      s6.Add(new int[3, 3] { { 1, 1, 1 }, { 0, 0, 1 }, { 1, 1, 1 } });
      Tabs.Add(BlockType.TR2, s6);
      List<int[,]> s7 = new List<int[,]>();
      s7.Add(new int[3, 2] { { 1, 0 }, { 1, 0 }, { 1, 1 } });
      s7.Add(new int[2, 3] { { 1, 1, 1 }, { 1, 0, 0 } });
      s7.Add(new int[3, 2] { { 1, 1 }, { 0, 1 }, { 0, 1 } });
      s7.Add(new int[2, 3] { { 0, 0, 1 }, { 1, 1, 1 } });
      Tabs.Add(BlockType.L, s7);
      List<int[,]> s8 = new List<int[,]>();
      s8.Add(new int[3, 2] { { 0, 1 }, { 0, 1 }, { 1, 1 } });
      s8.Add(new int[2, 3] { { 1, 0, 0 }, { 1, 1, 1 } });
      s8.Add(new int[3, 2] { { 1, 1 }, { 1, 0 }, { 1, 0 } });
      s8.Add(new int[2, 3] { { 1, 1, 1 }, { 0, 0, 1 } });
      Tabs.Add(BlockType.LR, s8);
      List<int[,]> s9 = new List<int[,]>();
      s9.Add(new int[2, 2] { { 1, 1 }, { 1, 1 } });
      Tabs.Add(BlockType.Square, s9);
      //……
    }
    public static List<int[,]> GetShapes(BlockType tid)
    {
      return Tabs[tid];
    }
//?
    public static int[,] GetShape(BlockType tid, int num) //T1,6
    {
      
      List<int[,]> list = GetShapes(tid); //根据t1:得到值是s3;
      return list[num % list.Count]; //返回默认形状; 7%4求余,得到产生的是3;
      
    }
    public static int ShapeCount
    {
      get
      {
        return Tabs.Count;
      }
    }
  }
} 
DSC0000.gif DSC0001.jpeg +

DSC0002.jpeg

DSC0003.jpeg
 
关注下面的标签,发现更多相似文章