我正在编写迷宫生成算法,以通过递归回溯随机生成迷宫。
程序编译并且使用过程“控制器”选择随机方向时,出现“访问冲突”
我也收到消息说: “变量“ i”可能尚未初始化” “变量'j'可能尚未初始化”
以上错误是否与访问冲突有关,如果是,是什么原因引起的?
procedure TfrmMazeGame.btnSTartGameClick(Sender: TObject);
var
i, j: integer;
begin
lblTitle.Visible := false;
btnStartGame.Visible := false;
btnExit.Visible := false;
StrGridMaze.Visible := true;
for i := 0 to 19 do
begin
for j := 0 to 19 do
begin
maze[i, j] := TCell.Create;
end;
end;
fillarray (maze);
GenerateMaze(maze);
end;
procedure TfrmMazeGame.Controller(maze: TMaze; CurrentCell: TCell);
type
TDirection = (up, down, left, right);
var
Direction: TDirection;
i, j: integer;
begin
Direction := TDirection(random(3));
case Direction of
up:
begin
CurrentCell := maze[i, j - 1];
CurrentCell.Wall := false;
end;
down:
begin
CurrentCell := maze[i, j + 1];
CurrentCell.Wall := false;
end;
left:
begin
CurrentCell := maze[i - 1, j];
CurrentCell.Wall := false;
end;
right:
begin
CurrentCell := maze[i + 1, j];
CurrentCell.Wall := false;
end;
end;
end;
procedure TfrmMazeGame.fillArray(maze: TMaze);
var
i, j: integer;
begin
for i := 0 to 19 do
begin
for j := 0 to 19 do
begin
maze[i,j].Wall := true;
end;
end;
end;
procedure TfrmMazeGame.FormCreate(Sender: TObject);
begin
position := poScreenCenter;
StrGridMaze.Visible := false;
end;
procedure TfrmMazeGame.GenerateMaze(maze: TMaze);
var
CurrentCell: TCell;
begin
CurrentCell := maze[0, 0];
maze[0, 0].Wall := false;
Controller(maze, CurrentCell);
end;
答案 0 :(得分:4)
在Controller
函数中,您不会初始化局部变量i
和j
。编译器告诉您。是的。
因此,变量值是不确定的,并且可以肯定地解释访问冲突,因为您超出范围访问数组。