需要帮助将迷宫实现为2d数组c ++

时间:2015-04-28 00:22:33

标签: c++ arrays 2d maze

所以我正在创建一个寻宝游戏,用户在隐藏的健康和陷阱的迷宫中移动。目标是找到宝藏而不会死亡。但是,我需要创建一个地图,我有一个我生成的地图。我想知道是否有一种方法可以将我的基于文本的迷宫复制并粘贴到数组中而不将其放在主函数中,而是将drawMap函数替换为填充每个单元格。任何帮助将不胜感激。谢谢!

- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section 
{
    return 200;
}

1 个答案:

答案 0 :(得分:1)

您可以将迷宫定义为2D字符串数组,存储为全局变量,如下所示:

#define LEVEL_COUNT (2)
const char* maps[LEVEL_COUNT][12] = 
{
    {
        "||||||||||||",
        "|       |  |",
        "|       |  |",
        "|    ||||  |",
        "|          |",
        "|          |",
        "||||||     |",
        "| |        |",
        "| |    |   |",
        "|      |   |",
        "|      |   |",
        "||||||||||||",
    },
    {
        "||||||||||||",
        "|       |  |",
        "|   |||||  |",
        "|       |  |",
        "|          |",
        "|       ||||",
        "|          |",
        "|   |      |",
        "|   |      |",
        "|||||||    |",
        "|          |",
        "||||||||||||",
    },
};

然后你可以将它们加载到char数组中,将空格设置为零:

void loadMap( char arr[][12], int level)
{
     if((level < 0) || (level >= LEVEL_COUNT))
         return;

     for(int i = 0; i < 12; i++)
     {
         const char* row = maps[level][i];
         for(int j = 0; j < 12; j++)
         {
             if(row[j] == 0)
                 break; // end of string
             if(row[j] == ' ')
                 arr[i][j] = 0;  // set spaces to zero
             else
                 arr[i][j] = row[j];
         }
     }
}

在初始化为全零后从loadMap函数调用mapCreation(如果地图数组中的任何字符串长度少于12个字符且遇到终止空值),则应用随机陷阱和宝藏。

e.g:

void mapCreation( char arr[][12], int level )
{
  int traps = 0;   
  int lives = 0;
  int treasure = 0;
  int x;
  int y;
  for(int i = 0; i < 12; i++)
  {
      for(int j = 0; j < 12; j++)
      {
          arr[i][j] = 0;
      }
  }

  // load the map:
  loadMap(arr, level);

  arr[1][1] = '1';
  switch (level)
  {
    case 1:
    while(treasure < 1)
    {
         x = (rand() % 10);
         y = (rand() % 10);
         if(arr[x][y] == '0')
         {
            arr[x][y] = 2;
            treasure++;
         }
     }
     // etc...