分享
 
 
 

魔方游戏程序设计

王朝other·作者佚名  2006-01-08
窄屏简体版  字體: |||超大  

设计一个魔方游戏程序首先要实现的是魔方每一层的旋转和魔方的转动,其中可以选择的方法很多,本文介绍一种迅速有效,而且算法简单的方法。

基本思想

魔方共有26块,其中6块位于每一面的中心位置,当魔方转动时它们是不动的;有8块位于顶角位置,各有三个不同颜色的小面;剩余12块各有二个不同颜色的小面。根据这个特点,我们规定魔方的前后面为A面,上下面为S面,左右面为D面。设置颜色值顺序:A>S>D。定义数组a[6]存放6个中心小块的颜色,b[12]存放12个有两个小面的块的颜色,c[8]存放有三个小面的块的颜色,a[i]的数值在015之间且各不相同;设b[i]所临的两个面:B1>B2,则b[i]的03这4个字节存放B2的值,47这4个字节存放B1的值;c[i]的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[i]的D面变成A面,将A面变成D面,而S面仍是S面,所以要将参与转动的c(i)的03字节与811字节相交换,然后将每一个ci[i]的值循环交换;由于[i]是将AS面变为SD面或将SD面变为AS面,因此要将参与转动的每一个b[i]的03字节与47字节的值相交换,然后将每一个b[i]的值循环交换。这样魔方上层的转动就完成了。

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[i]不是AD面就是SD面,因此转动时只要将各b[i]的值循环交换即可。而每一个c[i]是ASD面和SAD面之间的变换,所以先将各c[i]的47字节与811字节相交换,然后将各c[i]的值循环交换即可。这样魔方的左层转动就完成了。其它子函数的算法类似。

实现魔方向右和向上的旋转。向上旋转可先施行左层和右层向上转动,然后中间层的a[i]和b[i]的值循环交换即可,程序如下:

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[i]的值是否与它相临的两个面的中心小块a[j]和a[l]的值相符(设面J>L),即是否有b[i]=a[j]<<4+a[l];同时是滞有每一个c[i]==a[j]<<8+a[l]<<4+a[h](面J>L>H),如果对于所有的c[i]都满足条件,则说明魔方已经排完。

游戏过程:

本程序运行后计算机自动将魔方打乱,然后由游戏者通过键盘来将魔方排成每九个小面的颜色一致。操作方法:'↑'使魔方向上转动,'→'使魔方向右转,由一个蓝色圆圈标志它的上下、左右、前后六个层的位置,按空格键使层转动。A键和S键控制圆圈标志双向转换。按Esc键可退出游戏。

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有