迷宫设计课程设计论文_第1页
迷宫设计课程设计论文_第2页
迷宫设计课程设计论文_第3页
迷宫设计课程设计论文_第4页
迷宫设计课程设计论文_第5页
已阅读5页,还剩13页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、成 绩 评 定 表学生姓名班级学号专 业统计学课程设计题目迷宫评语组长签字:成绩日期 20 年 月 日课程设计任务书学 院专 业统计学学生姓名班级学号课程设计题目迷宫实践教学要求与任务:设计要求(技术参数):1、 进一步培养学生结构化程序设计的思想,加深对高级语言基本语言要素和控制结构的理解。2、 独立完成有一定工作量的程序设计任务,同时强调好的程序设计风格。3、 掌握程序设计的常用算法。设计任务:运用学过的c语言知识编写一个迷宫游戏程序,并使使用者可通过简单的操作使用游戏。 工作计划与进度安排:第一周:第一天:查阅资料 第二、三天:程序设计 第四天:程序实现 第五天:答辩指导教师: 201

2、年 月 日专业负责人:201 年 月 日学院教学副院长:201 年 月 日摘 要迷宫是深受大家喜爱的游戏之一,本程序旨在生成一个美观逼真的迷宫图,它是随机生成的且迷宫大小可变,迷宫的大小为n*n,n为预定义为常数,修改n的值可以改变迷宫的大小(只要不超过屏幕的范围),而程序不必做修改。程序设计为需要人工操作检索通过,这利用了手动操作8个代表不同的方向的键位来实现。白色表示可走的路,蓝色表示墙壁,不可通过。此程序由主函数和几个辅助函数组成,完成游戏的运行和编辑。从而达到本次课程设计的目的。关键词:c语言;迷宫;编译;自定义函数。目 录摘 要31、设计内容与设计要求11、题目:12、设计目的:12

3、、功能与算法设计21、各模块功能描述:2(一)、主函数main()功能:2(二)、初始化函数init()功能:2(三)、迷宫生成函数maprand()功能:2(四)、迷宫显示函数prmap():2(五)、人工探索函数peoplefind():2(六)、结果处理函数result():23、流程图34、程序调试41、运行后的界面:42、输入语句:43、输入后游戏界面44、未发现通路显示结果:55、发现通路显示结果:56、将大小改成50后的结果:65、源程序76、总 结127、参考文献131、设计内容与设计要求1、题目: 迷宫以一个mn的长方形表示迷宫,0和1分别表示迷宫中的通路和障碍。设计一个程序

4、,对任意设定的迷宫,求出一条从入口到出口的通路,或得出没有通路的结论。2、设计目的: 熟练掌握本学期中学习的c语言课程内容。同时希望能用这种类似的小游戏让当代人在纷乱忙碌的生活中获得一些单纯的快乐。2、功能与算法设计1、各模块功能描述:整个系统主要由以下几个模块组成:(一)、主函数main()功能:调用图形初始化函数,接着调用迷宫生成函数和迷宫显示函数。然后根据输入的字符调用人工探索函数。探索完毕进行结果处理,最后关闭图形系统,程序结束。(二)、初始化函数init()功能:由于迷宫是在图形方式下显示的,所以要进行图形初始化。(三)、迷宫生成函数maprand()功能:用数组map表示一个迷宫,

5、要随机生成迷宫,数组元素的值利用随机函数生成0或1的数。void maprandint i,jcleardevice();randomize();for(i=0;in;i+)for(j=0;jn;j+)i=0|i=n-1|j=0|j=n-1ni=1&j=1|i=n-2&j=n-2nymapij=1;ymapij=random(2)mapij=0(四)、迷宫显示函数prmap():根据数组map的值输出迷宫图。利用函数setfillstyle()设置图形实体填充样式bar()函数输出矩形块。数组元素的下标为矩形块的中心坐标。利用双重循环语句可以完成迷宫图的显示。void prmapint i,j

6、for(i=0;in;i+)for(j=0;jn;j+)nmapij=01setfillstyle(solid_fill,blue); bar(100+j*15-6,50+i*15-6,100+j*15+6,50+i*15+6);ysetfillstyle(solid_fill,white); bar(100+j*15-6,50+i*15-6,100+j*15+6,50+i*15+6);(五)、人工探索函数peoplefind():首先输出函数图以及人工控制操作图示,红色探索出现在左上角,采用人工控制8个方向的移动,选用键盘上邻近的八个字符即“q”“w”“e”“a”“d”“z”“x”“c”代表

7、8个方向,按了字符后,对应方向不是墙壁,可以将红色探囊物移至相应位置按回车显示结果。(六)、结果处理函数result():最终结果是找到和没找到两种情况,在程序设计中设计全局变量yes,根据yes的值进行处理,若其是0,调用函数notfind(),若为1,调用函数find()。(七)、图形关闭函数close();请用closegraph()关闭图形系统,程序结束。3、流程图开始预定义主函数main()定义二维数组mapnn消屏clrscr()输出字符串并初始化init随机生成迷宫maprand()手动搜索函数peoplefind()p输出结果result()关闭图像close()结束4、程序调

8、试1、运行后的界面:2、输入语句:3、输入后游戏界面4、未发现通路显示结果:5、发现通路显示结果:6、将大小改成50后的结果:5、源程序#include #include #include #include #include #define n 20int oldmapnn;int yes=0;int way1002,wayn=0;void init(void);void close(void);void drawpeople(int *x,int *y,int n);void peoplefind(int (*x)n);void waycopy(int (*x)n,int (*y)n);vo

9、id maprand(int (*x)n);void prmap(int (*x)n);void result(void);void find(void);void notfind(void);void main(void) int mapnn; char ch; clrscr(); printf(n please select somethingn); scanf(%c,&ch); init(); maprand(map); prmap(map); peoplefind(map); result(); close();void init(void) int gd=detect,gm; ini

10、tgraph(&gd,&gm,c:tc);void drawpeople(int *x,int *y,int n) setfillstyle(solid_fill,white); bar(100+(*y)*15-6,50+(*x)*15-6,100+(*y)*15+6,50+(*x)*15+6); switch(n) case 1: (*x)-;break; case 2: (*x)-;(*y)+;break ; case 3: (*y)+;break; case 4: (*x)+;(*y)+;break; case 5: (*x)+;break; case 6: (*x)+;(*y)-;br

11、eak; case 7: (*y)-;break; case 8: (*x)-;(*y)-;break; setfillstyle(solid_fill,red); bar(100+(*y)*15-6,50+(*x)*15-6,100+(*y)*15+6,50+(*x)*15+6);void peoplefind(int (*map)n) int x,y; char c=0; x=y=1; setcolor(11); line(500,200,550,200); outtextxy(570,197,d); line(500,200,450,200); outtextxy(430,197,a);

12、 line(500,200,500,150); outtextxy(497,130,w); line(500,200,500,250); outtextxy(497,270,x); line(500,200,450,150); outtextxy(445,130,q); line(500,200,550,150); outtextxy(550,130,e); line(500,200,450,250); outtextxy(445,270,z); line(500,200,550,250); outtextxy(550,270,c); setcolor(yellow); outtextxy(4

13、20,290,press enter to end); setfillstyle(solid_fill,red); bar(100+y*15-6,50+x*15-6,100+y*15+6,50+x*15+6); while(c!=13) c=getch(); if(c=w&mapx-1y!=1) drawpeople(&x,&y,1); else if(c=e&mapx-1y+1!=1) drawpeople(&x,&y,2); else if(c=d&mapxy+1!=1) drawpeople(&x,&y,3); else if(c=c&mapx+1y+1!=1) drawpeople(&

14、x,&y,4); else if(c=x&mapx+1y!=1) drawpeople(&x,&y,5); else if(c=z&mapx+1y-1!=1)drawpeople(&x,&y,6); elseif(c=a&mapxy-1!=1) drawpeople(&x,&y,7); else if(c=q&mapx-1y-1!=1) drawpeople(&x,&y,8); setfillstyle(solid_fill,white); bar(100+y*15-6,50+x*15-6,100+y*15+6,50+x*15+6); if(x=n-2&y=n-2) yes=1; void w

15、aycopy(int (*oldmap)n,int (*map)n) int i,j; for(i=0;in;i+) for(j=0;jn;j+) oldmapij=mapij;void maprand(int (*map)n) int i,j; cleardevice(); randomize(); for(i=0;in;i+) for(j=0;jn;j+) if(i=0|i=n-1|j=0|j=n-1) mapij=1; else if(i=1&j=1|i=n-2&j=n-2) mapij=0; else mapij=random(2); void prmap(int (*map)n) i

16、nt i,j; for(i=0;in;i+) for(j=0;j=0;i-) bar(100+wayi1*15-6,50+wayi0*15-6,100+ wayi1*15+6,50+wayi0*15+6); sleep(1); bar(100+(n-2)*15-6,50+(n-2)*15-6,100+(n-2)*15+6,50+(n-2)*15+6); setcolor(green); settextstyle(0,0,2); outtextxy(130,400,find a way!);void notfind(void) setcolor(green); settextstyle(0,0,

17、2); outtextxy(130,400,not find a way!);void result(void) if(yes) find(); else notfind(); getch();void close(void) closegraph();6、总 结通过一个星期的课程设计,使我对c语言程序设计有了一个更加深入的认识,从刚开始的初略的认识到有了比较深入的认识,能够比较灵活的运用。c语言是一门比较灵活、有趣而且实践性非常强的课程,我们要从它的实践运用中,体会到了学习c语言的乐趣和好处。在课程设计的这段时间里,我学到了许多东西,同时也使我对以前学的东西有了一个更深更透彻的理解。比如:能

18、够灵活的运用双重循环,switch语句,结构体的定义、引用、使用,指针的定义、使用等。虽然对c语言编程还有许多不明白,但这段时间我真的获易匪浅。以前上编程课,我基本上都没有深入理解自己所编的程序,常常就是仿照书本编一个程序,再运行几遍,没错就万事大吉,根本就没管它了。但这次就不同,对每个程序都有一个深入透彻的理解,常常不懂就问同学或老师,直至把它弄懂为止。c语言限制比较的宽松,我们在编程的时候更应该仔细,一个小小的错误都可能导致程序的无法编译。所以对于大的程序,我们更应该先编好主程序,再一个一个模块的编。这样大大的缩短了编程的时间同时又提高了程序的可读性。 通过课程设计,使我对c语言的运用有了更深刻的认识。使我对c语言的实践应用更加期待,更加好奇,我相信c语言对我以

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论