Здравствуйте, уважаемые программисты, администраторы, пользователи и т.д. Суть программы: меню для игры. Столкнулся с Exitcod'ом 201. Вылет происходит при использовании цикла чтения из текстового файла и присваивания строк файла массиву. Что-то я делаю явно не так, вопрос - что? Собственно, ниже код. Прошу прощения, если форматирование текста кода не является удобночитаемым. Пишу на Free Pascal, желательно, чтобы программа компилировалась и на Borland Pascal 7.0. Благодарю за внимание.
Спойлер(Показать/Скрыть)
program Menu;
uses crt;
const strt=36; //в константах записаны позиции пунктов "Старт", "Справка" и "Выход" для GoToXY
hlp=35;
ext=36;
var
arrlevels: array [0..13] ofstring; //массив хранения имён(названий файлов) уровней
levelname: string;
i,j:integer; //счётчики
keyCode,scanCode:string[2];
menuselect: char; //переменная, отвечающая за выделенный пункт меню
exitprogram: boolean; // -||-||- за выход из программы
lvlpath: text; //файловая переменная, отвечает за файл с именами уровней
procedure rendS; //отрисовка пункта "Старт"
beginif menuselect='s'thenbegin
gotoxy(strt,13);
write('->Старт<-');
endelsebegin
gotoxy(strt+2,13);
write('Старт');
end;
end;
procedure rendH; //отрисовка пункта "Справка"
beginif menuselect='h'thenbegin
gotoxy(hlp,15);
write('->Справка<-');
endelsebegin
gotoxy(hlp+2,15);
write('Справка');
end;
end;
procedure rendE; //отрисовка пункта "Выход"
beginif menuselect='e'thenbegin
gotoxy(ext,17);
write('->Выход<-');
endelsebegin
gotoxy(ext+2,17);
write('Выход');
end;
end;
procedure rendermenu; //отрисовка всего меню
begin
clrscr;
rends;
rendh;
rende;
gotoxy(80,25); //убрать курсор в угол, чтоб не мешал взору
end;
procedure levels; //!!! Проблемная процедура. Должна оторажать список уровней.
begin
assign(lvlpath, 'level.txt'); //подключение файла с названиями уровней
clrscr;
reset(lvlpath);
i:=0; //моя прихоть
repeat//цикл, заносящий построчно в массив arrlevels имена уровней из файла
i:=i+1;
read(lvlpath, levelname);
arrlevels[i]:= levelname;
gotoxy(7, i*2);
write(levelname);
until eof(lvlpath); //Если делать eof=true, то просто пролетает цикл, если false, то Exitcode = 201 при переходе на цикл
end;
procedure keyread; //процедура, отвечающая за перемещение по первичному меню(Старт, Справка, Выход)
begin
keyCode := ReadKey;
case keyCode of#0 : begin
scanCode := ReadKey;
case scanCode of#80: begin//вниз
case menuselect of's': menuselect:='h';
'h': menuselect:='e';
'e': menuselect:='s';
end;
end;
#72: begin//вверх
case menuselect of's': menuselect:='e';
'h': menuselect:='s';
'e': menuselect:='h';
end;
end;
end;
end;
#13: begin//Enter
if menuselect='e'then exitprogram:=true; //Если "Выход", то выходим
if menuselect='h'thenbegin//Если "Справка", показываем её
clrscr;
gotoxy(10,5);
write('Здесь будет описание игры. И Ваша реклама. Наверное.');
readln;
end;
if menuselect='s'then levels; //Если "Старт", то показываем список уровней
end;
end;
end;
begin//запуск программы
exitprogram:=false; //переменная, отвечающая за выход из программы
menuselect:='s'; //начальный выбранный пункт в меню
rendermenu; //отрисовка меню
repeat//цикл перемещения по меню
keyread;
rendermenu;
until exitprogram=true;
close(lvlpath);
end.
Сообщение отредактировано: SaheR - 26.08.2013 20:35