魔方游戏实现:任意阶魔方的表示
第一节 魔方的简单表示
对于任意N阶的魔方均有六个面(Surface),每个面有N*N个方块。在面向对象的程序设计里,我们可以把魔方(Cube)、魔方的面(Surface)和面的方块(Block)均视作为对象。
魔方的定义:六个面存储在一个数组
- ''' <summary>
- ''' 表示一个指定阶的魔方
- ''' </summary>
- Public Class CubeClass
- ''' <summary>
- ''' 魔方阶数
- ''' </summary>
- Public CubeRank As Integer
- ''' <summary>
- ''' 魔方的六个表面
- ''' </summary>
- Public SurfaceArray(5) As CubeSurfaceClass
- End Class
复制代码
魔方的面定义:方块存储为N*N的二维数组
- ''' <summary>
- ''' 表示一个魔方的面
- ''' </summary>
- Public Class CubeSurfaceClass
- ''' <summary>
- ''' 魔方表层的块数据
- ''' </summary>
- Public BlockData(,) As CubeBlockClass
- End Class
复制代码
魔方的块定义:每个块具有独立的颜色
- ''' <summary>
- ''' 表示魔方面上的一个方块
- ''' </summary>
- Public Class CubeBlockClass
- ''' <summary>
- ''' 当前块的颜色
- ''' </summary>
- 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):后方
由此确定了各个面的空间方位,给SurfaceClass添加如下定义:
- ''' <summary>
- ''' 当前表层的相邻表层(顶、底、左、右、前和后)
- ''' </summary>
- Public NeibourSurface(5) As CubeSurfaceClass
复制代码
NeibourSurface()的索引从0~5依次指示当前面的顶、底、左、右、前和后。以图2.1“右面”为例,它的NeibourSurface()应该为
NeibourSurface(0):顶层
NeibourSurface(1):底层
NeibourSurface(2):前方
NeibourSurface(3):后方
NeibourSurface(4):右侧,每一个面的“前”就是它自身
NeibourSurface(5):左侧
但上述是默认为"右面"的"上方"就是顶层。所以我们还需要对每一个面的“上方”进行严格的定义:
由上,我们可以确定各面之间的空间关系:
- 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类中添加如下方法,并在构造函数中调用:
- ''' <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)的构造函数:六面的颜色标准:顶-白色,底-黄色,左-橙色,右-红色,前-绿色,后-蓝色
- ''' <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)的构造函数:
- ''' <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)的构造函数:
- 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
复制代码
至此,一个任意阶的魔方已可以被表示,并且在此基础上将可以实现魔方的扭动逻辑。
魔方游戏实现:任意阶魔方的表示相关推荐
- java魔方游戏代码_Java 3D魔方
很强的JAVA 3D魔方游戏,这是源码及中文注释包,作者的开发文档和思绪都在里面,对学习很有帮助! Java 3D魔方游戏源码及中文注释包 (1 folders, 2 files, 1.38 KB, ...
- 任意阶魔方阵matlab程序,【精品】任意阶魔方阵算法(c语言)
n阶幻方是由前n^2(n的2次方)个自然数组成的一个n阶方阵,其各行.各列及两条对角线所含的n个数的和相等.洛书就是最基本的3×3阶魔方阵,做出某种最恰当的决定,横竖都有3个格. 0的倒数 a-1可以 ...
- Python——简陋的n阶魔方模拟
简介 终于整完了毕业论文,忙里偷闲半小时摸了个魔方模拟程序,支持模拟任意阶魔方,自动打乱,输入指令旋转.显示方面不会弄3D的,用opencv整了个展开图. 效果 五阶魔方打乱20步 震撼人心50阶,打 ...
- 魔方(4)二阶魔方、六阶魔方、七阶魔方
目录 二阶魔方 1,二阶魔方与三阶魔方的关系 2,二阶魔方的定位 3,二阶魔方的盲拧 六阶魔方 七阶魔方 二阶魔方 1,二阶魔方与三阶魔方的关系 可以理解为,二阶魔方就是三阶魔方的八个角块. ...
- 任意阶幻方(魔方矩阵)C语言实现
魔方又称幻方.纵横图.九宫图,最早记录于我国古代的洛书.据说夏禹治水时,河南洛阳附近的大河里浮出了一只乌龟,背上有一个很奇怪的图形,古人认为是一种祥瑞,预示着洪水将被夏禹王彻底制服.后人称之为&quo ...
- java 魔方_2 java实现4阶魔方,通过运行代码,鼠标进行旋转,可以模拟 游戏 Develop 246万源代码下载- www.pudn.com...
开发工具: Java 文件大小: 3830 KB 上传时间: 2015-11-07 下载次数: 0 详细说明:java实现4阶魔方,通过运行代码,鼠标进行旋转,可以模拟魔方游戏-java achiev ...
- Android 3D 魔方游戏的设计与开发
Android 3D 魔方游戏的设计与开发 5.1 Feature 定义 魔方是一个有趣的益智游戏,相信很多人都玩过.本次毕业设计,欲完成的主要的功能如下: (1) 开始游戏:开始一个新的游戏 (2) ...
- Matlab编程与数据类型 -- 奇数阶魔方矩阵的编程
本微信图文详细介绍了利用Matlab实现奇数阶魔方矩阵的编程.
- NYOJ 734 奇数阶魔方
奇数阶魔方 时间限制:1000 ms | 内存限制:65535 KB 难度:3 描述 一个 n 阶方阵的元素是1,2,...,n^2,它的每行,每列和2条对角线上元素的和相等,这样的方阵叫魔方.n ...
最新文章
- 浅析Spring——控制反转IoC
- 译者招募 | 这本“顶级”微积分教材,中文版要来了!
- confluence6.15.4部署及问题汇总
- C/C++ 整型提升(Integral Promotion)
- java获取当前方法
- java 计算 日期_java 计算某日期 多少天后的日期
- 解决 vue 项目一直出现 sockjs-node/info?t=1554978**** ,并造成浏览器不能及时更新编码改动结果
- 【Zabbix】使用zabbix 3.4自带Mysql模板,监控Redhat 7.0上的Mysql
- Silverlight数据绑定之DataGrid
- 多核编程与单核多线程编程
- BZOJ4426 : [Nwerc2015]Better Productivity最大生产率
- WAR文件与具有嵌入式服务器的Java应用程序
- 【渝粤教育】电大中专幼儿园组织与管理 (10)作业 题库
- Linux常用脚本命令总结
- 找不到该项目,请确认该项目的位置的解决办法
- 传统IT正在被颠覆,下一个风口会是互联网+吗?
- 谷歌修复已遭在野利用的两个 0day
- js return加分号_JavaScript 语句后应该加分号么?
- 理解openssl协议:x509、crt、cer、key、csr、ssl、tls 这些都是什么鬼? 如何给自己网站颁发证书?
- spring boot整合elk
热门文章
- “达观杯”文本智能处理挑战赛,季军带你飞
- 如何把html转换成音频网址,怎么把视频转换成音频 视频转换成mp3
- matlab直流电机双闭环控制系统设计,基于MATLAB的直流电机双闭环调速系统设计毕业论文.doc...
- ae 创建图像等高线 蒙版_如何用AE创建简单的UI动效
- MySQL——在Linux下安装和卸载MySQL
- [SourceInsight].SI自动添加函数注释
- python链家网高并发异步爬虫and异步存入数据
- JZOJ100047.基因变异 (Standard IO)
- The Majesty Of Vue.js
- 解决EditText在ListView Item中,第一次点击无法获取焦点问题