1、游戏程序魔方计算机技术基础课程设计C语言设计报告题目:游戏程序-魔方学院:机电工程学院 专业:工业工程班级:050109姓名:石万广指导教师: 设计日期:2007年1月5日题目:游戏程序魔方一、选题背景:问题的提出:大家小时候都玩过魔方,将它设计成一个小程序在C语言里,以便在游戏的过程中丰富我们对这门学科的了解!二、设计思想:魔方共有26块,其中6块位于每一面的中心位置,当魔方转动时它们是不动的;有8块位于顶角位置,各有三个不同颜色的小面;剩余12块各有二个不同颜色的小面。用比较常见的函数来实现魔方程序制作,主要应用画图的方法来制作,并且通过光标来完成魔方的运转,其主要的思想是用光标完成对魔方
2、颜色的改变从而获得胜利!三、程序流程图四、程序清单:#include#include#include#includeint a33=1,1,1,1,1,1,1,1,1; /*INITIALIZE SIX PLANS*/ int b33=2,2,2,2,2,2,2,2,2;int c33=4,4,4,4,4,4,4,4,4;int d33=3,3,3,3,3,3,3,3,3;int e33=5,5,5,5,5,5,5,5,5;int f33=7,7,7,7,7,7,7,7,7;int top33,front33,side33;int position=0,temp3=0,0,0,new33; /
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 a133=1,1,1,1,1,1,1,1,1; /*INITIALIZE SIX PLANS FOR BACKUP*/int b133=2,2,2,2,2,2,2,2,2;int c13
4、3=4,4,4,4,4,4,4,4,4;int d133=3,3,3,3,3,3,3,3,3;int e133=5,5,5,5,5,5,5,5,5;int f133=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(err
5、orcode);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*/dosign=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(&t
6、op,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
7、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:in
8、put=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);
9、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;countinput;count+) if(position/3=0) /*IF NEED TO CHANGE TOP*/ change2(&b,1); change2(&c,1); change2(&d,3); change2(&f,
10、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); temp0=0;temp1=0;temp2=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); change
11、1(&e,&d); change1(&d,&a); temp0=0;temp1=0;temp2=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); ch
12、ange2(&f,2); temp0=0;temp1=0;temp2=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,
13、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,in
14、ital_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
15、*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,ini
16、tal_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_
17、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*l
18、enth,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;i3;i+)x2=x1;y2=y1;for (j=0;j3;j+)color_num=topij;setfillstyle(1,color_num)
19、;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;i3;i+)x2=x1;y2=y1;for (j=0;j3;j+)color_num=frontij;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;i3;i+
20、)x2=x1;y2=y1;for (j=0;j3;j+)color_num=sideij;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,inita
21、l_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*le
22、nth+position*lenth);if(position2)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(in
23、ital_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(position5)line(inital_x+3.25*lenth+(position-6)*
24、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
25、+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,
26、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;i3;i+)for (j=0;j3;j+)*q=*p;p+;q+;change1(int *p,int *q) /*CONVERT TWO ARRAY*/int i,ling;p=p+sign;q=q+sign;if (temp0=0)for
27、(i=0;i3;i+)tempi=*p;p=p+3;p=p-9;for(i=0;i3;i+)ling=*q;*q=tempi;tempi=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;kx;k+)for(i=0;i=0;j-)newji=*p;p=p+1;p=p-9;for (i=0;i3;i+)for (j=0;j3;j+)*p=newij;p+;p=p-9; 五、设计结果说明: 可以通过键盘对魔方进行旋转,但是由于程序设计还不够完善,不能与鼠标并用进行操作,有待改进。
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1