2014-11-06 98 views
0

我试图建立阻止“阻塞路径”的算法。我画随机iteams并打印上图: enter image description here enter image description here [...] enter image description here如何防止阻塞路径?

的 “X” 是球员。它可以在此地图上移动,但不能停留在“#”字段中。平局之后的路径被阻断(“X”不能移动,例如”,(3,2):

enter image description here

有人有想法,概念或材料怎么写算法,防止平局‘#’ ?当阻塞道路

这是一段我的代码:

void build_dungeon(MAP_GRID& map, int chance, string object) 
{ 
    int i, j; 
    for (i = 0; i < g_map_size; i++){ 
     for (j = 0; j < g_map_size; j++){ 
      if (rand() % 100 >= (100 - chance) && map[i][j] == "[ ]" && anti_stuck(map, i, j)){ 
       map[i][j] = object; 
       print_map(map); 
      } 
     } 
    } 
} 

我想写anti_stuck功能

+1

为什么算法的绘制代码的一部分?我会期待一个2维的int数组,其中数组中的每个点表示一个特定的状态。你想同时绘制和计算,这是一个错误的方法。 – PaulMcKenzie 2014-11-06 22:31:19

+0

如果你写关于print_map(map) - 我只是为了调试才写的。 – Kulis 2014-11-06 22:33:56

+1

但是你的if()语句包含了一个非常奇怪的“[]”测试。这就是我所指的。那甚至不应该在那里。如果下个星期,你决定做一个GUI游戏而不是文本游戏?或者你选择一组不同的字符来编写网格?该算法将保持完全相同,但绘图会有所不同。查看'Model-View-Controller'设计模式。 – PaulMcKenzie 2014-11-06 22:37:11

回答

4

可以执行flood fill来确定哪些方块可以从给定的起始位置到达。从the Wikipedia article看到这个动画:

另外,如果你想确定是否可以从另一个到达一个平方,使用pathfinding算法如A*。再次,从Wikipedia动画:

enter image description here

+0

任何建议可以更好?它取决于什么? – Kulis 2014-11-06 22:32:02

+1

洪水填充会给你**列表**的可及和不可达广场。寻路搜索只会告诉你是否可以从A到B,它不会告诉你关于C或D或E的任何事情。 – 2014-11-06 22:37:34