首页 魔方游戏程序设计

魔方游戏程序设计

举报
开通vip

魔方游戏程序设计 魔方游戏程序设计 [ 录入者:admin | 时间:2006-04-18 09:53:29 | 作者:未知 |   来源:未知 | 点击数:659 ] [上一篇] [下一篇] 设计一个魔方游戏程序首先要实现的是魔方每一层的旋转和魔方的转动,其中可以选择的方法很多,本文介绍一种迅速有效,而且算法简单的方法。 基本思想 魔方共有26块,其中6块位于每一面的中心位置,当魔方转动时它们是不动的;有8块位于顶角位置,各有三个不同颜色的小面;剩余12块各有二个不同颜色的小面。根据这个特点,我们规定魔...

魔方游戏程序设计
魔方游戏程序设计 [ 录入者:admin | 时间:2006-04-18 09:53:29 | 作者:未知 |   来源:未知 | 点击数:659 ] [上一篇] [下一篇] 设计一个魔方游戏程序首先要实现的是魔方每一层的旋转和魔方的转动,其中可以选择的方法很多,本文介绍一种迅速有效,而且算法简单的方法。 基本思想 魔方共有26块,其中6块位于每一面的中心位置,当魔方转动时它们是不动的;有8块位于顶角位置,各有三个不同颜色的小面;剩余12块各有二个不同颜色的小面。根据这个特点,我们规定魔方的前后面为A面,上下面为S面,左右面为D面。设置颜色值顺序:A>S>D。定义数组a[6]存放6个中心小块的颜色,b[12]存放12个有两个小面的块的颜色,c[8]存放有三个小面的块的颜色,a的数值在015之间且各不相同;设b所临的两个面:B1>B2,则b的03这4个字节存放B2的值,47这4个字节存放B1的值;c的03这4个字节存放D面的颜色值,47这4个字节存放S面的颜色值,811这4个字节存放A面的颜色值。 问题的提出 怎样实现魔方各个面的转动? 怎样实现魔方的旋转以使游戏者可以寻找每一小块的位置? 怎样检测魔方是否已经排成,即每一面的9小块颜色一致? 问题的解决 由于魔方共有6个面,因此只需编写6个转换的子函数。下面以其中两个为例说明这些子函数的算法: intm(ints){intd;d=((s&Oxf)|(s>>4);returnd;} intn(ints){intd;d=(s>>8)|(s&Oxf)<<8)|(s&OxfO);returnd;} voidc1(){intt; t=b[0];b[0]=m(b[4]);b[4]=m(b[8]);b[8]=m(b[5]);b[5]=m(t); t=c[0];c[0]=n(b[4]);b[4]=n(b[5]);c[5]=n(c[1]);c[1]=n(t); 函数intm(ints)将s的03字节与47字节的值相交换,intn(ints)将s的03字节与811字节的值相交换。 函数c1()实现的是魔方上层的转动,因为魔方的上层转换时将c的D面变成A面,将A面变成D面,而S面仍是S面,所以要将参与转动的c(i)的03字节与811字节相交换,然后将每一个ci的值循环交换;由于是将AS面变为SD面或将SD面变为AS面,因此要将参与转动的每一个b的03字节与47字节的值相交换,然后将每一个b的值循环交换。这样魔方上层的转动就完成了。 int1(ints){intd;d=(s>>8<<4)+((s&OxfO) <<4)+(s&Oxf);returnd;} voidc3(){intt; t=b[3];b[3]=b[7];b[7]=b[11];b[11]=b[4];b[4]=t; t=c[0];c[0]=l(c[3]);c[3]=l(c[7]);c[7]=l(c[4]);c[4]=l(t);} 函数intl(ints)是将s的47字节与811字节相交换。函数c3()实现的是魔方左层的转动。因为参与转动的每一个b不是AD面就是SD面,因此转动时只要将各b的值循环交换即可。而每一个c是ASD面和SAD面之间的变换,所以先将各c的47字节与811字节相交换,然后将各c的值循环交换即可。这样魔方的左层转动就完成了。其它子函数的算法类似。 实现魔方向右和向上的旋转。向上旋转可先施行左层和右层向上转动,然后中间层的a和b的值循环交换即可,程序如下: voidturn1(){intt;c4();c3()}; t=a[0];a[0]=a[4];a[4]=a[5];a[5]=a[2];a[2]=t; t=b[0];b[0]=m(b[2];b[2]=m(b[2]);b[2]=b[10];b[10]=m(b[8]);b[8]=m(t);} 向右旋转的方法类似。 检测魔方是否已排成,只需检测每一个b的值是否与它相临的两个面的中心小块a[j]和a[l]的值相符(设面J>L),即是否有b=a[j]<<4+a[l];同时是滞有每一个c==a[j]<<8+a[l]<<4+a[h](面J>L>H),如果对于所有的c都满足条件,则说明魔方已经排完。 游戏过程: 本程序运行后计算机自动将魔方打乱,然后由游戏者通过键盘来将魔方排成每九个小面的颜色一致。操作方法:↑使魔方向上转动,→使魔方向右转,由一个蓝色圆圈标志它的上下、左右、前后六个层的位置,按空格键使层转动。A键和S键控制圆圈标志双向转换。按Esc键可退出游戏。
本文档为【魔方游戏程序设计】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
is_993510
暂无简介~
格式:doc
大小:28KB
软件:Word
页数:2
分类:互联网
上传时间:2013-12-03
浏览量:33