网学网为广大网友收集整理了,基于按层求解算法的魔方游戏的设计,希望对大家有所帮助!
客服咨询,网学网竭诚为您服务,本站永久域名:myeducs.cn |
1.1.1 Cube类的设计 组成魔方的小立方块是一个独立的单元,在此将其称为一个魔方单元,可以设计一个Cube类来表示。 每个小魔方单元由6个不同的颜色面组成,则有6种颜色属性值,而每个颜色值又由RGB三个颜色属性决定,因此可以存储在一个二维数组sideColor[6][3]中,魔方单元有一个中心三维坐标centerCoordinate[3],数组包含中心坐标的X、Y、Z三个属性,可作为确定魔方单元的唯一标志。 在绘制魔方单元时,实际就是绘制6个不同的颜色面,组合在一起就是一个立方体的效果[12]。对不同面的颜色值的设置,我们用面在坐标系中的方向来决定。规定,正X方向为黄色,负X方向为绿色,正Y方向为红色,负Y方向为紫色,正Z方向为蓝色,负Z方向为青色。因此,cube类中用一个数组direct[6]来存储魔方单元的6个方向值,以作为绘制魔方单元时确定面颜色值之用。 当魔方的某个面朝某个方向进行旋转时,其涉及的魔方单元在三维坐标系中围绕面中心进行旋转。则这些面的颜色值务必要发生改变以实现这种旋转的效果,由于魔方单元每个面的颜色值由它的方向所决定,因此要对魔方单元的各个direct值进行重新设定,以体现其在坐标系中的旋转变换,这里用用3个函数来实现,turnByX(int sign)、turnByX(int sign)、turnByX(int sign), 分别表示魔方单元饶X、Y、Z轴方向进行旋转,其中sign为正反方向的标志,用-1来表示反方向,1来表示正方向。 设立DrawCubeUnit()方法通过调用openGL的API生成6个不同的颜色面来完成魔方单元的绘制。 setDirection()和 getDirection()分别是对direct属性的设置和获取,作为实现游戏状态的加载和保存用。 resetDirection()方法则是对魔方单元的direct属性进行重置,作为实现整个魔方状态的重置用。 getXCoor()、getYCoor()、getZCoor()则是返回魔方单元的中心坐标。 1.1.2 cube Handle类的设计 Cube Handle 类是一个用来对cube实体进行操作的类,通过它提供一系列方法来调用cube类的一些函数,设定cube实例的一些属性,从而达到显示和操作魔方的效果。CubeHandle类的声明如下: 属性和方法的说明: 基于存储魔方的便利性和3D效果显示的考虑,对组成魔方的27个小立方块都在计算机上存储,因此Cube *cubes[CUBE_SIZE][CUBE_ SIZE][CUBE_SIZE],声明了N*N*N个Cube实例,这里N为CUBE_SIZE,定义为3。 二维数组color[6][9]中保存的是魔方表面的54颜色值。 Solver为一个魔方的求解类,它获取一个魔方的状态,类内部对状态进行分析求解后,输出一个解决方案用于魔方的复原。 GetState为一个按一定顺序取得魔方状态,即魔方表面的54颜色值的函数。 ScrambleCubeGet方法为solver求解类获取魔方的状态。 SendSolution方法输出solver求解类的解决方案。 turn(int rotateType)方法实现控制魔方各个表面的旋转,参数rotateType的取值为1-12,分别表示6个面2种方向共12种表面旋转方式。 |
本站发布的计算机毕业设计均是完整无错的全套作品,包含开题报告+程序+论文+源代码+翻译+答辩稿PPT |
本文选自计算机毕业设计http://myeducs.cn |