⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 魔方算法.txt

📁 学习(编程技巧_编程知识_程序代码),是学习编程不可多得的学习精验
💻 TXT
字号:
魔方算法
 

--------------------------------------------------------------------------------
 
第八军团 时间:2004-1-9 15:31:45 
   
#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: %sn", 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[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[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[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=*p; 
p=p+3; 
} 
p=p-9; 
} 
for(i=0;i<3;i++) 
{ 
ling=*q; 
*q=temp; 
temp=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]=*p; 
p=p+1; 
} 
} 
p=p-9; 
for (i=0;i<3;i++) 
{ 
for (j=0;j<3;j++) 
{ 
*p=new[j]; 
p++; 
} 
} 
p=p-9; 
} 
}  
 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -