155704p7dllc7lc6pdtg5j.png 图2.1 魔方六面的空间位置
  由此确定了各个面的空间方位,给SurfaceClass添加如下定义:

 

  1. <summary>
  2. 当前表层的相邻表层(顶、底、左、右、前和后)
  3. </summary>
  4. Public NeibourSurface(5) As CubeSurfaceClass
图2.2 魔方六面的空间位置_平面展开
155707yqimqyjninzxl81n.png 图2.3 魔方六面上方的方向
  由上,我们可以确定各面之间的空间关系:

 

  1. Dim TempArray(,) As Integer = {{2, 3, 4, 5, 0, 1},
    • {3, 2, 4, 5, 1, 0},
      • {1, 0, 4, 5, 2, 3},
        • {0, 1, 4, 5, 3, 2},
          • {0, 1, 2, 3, 4, 5},
            • {0, 1, 3, 2, 5, 4}} 空间相邻关系矩阵
复制代码
  该矩阵行数值指某个面在SurfaceArray()中的索引,列数表示这个面相邻的面在SurfaceArray()的索引。前面提到每一个面的“前”就是它自身,矩阵的第五列从0依次到5。

  在CubeClass类中添加如下方法,并在构造函数中调用:

 

  1. <summary>
    • 初始化各个表层间的空间相邻关系
      • </summary>
        • Public Sub InitSurface()
          • Dim TempArray(,) As Integer = {{2, 3, 4, 5, 0, 1},
            • {3, 2, 4, 5, 1, 0},
              • {1, 0, 4, 5, 2, 3},
                • {0, 1, 4, 5, 3, 2},
                  • {0, 1, 2, 3, 4, 5},
                    • {0, 1, 3, 2, 5, 4}} 空间相邻关系矩阵
                      •  
                      • For i = 0 To 5
                        • For j = 0 To 5
                          • SurfaceArray(i).NeibourSurface(j) = SurfaceArray(TempArray(i, j))
                            • Next
                              • Next
                                • End Sub
复制代码
  第三节 魔方的初始化

  魔方(CubeClass)的构造函数:六面的颜色标准:顶-白色,底-,左-橙色,右-红色,前-绿色,后-蓝色

 

  1. <summary>
    • 新建一个指定阶的魔方
      • </summary>
        • <param name=nRank>指定的阶数</param>
          • Public Sub New(ByVal nRank As Integer)
            • Dim ColorArr() As Color = {Color.White, Color.Yellow, Color.Orange, Color.Red, Color.Green, Color.Blue}
              • For i = 0 To 5
                • SurfaceArray(i) = New CubeSurfaceClass(nRank, i, ColorArr(i))
                  • Next
                    • CubeRank = nRank
                      • InitSurface()
                        • End Sub
复制代码
  魔方面(CubeSurfaceClass)的构造函数:

 

  1. <summary>
    • 当前魔方的阶数
      • </summary>
        • Public CubeRank As Integer
          • <summary>
            • 魔方表层的数据
              • </summary>
                • Public BlockData(,) As CubeBlockClass
                  • <summary>
                    • 当前表层的相邻表层(顶、底、左、右、前和后)
                      • </summary>
                        • Public NeibourSurface(5) As CubeSurfaceClass
                          • Public Index As Integer
                            • Public Sub New(nRank As Integer, nIndex As Integer, nColor As Color)
                              • ReDim BlockData(nRank - 1, nRank - 1)
                                • CubeRank = nRank
                                  • Index = nIndex
                                    • Dim rnd As New Random
                                      • For i = 0 To nRank - 1
                                        • For j = 0 To nRank - 1
                                          • BlockData(i, j) = New CubeBlockClass(i, j)
                                            • BlockData(i, j).ParentIndex = Index
                                              • BlockData(i, j).BlockColor = nColor
                                                • Next
                                                  • Next
                                                    • End Sub
复制代码
  魔方块(CubeBlockClass)的构造函数:

 

  1. Public ParentIndex As Integer
    • <summary>
      • 当前块的颜色
        • </summary>
          • Public BlockColor As Color
            • Public x As Integer 所在列数
              • Public y As Integer 所在行数
                • Public Sub New(nX As Integer, nY As Integer)
                  • x = nX
                    • y = nY
                      • End Sub
复制代码
  至此,一个任意阶的魔方已可以被表示,并且在此基础上将可以实现魔方的扭动逻辑。

  资源分享:中国石油大学(华东)公开课:魔方和数学建模(课程涉及的方法与上述不同,另一个思路供大家参考。)

相关阅读:数独游戏求解:解法适用于任意阶数的数独
锐亚教育

锐亚教育,游戏开发论坛|游戏制作人|游戏策划|游戏开发|独立游戏|游戏产业|游戏研发|游戏运营| unity|unity3d|unity3d官网|unity3d 教程|金融帝国3|8k8k8k|mcafee8.5i|游戏蛮牛|蛮牛 unity|蛮牛