您现在的位置:计算机技术学习网 > 技术中心 > 编程开发 > C >

C语言课程设计_迷宫问题

来源:不详 责任编辑:栏目编辑 发表时间:2013-07-02 01:54 点击:
[C语言课程设计]迷宫问题 代码

#include <graphics.h>
#include <stdlib.h>
#include <stdio.h>
#include <conio.h>
#include <dos.h>
#define N 20/*迷宫的大小,可改变*/
int  oldmap[N][N];/*递归用的数组,用全局变量节约时间*/
int  yes=0;/*yes是判断是否找到路的标志,1找到,0没找到*/
int  way[100][2],wayn=0;/*way数组是显示路线用的,wayn是统计走了几个格子*/
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]);/*为了8个方向的递归,把旧迷宫图拷贝给新数组*/
int  FindWay(int (*x)[N],int i,int j);/*自动探索函数*/
void MapRand(int (*x)[N]);/*随机生成迷宫函数*/
void PrMap(int (*x)[N]);/*输出迷宫图函数*/
void Result(void);/*输出结果处理*/
void Find(void);/*成功处理*/
void NotFind(void);/*失败处理*/
void main(void)/*主函数*/
{
   int map[N][N]; /*迷宫数组*/
   char ch;
   clrscr();
   printf("\n Please select hand(1) else auto\n");/*选择探索方式*/
   scanf("%c",&ch);
   Init();  /*初始化*/
   MapRand(map);/*生成迷宫*/
   PrMap(map);/*显示迷宫图*/
   if(ch=='1')
      PeopleFind(map);/*人工探索*/
   else
      FindWay(map,1,1);/*系统自动从下标1,1的地方开始探索*/
   Result();/*输出结果*/
   Close();
}
void Init(void)/*图形初始化*/
{
   int gd=DETECT,gm;
   initgraph(&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)/*判断x,y的变化,8个方向的变化*/
   {
      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)--;break; /*左下*/
      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");
   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");/*以上是画8个方向的控制介绍*/
   setcolor(YELLOW);
   outtextxy(420,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)/*如果按下的不
    发表评论
    请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
    用户名: 验证码:点击我更换图片
    最新评论 更多>>

    推荐热点

    • Glib实例学习(2)双链表
    • C程序员要学C++吗?
    • C++中实现Singleton的正确方法
    • 编程思维训练(一)
    • 【编程好习惯】引入中间变量使程序更易读
    • 在C++中通过模板规避潜在错误
    • 在C++中通过模板去除强制转换
    • 【编程好习惯】减少搜索头文件的目录数
    网站首页 - 友情链接 - 网站地图 - TAG标签 - RSS订阅 - 内容搜索
    Copyright © 2008-2015 计算机技术学习交流网. 版权所有

    豫ICP备11007008号-1