Я пытаюсь представить двумерную координатную сетку двумерным массивом. Проблема в том, что объявление массива переворачивает координаты X и Y из-за того, как Delphi выделяет массив. Это затрудняет чтение элементов массива. Например, следующая программа выдает ошибку проверки диапазона при попытке печати:
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.
Я должен написать индекс задом наперед (если сетка [y, x], то), чтобы этого не произошло, но тогда сетка выводится боком, а X отображается в (5, 1) вместо (1, 5). Если я попытаюсь изменить форму сетки, сказав setLength(grid, 3, 8); то присваивание в следующей строке дает ошибку проверки диапазона. В итоге мне приходится записывать все мои координаты в обратном порядке, и каждый раз, когда я забываю, что они в обратном порядке, в программе начинают происходить плохие вещи.
Кто-нибудь знает какие-нибудь хитрости, чтобы порядок координат работал интуитивно?