《C语言程序设计》
题目走迷宫游戏程序设计 ________
、内容
本系统主要实现了走迷宫游戏,执行游戏的时候出现迷宫图案,每次各不相同,但是入口均在左上角,出口在右下角,出入口各有“出”、“入”提示。
人物为㊣,“■”表示墙,
外围为一圈墙,空白部分为可行走的路,使用“上”、“下”、“左”、“右”键操作㊣,当遭遇
“墙”时无法前进,操作“■”上下左右移动,直至走到出口,游戏胜利。
当无法走出迷宫时,按“ Esc”键即可退出游戏。
上机环境
操作系统:wi ndows XP
开发工具:vc6.0
三、函数调用关系图
图一:函数调用关系图
四、各函数功能说明
main函数:主函数;
create函数:随机生成迷宫;
paint函数:画出迷宫;
game函数:开始游戏;
gotoxy函数:在文本窗口设置光标;
get_key函数:接受按键;
五、算法描述或流程图
图二:算法流程图六、程序运行效果图
七、总结
课程设计是培养学生综合运用所学知识,发现,提出,分析和解决实际问题,锻炼实践
能力的重要环节。
大学来说掌握计算机开发技术是十分重要的。
在程序设计的过程中,我遇
到了不少的问题,请教过学姐或者学长,也请教了老师,最后将程序设计好了。
回顾起此次
课程设计,我感慨良多,从拿到题目到完成整个编程,从理论到实践,在整整两个星期的日
子里,我学到了很多很多的东西,同时不仅可以巩固了以前所学过的知识,而且还学到了很
多在书本上所没有学到过的知识,我发现c语言是一门有趣的课程,对它产生了很大的兴趣。
并且我明白了细心真的很重要,有时候就是因为一点点的小错误,而导致程序无法调试,并
且需要花较长的时间去寻找错误。
细心很重要的。
两个星期前的现在,当听到老师布置给我们的题目时,我们都蒙了,这么难的题目我们
怎么会啊,我们只能尽我们自己最大的努力把程序给写出来,虽然知道这一路肯定是异常的
艰苦,但豁出去了。
上网查资料、去图书馆查,查相关的函数,经过两三天的努力,我把框架弄出来了,可是还有计算难题摆在我的面前,真的是个难题,自从把框架弄好了以后就没
有进展了,眼看一个星期快过去了,我那个急啊,可是急也没有用。
我坚持,终于工夫不负有心人,大功告成了。
通过这次课程设计使我懂得了理论与实际相结合是很重要的,只有理论知识是远远不够
的,只有把所学的理论知识和实践相结合起来,从理论中得出结论,才能真正为社会服务,从而提高自己的实际动手能力和独立思考能力。
在设计的过程中遇到问题,可以说得是困难
重重,这毕竟是第一次做,难免会遇到各种各样的问题,同时在设计的过程中发现了自己的
不足之处,对以前学过的知识理解得不够深刻,掌握的不够牢固,比如说结构体……通过这
次课程设计之后,一定把以前所学过的知识重新温故。
感谢老师的悉心指导,使我们能够顺利的完成这次课程设计,使我们收获颇多,谢谢!
八、参考文献
[1]李春葆曾平喻丹丹.C语言程序设计教程•清华大学出版社,2011
[2]李春葆尹为民李蓉蓉蒋晶钰喻丹丹安杨.数据结构教程•清华大学出版社,2009
九、程序清单
//将方向打乱
for(i=0;i<4;i++)
{
j=rand()%4; t=c【i]【0];c【i]【0]=c[j]【0];c[j]【0]=t; t=c[i][1];c[i][1]=c[j][1];c[j][1]=t; } map[x][y]=Road;
for(i=0;i<4;i++) if(map[x+2*c[i][0]][y+2*c[i][1]]==Wall) { map[x+c[i][0]][y+c[i][1]]=Road;
create(x+2*c[i][0],y+2*c[i][1]);
}
}
int get_key() // 接收按键
{
char c;
while(c=getch())
{
if(c==27) return Esc; //Esc if(c!=-32)continue;
c=getch();
if(c==72) return Up; // 上
if(c==80) return Down; // 下
if(c==75) return Left; // 左
if(c==77) return Right; // 右
}
return 0; }
void paint(int x,int y) // 画迷宫
{
gotoxy(2*y-2,x-1);
switch(map[x][y])
{
case Start:
printf("入”);break;// 画入口
case End:
printf(" 出");break; // 画出口
case Wall:
printf(" ■ ");break; // 画墙
case Road:
printf(" ");break; // 画路
}
}
void game() }
break;
case Left: // 向左走
if(map[x][y-1]!=Wall)
{
paint(x,y);
y--; }
break;
case Right: // 向右走
if(map[x][y+1]!=Wall)
{
paint(x,y);
y++; }
break;
}
}
}
int main()
{
system("color 04");
int i,j;
srand((unsigned)time(NULL)); // 初始化随即种子
for(i=0;i<=Height+1;i++)
for(j=0;j<=Width+1;j++)
if(i==0||i==Height+1||j==0||j==Width+1) // 初
始化迷宫
map[i][j]=Road;
else map[i][j]=Wall;
create(2*(rand()%(Height/2)+1),2*(rand()%(Wid th/2)+1)); // 从随机一个点开始生成迷宫,该点行
列都为偶数
for(i=0;i<=Height+1;i++) // 边界处理
{
map[i][0]=Wall;
map[i][Width+1]=Wall;
}
for(j=0;j<=Width+1;j++) // 边界处理
{
map[0][j]=Wall;
map[Height+1][j]=Wall;
} map[2][1]=Start; // 给定入口。