基于C语言实现简单的走迷宫游戏

 更新时间:2016年04月18日 16:07:22   作者:LiaoGlenn  
这篇文章主要介绍了基于C语言实现简单的走迷宫游戏,用到双向队列,方便在运行完毕后输出经过的点,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

本文实例讲述了C语言实现简单的走迷宫游戏的方法,代码完整,便于读者理解。

学数据结构时用“栈”写的一个走迷宫程序,实际上用到双向队列,方便在运行完毕后输出经过的点。

#include <cstdio>
#include <deque>
#include <windows.h>
using namespace std;
class node
{
public:
 int x,y;
 int lastOpt;
};
deque<node> sta;
int x,y;
int endx,endy;
int mapW,mapH;
int steps;
int xopt[5]= {0,0,1,0,-1};
int yopt[5]= {0,1,0,-1,0};
int map[100][100]=
{
 
};
void init()
{
 x = 1;
 y = 1;
 endx = 1;
 endy = 9;
 mapH = 10;
 mapW = 10;
 for(int i=0; i<=mapH; i++)
  for(int j=0; j<=mapW; j++)
  {
   if(i==0 ||j==0 ||i==mapH||j==mapW)
    map[i][j]=-1;
  }
 
 steps=0;
 map[1][2]=-1;
 map[2][2]=-1;
 map[3][2]=-1;
 map[4][2]=-1;
 
 map[6][2]=-1;
 map[7][2]=-1;
 map[8][2]=-1;
 map[9][2]=-1;
 map[9][3]=-1;
 map[8][3]=-1;
 map[1][4]=-1;
 map[3][4]=-1;
 map[4][4]=-1;
 map[5][4]=-1;
 map[6][4]=-1;
 map[7][4]=-1;
 map[1][6]=-1;
 map[2][6]=-1;
 map[3][6]=-1;
 map[4][6]=-1;
 map[5][6]=-1;
 map[6][6]=-1;
 map[7][6]=-1;
 map[8][6]=-1;
 map[8][7]=-1;
 map[8][8]=-1;
 map[7][8]=-1;
 map[6][8]=-1;
 map[5][8]=-1;
 map[4][8]=-1;
 map[3][8]=-1;
 map[2][8]=-1;
 map[1][8]=-1;
 
 map[endx][endy]=5;
}
 
void dis()
{
 system("cls");
 int ori = map[x][y];
 map[x][y]=1;
 for(int i=0; i<=mapH; ++i)
 {
  for(int j=0; j<=mapW; ++j)
  {
   if(map[i][j]==0)
    printf(" ");
   else if(map[i][j]==-1)
    printf(" #");
   else if(map[i][j]==1)
    printf(" @");
   else if(map[i][j]==2)
    printf(" .");
   else if(map[i][j]==5)
    printf(" !");
  }
  cout<<i<<endl;
 }
 for(int j=0; j<=mapW; ++j)
  cout<<j<<" ";
 printf("\n\n > steps:%d Exit:(%d,%d)\n",steps,endx,endy);
 map[x][y] = ori;
}
int can(int n)
{
 if(map[x+xopt[n]][y+yopt[n]] == 0 || map[x+xopt[n]][y+yopt[n]] == 5)
  return 1;
 return 0;
 
}
void visit(int n)
{
 map[x][y]=2;
 x+=xopt[n];
 y+=yopt[n];
 node tem;
 tem.x = x;
 tem.y = y;
 tem.lastOpt = n;
 sta.push_back(tem);
 steps++;
}
int main()
{
 init();
 node tem;
 while( x != endx || y!=endy)
 {
 
  int cans = 0;
  for(int i=1; i<=4; i++)
  {
   if(can(i))
   {
    cans = 1;
    visit(i);
    break;
   }
  }
  if(!cans)
  {
   if(!sta.empty())
   {
    tem = sta.back();
    map[tem.x][tem.y]=0;
    sta.pop_back();
   }
   else
   {
    map[x][y]=2;
    x+=xopt[tem.lastOpt];
    x+=yopt[tem.lastOpt];
    dis();
    break;
   }
 
  }
 
  dis();
  Sleep(500);
 
 }
 if(x==endx && y == endy)
 cout<<"\n > i am finished....\n";
 else
 cout<<"\n > i am finished...but i can't find the right way\n";
 return 0;
}

效果图:

以上就是本文的全部内容,希望对大家学习C语言有所帮助。

相关文章

  • C++采用TLS线程局部存储的用法实例

    C++采用TLS线程局部存储的用法实例

    这篇文章主要介绍了C++采用TLS线程局部存储的用法实例,详细讲述了TLS索引及线程的操作,非常具有实用价值,需要的朋友可以参考下
    2014-10-10
  • C++实现简单职工信息管理系统

    C++实现简单职工信息管理系统

    本文给大家分享的是使用C++实现简单的职工信息管理系统的代码,本系统采用了面向对象的程序设计方法,所有的方法均以类为基础,感兴趣的小伙伴们可以参考一下
    2015-08-08
  • C++数位DP复杂度统计数字问题示例详解

    C++数位DP复杂度统计数字问题示例详解

    这篇文章主要为大家介绍了利用C++数位DP的复杂度来统计数字问题的示例实现过程详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升值加薪
    2021-11-11
  • C++学习之智能指针中的unique_ptr与shared_ptr

    C++学习之智能指针中的unique_ptr与shared_ptr

    吃独食的unique_ptr与乐于分享的shared_ptr是C++中常见的两个智能指针,本文主要为大家介绍了这两个指针的使用以及智能指针使用的原因,希望对大家有所帮助
    2023-05-05
  • c++模拟实现string类详情

    c++模拟实现string类详情

    这篇文章主要介绍了c++模拟实现string类详情,string表示可变长的字符序列,使用string类型必须首先包含string头文件。作为标准库的一部分,string定义在命名空间std中,下面进入文章一起看看详细内容吧
    2022-01-01
  • jquery ready函数深入分析

    jquery ready函数深入分析

    本文主要介绍jquery ready,这里整理了相关资料及相关示例代码帮助大家学习参考,有兴趣的小伙伴可以参考下
    2016-08-08
  • C++实现二叉树非递归遍历算法详解

    C++实现二叉树非递归遍历算法详解

    在C++中,二叉树非递归遍历是一种常用的算法,可避免递归过程中的系统开销和栈溢出问题。非递归遍历算法利用栈数据结构实现,可以实现前序、中序和后序遍历,是C++程序员必备技能之一
    2023-04-04
  • c语言枚举类型enum的用法及应用实例

    c语言枚举类型enum的用法及应用实例

    enum是C语言中的一个关键字,enum叫枚举数据类型,枚举数据类型描述的是一组整型值的集合,这篇文章主要给大家介绍了关于c语言枚举类型enum用法及应用的相关资料,需要的朋友可以参考下
    2021-07-07
  • C语言使用回溯法解旅行售货员问题与图的m着色问题

    C语言使用回溯法解旅行售货员问题与图的m着色问题

    回溯法即是在按条件搜索走不通的情况下退回再选择其他路线的方法,这里我们来看C语言使用回溯法解旅行售货员问题与图的m着色问题的方法示例:
    2016-07-07
  • C++基本用法实践之智能指针详解

    C++基本用法实践之智能指针详解

    为了减少手动管理内存带来的困扰,c++提出了智能指针,可以帮助我们进行内存管理,下面小编就来和大家简单聊聊C++中智能指针的基本用法吧
    2023-07-07

最新评论