最近学习了.net下的GDI+编程,下面小秀一下成果,使用GDI+编写的桌面魔方程序,今天把源代码放上,欢迎大家下载,如果机器上有.net环境的话可以直接运行bin目录下的MagicCube.exe进行游戏。
源代码下载地址
http://www.lidaren.com/code/magiccube/magiccube.zip
下面方式几个重要的算法程序
1,魔方正面九宫格90度翻转,这个只要细心观察翻转前和翻转后的魔方,你就可以得到答案
左转90度:以(0,0)(2,2)为对称轴翻转后,再以(1,0)(1,2)为对称轴翻转
右转90度:以(0,2)(2,0)为对称轴翻转后,再以(1,0)(1,2)为对称轴翻转
算法如下:
2,魔方正面的4个侧面的翻转,这个实现相对较难,方法也很多,CG这里使用了队列保存所有方块信息,然后再次存回数组的方式来实现,另外为了统一方向,CG使用了面相交边的参数来控制队列的进出,实现比较复杂,但是可以节省很多控件,如果大家有好的方法,欢迎分享
源代码下载地址
http://www.lidaren.com/co
下面方式几个重要的算法程序
1,魔方正面九宫格90度翻转,这个只要细心观察翻转前和翻转后的魔方,你就可以得到答案
左转90度:以(0,0)(2,2)为对称轴翻转后,再以(1,0)(1,2)为对称轴翻转
右转90度:以(0,2)(2,0)为对称轴翻转后,再以(1,0)(1,2)为对称轴翻转
算法如下:
'正方形数据交换
Private Sub RevertRectangleLeft(ByVal id As Integer)
'要实现左转90度
'先对角线转置
Dim i, j As Integer
For i = 1 To Me.DIMCOUNT - 1
For j = 0 To i - 1
'交换数据
Dim temp As Integer
temp = Me.Matrix3D(id)(i)(j)
Me.Matrix3D(id)(i)(j) = Me.Matrix3D(id)(j)(i)
Me.Matrix3D(id)(j)(i) = temp
Next
Next
''后水平翻转
For i = 0 To Me.DIMCOUNT - 1
'交换数据
Dim temp As Integer
temp = Me.Matrix3D(id)(0)(i)
Me.Matrix3D(id)(0)(i) = Me.Matrix3D(id)(Me.DIMCOUNT - 1)(i)
Me.Matrix3D(id)(Me.DIMCOUNT - 1)(i) = temp
Next
End Sub
'正方形数据交换
Private Sub RevertRectangleRight(ByVal id As Integer)
'要实现右转90度
'先对角线转置
Dim i, j As Integer
For i = 0 To Me.DIMCOUNT - 1
For j = 0 To Me.DIMCOUNT - 1 - i - 1
'交换数据
Dim temp As Integer
temp = Me.Matrix3D(id)(i)(j)
Me.Matrix3D(id)(i)(j) = Me.Matrix3D(id)(Me.DIMCOUNT - 1 - j)(Me.DIMCOUNT - 1 - i)
Me.Matrix3D(id)(Me.DIMCOUNT - 1 - j)(Me.DIMCOUNT - 1 - i) = temp
Next
Next
''后水平翻转
For i = 0 To Me.DIMCOUNT - 1
'交换数据
Dim temp As Integer
temp = Me.Matrix3D(id)(0)(i)
Me.Matrix3D(id)(0)(i) = Me.Matrix3D(id)(Me.DIMCOUNT - 1)(i)
Me.Matrix3D(id)(Me.DIMCOUNT - 1)(i) = temp
Next
End Sub
2,魔方正面的4个侧面的翻转,这个实现相对较难,方法也很多,CG这里使用了队列保存所有方块信息,然后再次存回数组的方式来实现,另外为了统一方向,CG使用了面相交边的参数来控制队列的进出,实现比较复杂,但是可以节省很多控件,如果大家有好的方法,欢迎分享
'''
''' 初始化各个面对应的边
'''
'''
Private Sub InitEdge()
'+/- 10 + 100 + 1000 + X 用于记录对应变的交换方式