我正在尝试用二维数组表示二维坐标网格。问题是,由于 Delphi 分配数组的方式,声明数组会翻转 X 和 Y 坐标。这使得难以读取数组的元素。例如,以下程序在尝试打印时给出范围检查错误:
program Project1;
{$APPTYPE CONSOLE}
uses
SysUtils;
{$R+}
procedure play;
var
grid: array of array of boolean;
x, y: integer;
begin
try
setLength(grid, 3, 8);
grid[1, 5] := true;
for y := low(grid) to high(grid) do
begin
for x := low(grid[y]) to high(grid[y]) do
begin
if grid[x, y] then
write('X')
else write('.');
end;
writeln;
end;
readln;
except
on E:Exception do
Writeln(E.Classname, ': ', E.Message);
end;
end;
begin
play;
end.
我必须向后写索引(如果 grid[y, x] then)以防止这种情况发生,但随后网格会横向打印,X 显示在 (5, 1) 而不是 (1, 5)。如果我尝试通过说 setLength(grid, 3, 8); 来改变网格的形状;然后下一行的赋值给出了范围检查错误。我最终不得不把我所有的坐标都写反了,每当我忘记它们是反的时,程序中就会发生不好的事情。
有谁知道使坐标顺序直观工作的任何技巧?