.NET实现魔方游戏之任意阶魔方表示的示例分析-创新互联

这篇文章给大家分享的是有关.NET实现魔方游戏之任意阶魔方表示的示例分析的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。

公司主营业务:成都网站制作、网站设计、外贸网站建设、移动网站开发等业务。帮助企业客户真正实现互联网宣传,提高企业的竞争能力。创新互联公司是一支青春激扬、勤奋敬业、活力青春激扬、勤奋敬业、活力澎湃、和谐高效的团队。公司秉承以“开放、自由、严谨、自律”为核心的企业文化,感谢他们对我们的高要求,感谢他们从不同领域给我们带来的挑战,让我们激情的团队有机会用头脑与智慧不断的给客户带来惊喜。创新互联公司推出舞阳免费做网站回馈大家。

第一节 魔方的简单表示


对于任意N阶的魔方均有六个面(Surface),每个面有N*N个方块。在面向对象的程序设计里,我们可以把魔方(Cube)、魔方的面(Surface)和面的方块(Block)均视作为对象。


魔方的定义:六个面存储在一个数组


''' 
''' 表示一个指定阶的魔方
''' 
Public Class CubeClass
''' 
''' 魔方阶数
''' 
Public CubeRank As Integer
''' 
''' 魔方的六个表面
''' 
Public SurfaceArray(5) As CubeSurfaceClass
End Class

魔方的面定义:方块存储为N*N的二维数组


''' 
''' 表示一个魔方的面
''' 
Public Class CubeSurfaceClass
''' 
''' 魔方表层的块数据
''' 
Public BlockData(,) As CubeBlockClass
End Class

魔方的块定义:每个块具有独立的颜色


''' 
''' 表示魔方面上的一个方块
''' 
Public Class CubeBlockClass
''' 
''' 当前块的颜色
''' 
Public BlockColor As Color
Public x As Integer '所在列数
Public y As Integer '所在行数
End Class

上述,我们完成了魔方类的简单定义,并且确立了之间的从属关系。这里有一点需要注意,方块(BlockClass)是指魔方的单个颜色块。


所以N阶魔方应有6*N*N个颜色块,以三阶魔方为例,它应有54个颜色块(BlockClass)。


--------------------------------------------------------------------------------

第二节 面之间的空间关系


魔方的六个面之间并非独立的,而是存在一定的空间关系。前面在CubeClass中定义了SurfaceArray()表示魔方的六个面,现在索引0~5分别指示魔方的顶层,底层,左侧,右侧,前方,后方六个面。


SurfaceArray(0):顶层


SurfaceArray(1):底层


SurfaceArray(2):左侧


SurfaceArray(3):右侧


SurfaceArray(4):前方


SurfaceArray(5):后方


.NET实现魔方游戏之任意阶魔方表示的示例分析

图2.1 魔方六面的空间位置


由此确定了各个面的空间方位,给SurfaceClass添加如下定义:


''' 
''' 当前表层的相邻表层(顶、底、左、右、前和后)
''' 

Public NeibourSurface(5) As CubeSurfaceClass


NeibourSurface()的索引从0~5依次指示当前面的顶、底、左、右、前和后。以图2.1“右面”为例,它的NeibourSurface()

应该为


NeibourSurface(0):顶层


NeibourSurface(1):底层


NeibourSurface(2):前方


NeibourSurface(3):后方


NeibourSurface(4):右侧,每一个面的“前”就是它自身


NeibourSurface(5):左侧


但上述是默认为"右面"的"上方"就是顶层。所以我们还需要

对每一个面的“上方”进行严格的定义:


.NET实现魔方游戏之任意阶魔方表示的示例分析


图2.2 魔方六面的空间位置_平面展开


.NET实现魔方游戏之任意阶魔方表示的示例分析


图2.3 魔方六面"上方"的方向


由上,我们可以确定各面之间的空间关系:


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类中添加如下方法,并在构造函数中调用:


''' 
'''初始化各个表层间的空间相邻关系
''' 
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)的构造函数:六面的颜色标准:顶-白色,底-黄色,左-橙色,右-红色,前-绿色,后-蓝色

''' 
''' 新建一个指定阶的魔方
''' 
''' 指定的阶数
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)的构造函数:

''' 
''' 当前魔方的阶数
''' 
Public CubeRank As Integer
''' 
''' 魔方表层的数据
''' 
Public BlockData(,) As CubeBlockClass
''' 
''' 当前表层的相邻表层(顶、底、左、右、前和后)
''' 
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)的构造函数:


Public ParentIndex As Integer
''' 
''' 当前块的颜色
''' 
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

至此,一个任意阶的魔方已可以被表示,并且在此基础上将可以实现魔方的扭动逻辑。


感谢各位的阅读!关于“.NET实现魔方游戏之任意阶魔方表示的示例分析”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,让大家可以学到更多知识,如果觉得文章不错,可以把它分享出去让更多的人看到吧!


当前标题:.NET实现魔方游戏之任意阶魔方表示的示例分析-创新互联
本文网址:http://scyanting.com/article/diiggj.html