收藏 分销(赏)

魔方设计全图.doc

上传人:xrp****65 文档编号:7569105 上传时间:2025-01-09 格式:DOC 页数:19 大小:130.50KB 下载积分:10 金币
下载 相关 举报
魔方设计全图.doc_第1页
第1页 / 共19页
魔方设计全图.doc_第2页
第2页 / 共19页


点击查看更多>>
资源描述
课程设计任务书 学 院 理 学 院 专 业 光信息科学与技术 学生姓名 *** 班级学号 1009020216 课程名称 C语言程序设计课程设计 课 程 设 计 (论文)题目 虚幻魔方 设计要求(技术参数): 通过本教学环节的编程实践,进一步熟悉和巩固C语言语法知识和程序设计的基本方法。了解结构化程序设计,培养自顶而下、逐步细化的编程思维方式。加深学生对理论知识的理解,提高对所学知识的综合运用能力。 设计任务: 实现魔方的虚拟化,在虚拟中实现魔方的着色,变换,退出等一系列操作! 计划与进度安排: 第一天:查资料 第二天:程序设计 第三、四天:调试程序 第五天:论文答辩 成绩: 指导教师(签字) 年 月 日 专业负责人(签字): 年 月 日 主管院长(签字) 年 月 日 摘要 该虚幻魔方是用c语言编写的一个小型的游戏,该游戏通过自己编写的函数来魔方的着色,变换,复原,随机转换等功能! 其中通过up ,down来实现光标的移动,通过left,right来实现模仿的转动,通过enter实现魔方的复原,通过space实现魔方的随机转动,通过Esc实现魔方游戏的退出! 该函数的实现主要依靠库函数然后自己编写的函数来实现的! 关键字:魔方 游戏 目录 一 总体模块图 3 二 主函数流程图 4 2.1drawing( ) 作图函数流程图 5 2.2 color( )填色函数. 6 2.3 arrow( ) 指针移动函数 7 2.4 change1( )交换函数 8 2.5 changge2( )对置函数 9 三 C源程序: 10 四 总结 18 五 参考文献 18 一 总体模块图 着色 建造魔方 虚幻魔方 退 出 移动指针 转动魔方 复原 随即转动 二 主函数流程图 开辟6个3*3的二维数组并赋初值 选择图形显示器,显示模式,文件路径 构造魔方 随几转动 逆时针旋转魔方 顺时针旋转魔方 改变指针 给魔方着色 end Esc down 改变指针 up right K=? left 复原 space enter While(1) end: clearviewport(); 2.1drawing( ) 作图函数流程图 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); 2.2 color( )填色函数. x1=inital_x+1.5*lenth; y1=inital_y+0.25*lenth For j=0 to 3 x2=x1;y2=y1; For j=0 to 3 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 to 3 x2=x1;y2=y1; For j=0 to 3 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 to 3 x2=x1;y2=y1; For j=0 to 3 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; 2.3 arrow( ) 指针移动函数 position<=2? 真 假 真 position<=5&&position>2? 假 构建魔方 构建魔方 真 position>5? 假 构建魔方 2.4 copy ( )复制函数 For i=0 to 3 For j=0 to 3 *q=*p; p++; q++; 2.5 change1( )交换函数 p=p+sign;q=q+sign; temp[0]==0 ? 真 假 For i=0 to 3 temp[i]=*p; p=p+3; p=p-9; For i=0 to 3 ling=*q;*q=temp[i];temp[i]=ling; p=p+3;q=q+3; 2.6 changge2( )对置函数 For k=0 to x For i=0 to 3 For j=2 to 0(等于) new[j][i]=*p; p=p+1; p=p-9; For i=0 to 3 For j=0 to 3 *p=new[i][j]; p++; p=p-9; 三 C源程序 #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}; 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]; int sign; main() { int l=60,x=50,y=50,key,count,input=0,errorcode; int a1[3][3]={1,1,1,1,1,1,1,1,1}; 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) { printf("Graphics error: %s\n", grapherrormsg(errorcode)); printf("Press any key to exit:"); getch(); exit(1); } drawing(x,y,l); drawing(x+400,y,l/2); do { sign=position%3; copy (&a,&top); copy (&b,&front); copy (&c,&side); color(x,y,l); copy (&e,&top); change2(&top,1); copy (&f,&front); change2(&front,2); copy (&d,&side); color(x+400,y,l/2); setcolor(14); arrow(x,y,l); key=bioskey(0); switch(key) { case 283:printf("Esc"); / goto end; case 20480:setcolor(0); arrow(x,y,l); if(position==8) position=0; else position=position+1; break; case 18432:setcolor(0); arrow(x,y,l); if(position==0) position=8; else position=position-1; break; case 19712:input=1; case 19200:input=3; break; case 7181: setcolor(0); 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); arrow(x,y,l); randomize(); position=random(9); input=1; break; } if(input!=0) { for(count=0;count<input;count++) { if(position/3==0) { 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) { 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) { 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(); } drawing(int inital_x,int inital_y,int lenth) { 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) { 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) { 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) { 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) { 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; } } 四 总结 在本次课程设计中,先使用结构化分析方法对系统进行分析,将整个系统细分为几个模块,再针对每个小模块编写代码。由于时间比较短,源代码70%来自网上下载的一个半成品,刚开始连编译都通不过。经过我精心调试,去掉了一些错误和漏洞,是之得到了完备。出于美观化考虑,增加了刷屏的应用,使程序好看一些,虽然没有界面。 经过不到两个星期的课程设计,我对C语言有了更进一步的认识和了解,要学好它要重在实践,要通过不断的上机操作才能更好的学习好它。以前上课都是一些枯燥的东西,到真正用的时候才发现没学的还有好多好多,以前在课堂上只听而不实践地学习方法是错误的,虽然课堂上看似学会了,可到实际操作时一些问题就会出现。但是通过课程设计把所学的东西用在了实践上,设计出来一些有用的东西,这几天精力都放在了编程上,但是有好多次总是运行不了,找来找去只是一些小小的错误。这几天深深地感到自己上机编程能力很不足,编的程序可读性不太好.以后要多多学习别人的经验,增强程序的可读性。但经过这几天的改错,在查错方面也积累了一些经验。这些天虽然是有点累,但是还是学到了许多没有学到的知识,感觉很有收获。 五 参考文献 [1]谭浩强等.C语言程序设计教程.北京:高等教育出版社,1997 [2]谭浩强.C程序设计.第2版.北京:清华大学出版社,1999 [3]郭浩志.C语言程序设计.北京.北京邮电大学出版社,2005 [4]林学焦.Turbo C2.0用户手册.北京.学苑出版社,1993 [5]谭浩强、张基温. C语言程序设计教程.北京:高等教育出版社,2006 [6][美]SCHILDT H.C语言大全[M].4版.王子恢等译.北京.电子工业出版社,2001 18
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传

当前位置:首页 > 应用文书 > 其他

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2026 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服