魔方简单实现(c语言,tc2.0编译通过)不含解魔方的算法

 

ContractedBlock.gif ExpandedBlockStart.gif 代码
 
   
#include < conio.h >
#include
< stdio.h >
#include
< stdlib.h >
#include
< graphics.h >
int a[ 3 ][ 3 ] = { 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 }; /* INITIALIZE SIX PLANS */
int b[ 3 ][ 3 ] = { 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 };
int c[ 3 ][ 3 ] = { 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 };
int d[ 3 ][ 3 ] = { 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 };
int e[ 3 ][ 3 ] = { 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 };
int f[ 3 ][ 3 ] = { 7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 };
int top[ 3 ][ 3 ],front[ 3 ][ 3 ],side[ 3 ][ 3 ];
int position = 0 ,temp[ 3 ] = { 0 , 0 , 0 }, new [ 3 ][ 3 ]; /* POSITION ASSIGN THE ARROW POSITION */
int sign;
main()
{
int l = 60 ,x = 50 ,y = 50 ,key,count,input = 0 ,errorcode; /* L MEANS THE LENTH OF THE SQUARE,X MEANS THE INITAIL POSITION OF X,Y MEANS THE INITIAL POSITION OF Y */
int a1[ 3 ][ 3 ] = { 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 }; /* INITIALIZE SIX PLANS FOR BACKUP */
int b1[ 3 ][ 3 ] = { 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 };
int c1[ 3 ][ 3 ] = { 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 };
int d1[ 3 ][ 3 ] = { 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 };
int e1[ 3 ][ 3 ] = { 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 };
int f1[ 3 ][ 3 ] = { 7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 };
int graphdriver = VGA,graphmode = VGAHI;
initgraph(
& graphdriver, & graphmode, "" );
errorcode
= graphresult();
if (errorcode != grOk) /* MEET ERROR */
{
/* SHOW THE ERROE */
printf(
" Graphics error: %s\n " , grapherrormsg(errorcode));
printf(
" Press any key to exit: " );
getch();
exit(
1 );
}
drawing(x,y,l);
/* DRAWING THE BIG SQUARE */
drawing(x
+ 400 ,y,l / 2 ); /* DRAWING THE SMALL SQUARE */
do
{
sign
= position % 3 ; /* COPY DATA TO SHOW */
copy (
& a, & top);
copy (
& b, & front);
copy (
& c, & side);
color(x,y,l);
/* SHOWING THE BIG SQUARE */
copy (
& e, & top);
change2(
& top, 1 );
copy (
& f, & front);
change2(
& front, 2 );
copy (
& d, & side);
color(x
+ 400 ,y,l / 2 ); /* SHOWING THE SMALL SQUARE */
setcolor(
14 );
arrow(x,y,l);
key
= bioskey( 0 ); /* READ KEYBORD */
switch (key)
{
case 283 :printf( " Esc " ); /* IF INPUT_KEY="ESC" TO EXIT THE PROGRAM */
goto end;
case 20480 :setcolor( 0 ); /* IF INPUT_KEY="DOWN" TO CHANGE THE ARROW */
arrow(x,y,l);
if (position == 8 )
position
= 0 ;
else
position
= position + 1 ;
break ; /* IF INPUT_KEY="UP" TO CHANGE THE ARROW */
case 18432 :setcolor( 0 );
arrow(x,y,l);
if (position == 0 )
position
= 8 ;
else
position
= position - 1 ;
break ;
case 19712 :input = 1 ; /* IF INPUT_KEY="RIGHT" TO MOVE FORWARD */
break ;
case 19200 :input = 3 ; /* IF INPUT_KEY="LEFT" TO MOVE REWARD */
break ;
case 7181 : setcolor( 0 ); /* IF INPUT_KEY="ENTER" TO RELOAD */
arrow(x,y,l);
copy(
& a1, & a);
copy(
& b1, & b);
copy(
& c1, & c);
copy(
& d1, & d);
copy(
& e1, & e);
copy(
& f1, & f);
position
= 0 ;
break ;
case 14624 :setcolor( 0 ); /* IF INPUT_KEY="SPACE" TO RANDOM MOVE */
arrow(x,y,l);
randomize();
position
= random( 9 );
input
= 1 ;
break ;
}
if (input != 0 ) /* USE POSITION TO JUDGE AND CHANGE DATA */
{
/* IF INPUT=0,CHANGE CLOCKWISE,IF INPUT=3,CHANGE REVERSE-CLOCKWISE */
for (count = 0 ;count < input;count ++ )
{
if (position / 3 == 0 ) /* IF NEED TO CHANGE TOP */
{
change2(
& b, 1 );
change2(
& c, 1 );
change2(
& d, 3 );
change2(
& f, 1 );
change1(
& b, & c);
change1(
& c, & d);
change1(
& d, & f);
change1(
& f, & b);
change2(
& b, 3 );
change2(
& c, 3 );
change2(
& d, 1 );
change2(
& f, 3 );
temp[
0 ] = 0 ;temp[ 1 ] = 0 ;temp[ 2 ] = 0 ;
if (position % 3 == 0 )
change2(
& a, 1 );
if (position % 3 == 2 )
change2(
& e, 1 );
}

if (position / 3 == 1 ) /* IF NEED TO CHANGE FRONT */
{
change1(
& a, & b);
change1(
& b, & e);
change1(
& e, & d);
change1(
& d, & a);
temp[
0 ] = 0 ;temp[ 1 ] = 0 ;temp[ 2 ] = 0 ;
if (position % 3 == 0 )
change2(
& f, 1 );
if (position % 3 == 2 )
change2(
& c, 1 );
}

if (position / 3 == 2 ) /* IF NEED TO CHANGE SIDE */
{
change2(
& a, 3 );
change2(
& e, 1 );
change2(
& f, 2 );
change1(
& a, & c);
change1(
& c, & e);
change1(
& e, & f);
change1(
& f, & a);
change2(
& a, 1 );
change2(
& e, 3 );
change2(
& f, 2 );
temp[
0 ] = 0 ;temp[ 1 ] = 0 ;temp[ 2 ] = 0 ;
if (position % 3 == 0 )
change2(
& b, 1 );
if (position % 3 == 2 )
change2(
& d, 1 );
}
}
input
= 0 ;
}
}
while ( 1 );
end:
clearviewport();
/* CLEAR THE SCREEN */
}

drawing(
int inital_x, int inital_y, int lenth) /* DRAWING THE STRUCTURE OF THE PICTURE */
{
setlinestyle(
0 , 0 , 3 );
line(inital_x
+ 1.5 * lenth,inital_y + 0 ,inital_x + 4.5 * lenth,inital_y + 0 );
line(inital_x
+ 1.0 * lenth,inital_y + 0.5 * lenth,inital_x + 4.0 * lenth,inital_y + 0.5 * lenth);
line(inital_x
+ 0.5 * lenth,inital_y + 1 * lenth,inital_x + 3.5 * lenth,inital_y + 1 * lenth);
line(inital_x
+ 0 ,inital_y + 1.5 * lenth,inital_x + 3 * lenth,inital_y + 1.5 * lenth);
line(inital_x
+ 0 ,inital_y + 2.5 * lenth,inital_x + 3 * lenth,inital_y + 2.5 * lenth);
line(inital_x
+ 0 ,inital_y + 3.5 * lenth,inital_x + 3 * lenth,inital_y + 3.5 * lenth);
line(inital_x
+ 0 ,inital_y + 4.5 * lenth,inital_x + 3 * lenth,inital_y + 4.5 * lenth);
line(inital_x
+ 0 ,inital_y + 1.5 * lenth,inital_x + 0 ,inital_y + 4.5 * lenth);
line(inital_x
+ 1.0 * lenth,inital_y + 1.5 * lenth,inital_x + 1.0 * lenth,inital_y + 4.5 * lenth);
line(inital_x
+ 2.0 * lenth,inital_y + 1.5 * lenth,inital_x + 2.0 * lenth,inital_y + 4.5 * lenth);
line(inital_x
+ 3.0 * lenth,inital_y + 1.5 * lenth,inital_x + 3.0 * lenth,inital_y + 4.5 * lenth);
line(inital_x
+ 3.5 * lenth,inital_y + 1.0 * lenth,inital_x + 3.5 * lenth,inital_y + 4.0 * lenth);
line(inital_x
+ 4.0 * lenth,inital_y + 0.5 * lenth,inital_x + 4.0 * lenth,inital_y + 3.5 * lenth);
line(inital_x
+ 4.5 * lenth,inital_y + 0 ,inital_x + 4.5 * lenth,inital_y + 3.0 * lenth);
line(inital_x
+ 1.5 * lenth,inital_y + 0 ,inital_x + 0 ,inital_y + 1.5 * lenth);
line(inital_x
+ 2.5 * lenth,inital_y + 0 ,inital_x + 1.0 * lenth,inital_y + 1.5 * lenth);
line(inital_x
+ 3.5 * lenth,inital_y + 0 ,inital_x + 2.0 * lenth,inital_y + 1.5 * lenth);
line(inital_x
+ 4.5 * lenth,inital_y + 0 ,inital_x + 3.0 * lenth,inital_y + 1.5 * lenth);
line(inital_x
+ 4.5 * lenth,inital_y + 1.0 * lenth,inital_x + 3.0 * lenth,inital_y + 2.5 * lenth);
line(inital_x
+ 4.5 * lenth,inital_y + 2.0 * lenth,inital_x + 3.0 * lenth,inital_y + 3.5 * lenth);
line(inital_x
+ 4.5 * lenth,inital_y + 3.0 * lenth,inital_x + 3.0 * lenth,inital_y + 4.5 * lenth);
}
color(
int inital_x, int inital_y, int lenth) /* FILL COLOR BY THE DATA */
{
int i,j;
int color_num;
int x1 = inital_x + 1.5 * lenth;
int y1 = inital_y + 0.25 * lenth;
int x2,y2;
for (i = 0 ;i < 3 ;i ++ )
{
x2
= x1;
y2
= y1;
for (j = 0 ;j < 3 ;j ++ )
{
color_num
= top[i][j];
setfillstyle(
1 ,color_num);
floodfill(x2,y2,WHITE);
x2
= x2 + lenth;
}
x1
= x1 - 0.5 * lenth;
y1
= y1 + 0.5 * lenth;
}
x1
= inital_x + 0.5 * lenth;
y1
= inital_y + 2 * lenth;
for (i = 0 ;i < 3 ;i ++ )
{
x2
= x1;
y2
= y1;
for (j = 0 ;j < 3 ;j ++ )
{
color_num
= front[i][j];
setfillstyle(
1 ,color_num);
floodfill(x2,y2,WHITE);
x2
= x2 + lenth;
}
y1
= y1 + lenth;
}
x1
= inital_x + 3.25 * lenth;
y1
= inital_y + 2 * lenth;
for (i = 0 ;i < 3 ;i ++ )
{
x2
= x1;
y2
= y1;
for (j = 0 ;j < 3 ;j ++ )
{
color_num
= side[i][j];
setfillstyle(
1 ,color_num);
floodfill(x2,y2,WHITE);
x2
= x2 + 0.5 * lenth;
y2
= y2 - 0.5 * lenth;
}
y1
= y1 + lenth;
}
}
arrow(
int inital_x, int inital_y, int lenth) /* DRAWING THE ARROW BY THE POSITION */
{
if (position <= 2 )
{
line(inital_x
- 30 ,inital_y + 2 * lenth - 3 + position * lenth,inital_x - 20 ,inital_y + 2 * lenth - 3 + position * lenth);
line(inital_x
- 30 ,inital_y + 2 * lenth + 3 + position * lenth,inital_x - 20 ,inital_y + 2 * lenth + 3 + position * lenth);
line(inital_x
- 21 ,inital_y + 2 * lenth - 6 + position * lenth,inital_x - 15 ,inital_y + 2 * lenth + position * lenth);
line(inital_x
- 21 ,inital_y + 2 * lenth + 6 + position * lenth,inital_x - 15 ,inital_y + 2 * lenth + position * lenth);
}
if (position <= 5 && position > 2 )
{
line(inital_x
+ 0.5 * lenth + (position - 3 ) * lenth - 3 ,inital_y + 4.5 * lenth + 30 ,inital_x + 0.5 * lenth + (position - 3 ) * lenth - 3 ,inital_y + 4.5 * lenth + 20 );
line(inital_x
+ 0.5 * lenth + (position - 3 ) * lenth + 3 ,inital_y + 4.5 * lenth + 30 ,inital_x + 0.5 * lenth + (position - 3 ) * lenth + 3 ,inital_y + 4.5 * lenth + 20 );
line(inital_x
+ 0.5 * lenth + (position - 3 ) * lenth - 6 ,inital_y + 4.5 * lenth + 21 ,inital_x + 0.5 * lenth + (position - 3 ) * lenth,inital_y + 4.5 * lenth + 15 );
line(inital_x
+ 0.5 * lenth + (position - 3 ) * lenth + 6 ,inital_y + 4.5 * lenth + 21 ,inital_x + 0.5 * lenth + (position - 3 ) * lenth,inital_y + 4.5 * lenth + 15 );
}
if (position > 5 )
{
line(inital_x
+ 3.25 * lenth + (position - 6 ) * lenth * 0.5 - 3 + 5 ,inital_y + 4.5 * lenth + 30 - (position - 5 ) * 0.5 * lenth + 20 ,inital_x + 3.25 * lenth + (position - 6 ) * 0.5 * lenth - 3 + 5 ,inital_y + 4.5 * lenth + 20 - (position - 5 ) * 0.5 * lenth + 20 );
line(inital_x
+ 3.25 * lenth + (position - 6 ) * lenth * 0.5 + 3 + 5 ,inital_y + 4.5 * lenth + 30 - (position - 5 ) * 0.5 * lenth + 20 ,inital_x + 3.25 * lenth + (position - 6 ) * 0.5 * lenth + 3 + 5 ,inital_y + 4.5 * lenth + 20 - (position - 5 ) * 0.5 * lenth + 20 );
line(inital_x
+ 3.25 * lenth + (position - 6 ) * lenth * 0.5 - 6 + 5 ,inital_y + 4.5 * lenth + 21 - (position - 5 ) * 0.5 * lenth + 20 ,inital_x + 3.25 * lenth + (position - 6 ) * 0.5 * lenth + 5 ,inital_y + 4.5 * lenth + 15 - (position - 5 ) * 0.5 * lenth + 20 );
line(inital_x
+ 3.25 * lenth + (position - 6 ) * lenth * 0.5 + 6 + 5 ,inital_y + 4.5 * lenth + 21 - (position - 5 ) * 0.5 * lenth + 20 ,inital_x + 3.25 * lenth + (position - 6 ) * 0.5 * lenth + 5 ,inital_y + 4.5 * lenth + 15 - (position - 5 ) * 0.5 * lenth + 20 );
}
}
copy (
int * p, int * q)
{
int i,j;
for (i = 0 ;i < 3 ;i ++ )
{
for (j = 0 ;j < 3 ;j ++ )
{
* q =* p;
p
++ ;
q
++ ;
}
}
}
change1(
int * p, int * q) /* CONVERT TWO ARRAY */
{
int i,ling;
p
= p + sign;
q
= q + sign;
if (temp[ 0 ] == 0 )
{
for (i = 0 ;i < 3 ;i ++ )
{
temp[i]
=* p;
p
= p + 3 ;
}
p
= p - 9 ;
}
for (i = 0 ;i < 3 ;i ++ )
{
ling
=* q;
* q = temp[i];
temp[i]
= ling;
p
= p + 3 ;
q
= q + 3 ;
}
}
change2(
int * p, int x) /* CHANGE THE ARRAY BY REVERSE-CLOCKWISE */
{
int i,j,k;
for (k = 0 ;k < x;k ++ )
{
for (i = 0 ;i < 3 ;i ++ )
{
for (j = 2 ;j >= 0 ;j -- )
{
new [j][i] =* p;
p
= p + 1 ;
}
}
p
= p - 9 ;
for (i = 0 ;i < 3 ;i ++ )
{
for (j = 0 ;j < 3 ;j ++ )
{
* p = new [i][j];
p
++ ;
}
}
p
= p - 9 ;
}
}

 

转载于:https://www.cnblogs.com/hyd10000/archive/2010/04/30/1725763.html

#include #include #include #include int a[3][3]={1,1,1,1,1,1,1,1,1}; /*INITIALIZE SIX PLANS*/ int b[3][3]={2,2,2,2,2,2,2,2,2}; int c[3][3]={4,4,4,4,4,4,4,4,4}; int d[3][3]={3,3,3,3,3,3,3,3,3}; int e[3][3]={5,5,5,5,5,5,5,5,5}; int f[3][3]={7,7,7,7,7,7,7,7,7}; int top[3][3],front[3][3],side[3][3]; int position=0,temp[3]={0,0,0},new[3][3]; /*POSITION ASSIGN THE ARROW POSITION*/ int sign; main() { int l=60,x=50,y=50,key,count,input=0,errorcode; /*L MEANS THE LENTH OF THE SQUARE,X MEANS THE INITAIL POSITION OF X,Y MEANS THE INITIAL POSITION OF Y*/ int a1[3][3]={1,1,1,1,1,1,1,1,1}; /*INITIALIZE SIX PLANS FOR BACKUP*/ int b1[3][3]={2,2,2,2,2,2,2,2,2}; int c1[3][3]={4,4,4,4,4,4,4,4,4}; int d1[3][3]={3,3,3,3,3,3,3,3,3}; int e1[3][3]={5,5,5,5,5,5,5,5,5}; int f1[3][3]={7,7,7,7,7,7,7,7,7}; int graphdriver=VGA,graphmode=VGAHI; initgraph(&graphdriver,&graphmode,""); errorcode = graphresult(); if (errorcode != grOk) /*MEET ERROR*/ { /*SHOW THE ERROE*/ printf("Graphics error: %s\n", grapherrormsg(errorcode)); printf("Press any key to exit:"); getch(); exit(1); } drawing(x,y,l); /*DRAWING THE BIG SQUARE*/ drawing(x+400,y,l/2); /*DRAWING THE SMALL SQUARE*/ do { sign=position%3; /*COPY DATA TO SHOW*/ copy (&a,&top); copy (&b,&front); copy (&c,&side); color(x,y,l); /*SHOWING THE BIG SQUARE*/ copy (&e,&top); change2(&top,1); copy (&f,&front); change2(&front,2); copy (&d,&side); color(x+400,y,l/2); /*SHOWING THE SMALL SQUARE*/ setcolor(14); arrow(x,y,l); key=bioskey(0); /*READ KEYBORD*/ switch(key) { case 283:printf("Esc"); /*IF INPUT_KEY="ESC" TO EXIT THE PROGRAM*/ goto end; case 20480:setcolor(0); /*IF INPUT_KEY="DOWN" TO CHANGE THE ARROW*/ arrow(x,y,l); if(position==8) position=0; else position=position+1; break; /*IF INPUT_KEY="UP" TO CHANGE THE ARROW*/ case 18432:setcolor(0); arrow(x,y,l); if(position==0) position=8; else position=position-1;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值