gpt4 book ai didi

c - 通过融合单元格的值生成迷宫

转载 作者:行者123 更新时间:2023-11-30 14:51:45 25 4
gpt4 key购买 nike

我必须为学校项目生成一个迷宫,但我陷入了循环,我不知道为什么,而且我的 IDE 由于某种原因忽略了我的断点...

这是我的代码:

#include <math.h>
#include <time.h>
#include <unistd.h>
#include <stdlib.h>
#include <stdio.h>



typedef struct _maze_cell {
int wallAbove, wallLeft, cellValue;
} MazeCell;

/* define maze structure */
typedef struct _maze_t {
/* maze size = m lines * n columns */
int row, column;
/* array of cells */
MazeCell* *array;
} Maze;



MazeCell* initMazeCell(){
MazeCell* cell = malloc(sizeof(MazeCell));
cell->wallAbove = 1;
cell->wallLeft = 1;
cell->cellValue = 0;
return cell;

}

int rand_a_b(int a, int b){

return rand()%(b-a) +a;

}

Maze* initMaze(int m, int n)
{
Maze* oMaze= malloc(sizeof(Maze));
int nbCells=m*n;
printf("%d \n", nbCells);
oMaze->array = malloc(nbCells*sizeof(MazeCell));

int counter=1;
int i;
for(i=0;i<m*n;i++)
{
if(i%m==0)
{
printf("\n");
}
oMaze->array[i]= initMazeCell();
oMaze->array[i]->cellValue=counter++;


printf("%4d", oMaze->array[i]->cellValue);
}

printf("\n");
//------------------------loop debut
int done=0;
while(done==0)
{
done=1;
int sizeofTab=m*n-1;
int nbAl=rand_a_b( 0, sizeofTab);
int wallChoosen=rand_a_b( 1, 2);

if(wallChoosen==1)
{
if(nbAl>n)
{
int b=nbAl-n;
int oldValue=oMaze->array[b]->cellValue;
int newValue=oMaze->array[nbAl]->cellValue;

if(oldValue!=newValue)
{
oMaze->array[nbAl]->wallAbove=0;
for(i=0;i<m*n;i++)
{
if(oMaze->array[i]->cellValue==oldValue)
{
//printf("old: %d",oMaze->array[i]->cellValue);
oMaze->array[i]->cellValue=newValue;
// printf("new: %d",oMaze->array[i]->cellValue);
}

}
}
}
}

if(wallChoosen==2)
{
if(nbAl>0)
{
int b=nbAl-1;
int oldValue=oMaze->array[b]->cellValue;
int newValue=oMaze->array[nbAl]->cellValue;


if(oldValue!=newValue)
{
oMaze->array[nbAl]->wallLeft=0;
for(i=0;i<m*n;i++)
{
if(oMaze->array[i]->cellValue==oldValue)
{
oMaze->array[i]->cellValue=newValue;
}

}
//oMaze->array[b]->cellValue=oMaze->array[nbAl]->cellValue;

}
}
}
int a;
for(i=0;i<m*n;i++)
{
if(i==0)
{
a=oMaze->array[i]->cellValue;
}
if(i!=0 && oMaze->array[i]->cellValue!=a)
{
done=0;
printf("%4d", oMaze->array[i]->cellValue);
}

}

}
//--------------------------------loop end
printf("\n The end!!");
int y;
for(y=0;y<m*n;y++)
{
if(y%m==0)
{
printf("\n");
}
printf("%4d", oMaze->array[y]->cellValue);
}
return oMaze;
}

int main()
{
srand(time(NULL));
Maze* myMaze=initMaze(5,5);
return 0;
}

老师告诉我们用这个方法:maze generation (抱歉,它是法语,但该图像将有助于理解我在代码中尝试执行的操作)。

有人可以帮助我理解我做错了什么吗?

我添加了一个计数器并在 200 圈后停止循环,我得到了这个:

result

这表明它直到某个点才起作用,我不知道为什么它直到最后才起作用......

最佳答案

我发现我做错了什么:

`int wallChoosen=rand_a_b( 1, 2);`

我以为是从1到2,包含2,但不包含2,所以wallChoosen总是等于1。

我将其替换为:

int wallChoosen=rand_a_b( 1, 3);

关于c - 通过融合单元格的值生成迷宫,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48046645/

25 4 0
文章推荐: C - 指针减法
文章推荐: C# 加入列表。 LINQ。无法创建常量类型
文章推荐: c# - 在同一流中读取和写入文件
文章推荐: javascript - 使
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com