21xrx.com
2024-06-03 05:51:43 Monday
登录
文章检索 我的文章 写文章
C++ 迷宫游戏代码
2023-07-07 12:50:05 深夜i     --     --
C++编程 迷宫游戏 代码实现

迷宫游戏是一种很有趣的办法来锻炼你的编程能力,而且可以很好的锻炼你的逻辑思维。下面介绍一下 C++ 编程语言的迷宫游戏代码。

1. 定义迷宫地图

首先需要定义一个迷宫地图,可以使用一个二维数组来表示。其中,0 表示可以通过的路,1 表示墙壁。例如:

int maze[5][5] = {

   1,

   0,

   1,

   0,

   0

};

2. 定义起点和终点

接下来需要定义迷宫的起点和终点,可以使用一个结构体来表示。例如:

struct Point

  int x;

  int y;

;

Point start = 0;

Point end = 4;

3. 判断当前位置是否可行

需要编写一个函数,判断当前位置是否可以作为下一个位置,即是否为墙壁或越界。例如:

bool isValid(int x, int y)

{

  if (x < 0 || x >= 5 || y < 0 || y >= 5)

    return false;

  if (maze[x][y] == 1)

    return false;

  return true;

}

4. 使用深度优先搜索算法

深度优先搜索算法可以通过递归实现。从起点开始,首先判断是否到达了终点,如果到达了,则返回 true,否则对当前位置的四个方向进行遍历。如果在这四个方向中找到一个可行的位置,继续递归搜索。例如:

bool dfs(int x, int y)

{

  if (x == end.x && y == end.y)

    return true;

  if (!isValid(x, y))

    return false;

  maze[x][y] = 1; // 标记当前位置已经走过,防止重复走

  if (dfs(x - 1, y)) // 向上走

    return true;

  if (dfs(x, y + 1)) // 向右走

    return true;

  if (dfs(x + 1, y)) // 向下走

    return true;

  if (dfs(x, y - 1)) // 向左走

    return true;

  return false;

}

5. 输出路径

最后,可以通过遍历 maze 数组来输出路径。如果 maze[x][y] 为 1,表示在该位置走过,是路径。例如:

for (int i = 0; i < 5; i++)

{

  for (int j = 0; j < 5; j++)

  {

    if (maze[i][j] == 1)

    {

      cout << "(" << i << "," << j << ")" << endl;

    }

  }

}

完整代码

#include

using namespace std;

int maze[5][5] = {

   1,

   0,

   1,

   1 ,

   1

};

struct Point

  int x;

  int y;

;

Point start = 0;

Point end = 4;

bool isValid(int x, int y)

{

  if (x < 0 || x >= 5 || y < 0 || y >= 5)

    return false;

  if (maze[x][y] == 1)

    return false;

  return true;

}

bool dfs(int x, int y)

{

  if (x == end.x && y == end.y)

    return true;

  if (!isValid(x, y))

    return false;

  maze[x][y] = 1;

  if (dfs(x - 1, y))

    return true;

  if (dfs(x, y + 1))

    return true;

  if (dfs(x + 1, y))

    return true;

  if (dfs(x, y - 1))

    return true;

  return false;

}

int main()

{

  if (dfs(start.x, start.y))

  {

    cout << "找到出口了,路径如下:" << endl;

    for (int i = 0; i < 5; i++)

    {

      for (int j = 0; j < 5; j++)

      {

        if (maze[i][j] == 1)

        {

          cout << "(" << i << "," << j << ")" << endl;

        }

      }

    }

  }

  else

    cout << "没有找到出口" << endl;

  return 0;

}

  
  

评论区

{{item['qq_nickname']}}
()
回复
回复