Исключение IndexOutOfRangeException ("Индекс находился вне границ массива") указывает на то, что в каком либо месте программы вы пытаетесь обратится к массиву с индексом, выходящим за его границы.
Вероятнее всего, конкретно в вашем коде ошибка может быть на строке 4, т.к вы объявляете имя a как массив на 100 элементов с допустимыми индексами от 1 до 100, но позже даёте пользователю право самому ввести требуемую размерность, и никак не проверяете вводимое пользователем значение. В таком случае любое число > 100 будет приводить к исключению IndexOutOfRangeException.
Что бы избежать исключительных ситуаций, вы можете пойти двумя путями:
1. Проверять вводимые данные на соответствие диапазону допустимых индексов для массива а
2. Использовать коллекции с динамической размерностью (Array of T или List<T>)
Объяснение:
program zadachiGAME;
uses crt;
var a:array [1..59] of array [1..59] of string{integer};
var n,x,y,x1,y1,x3,y3,spawn,x4,y4,x5,y5,Xx,Yy,Xb,Yb,delta1,delta2,deltaGAMER,live:integer; var j:char;label restart1;label otskok1;label otskok2;
begin
restart1:
window (1,1,80,50);
clrscr;
cursoroff;
x1:=35;
y1:=44;
delta1:=1;
delta2:=1;
cursoroff;
live:=10;
y:=50;
x:=25;
deltagamer:=1;
gotoxy(x,y);
x3:=24;
y3:=1;
x4:=6;
y4:=45;
write('press for begin!');
readkey;
gotoxy(X,Y);
write(' ');
n:=1;
spawn:=1;
y3:=1;
x3:=24;
TextColor(3);
for spawn:=1 to 50 do
begin
gotoxy(x3,y3);
writeln('| |');
x3:=24;
y3:=y3+1;
end;
TextColor(11);
gotoxy(40,12);
begin
for y5:=10 to 22 do
for x5:=36 to 44 do
begin
gotoxy(x5,y5);
a[x5,y5]:=('a');
gotoxy(x5,y5);
write ('a');
end;
end;
repeat
begin
delay(53);
x1:=x1+delta1;
y1:=y1+delta2;
gotoxy(x1,y1);
write ('*');
gotoxy(x1+delta1*(-1),y1+delta2*(-1));
write(' ');
if ((x1<>x5) and (y1<>y5)) then //место с присваванием,которое не работает по непонятным причинам
begin
Xx:=x1;
Yy:=y1;
end;
if (a[x1,y1]=('a')) then
begin //проверка для ркошета в разные стороны
if (((x1-Xx)=(-1)) and ((y1-Yy)=(-1)) and ((x1=x5) and (y1=y5)))
then
begin
a[x5,y5]:=('an');
delta1:=delta1*(-1);
end;
if (((x1-Xx)=1) and ((y1-Yy)=(-1)) and ((x1=x5) and (y1=y5)))
then
begin
a[x5,y5]:=('an');
delta2:=delta2*(-1);
end;
end;
TextColor(11);
gotoxy(x4,y4);
begin //отображение некоторых данных
writeln('live - ',live:1);
writeln('Xx ',Xx,'Yy ',Yy);
write ('X1 ',x1,'Y1 ',y1);
end;
TextColor(5);
if (x1=58) or (x1=25) then
delta1:=(-1)*(delta1);
if (y1=2) then
delta2:=delta2*(-1);
if ((y1=y-1) and (x1=x)) or ((y1=y-1) and (x1=x-1)) or ((y1=y-1) and (x1=x+1)) or ((y1=y-1) and (x1=x+2)) or ((y1=y-1) and (x1=x+3)) then
delta2:=delta2*(-1)
else
if ((y1=y) and (x1<>x)) or ((y1=y) and (x1<>x-1)) or ((y1=y) and (x1<>x+1)) or ((y1=y) and (x1<>x+2)) or ((y1=y) and (x1<>x+3)) then
begin
gotoxy(x1,y1);
write(' ');
delta2:=delta2*(-1);
y1:=y1+delta2-1;
live:=live-1;
end;
TextColor(13);
if keypressed then
begin
//if keypressed then
j:=readkey;
case j of
#77:deltaGAMER:=3;//вправо
#75:deltaGAMER:=(-3);//влево
#27:Exit;
else
deltagamer:=(0);
end;
if (x=25) or ((x>55) and (x<59)) then
deltagamer:=(-1)*(deltagamer);
if (x=25) and (j=#77) or (x=56) and (j=#75)then
deltagamer:=(-1)*(deltagamer);
x:=x+(1*deltaGamer);
if j<> #75 then
begin
gotoxy(x,y);
write ('---');
end;
if j<> #77 then
begin
gotoxy(x,y);
write ('---');
end
else
gotoxy(x+deltagamer*(-1),wherey);
write(' ');
gotoxy(x,y);
end;
end;
until live=0;
begin
clrscr;
gotoxy(37,25);
writeln (' Defith');
gotoxy(37,27);
writeln (' press "r" for restart');
j:=readkey;
case j of
#114:goto restart1;
#82:goto restart1;
#170:goto restart1;
#138:goto restart1;
#27:end;
end;
end.
Исключение IndexOutOfRangeException ("Индекс находился вне границ массива") указывает на то, что в каком либо месте программы вы пытаетесь обратится к массиву с индексом, выходящим за его границы.
Вероятнее всего, конкретно в вашем коде ошибка может быть на строке 4, т.к вы объявляете имя a как массив на 100 элементов с допустимыми индексами от 1 до 100, но позже даёте пользователю право самому ввести требуемую размерность, и никак не проверяете вводимое пользователем значение. В таком случае любое число > 100 будет приводить к исключению IndexOutOfRangeException.
Что бы избежать исключительных ситуаций, вы можете пойти двумя путями:
1. Проверять вводимые данные на соответствие диапазону допустимых индексов для массива а
2. Использовать коллекции с динамической размерностью (Array of T или List<T>)