Здравствуйте, уважаемые программисты, администраторы, пользователи и т.д. Суть программы: меню для игры. Столкнулся с 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] of string; //массив хранения имён(названий файлов) уровней levelname: string; i,j:integer; //счётчики keyCode,scanCode:string[2]; menuselect: char; //переменная, отвечающая за выделенный пункт меню exitprogram: boolean; // -||-||- за выход из программы lvlpath: text; //файловая переменная, отвечает за файл с именами уровней
procedure rendS; //отрисовка пункта "Старт" begin if menuselect='s' then begin gotoxy(strt,13); write('->Старт<-'); end else begin gotoxy(strt+2,13); write('Старт'); end; end;
procedure rendH; //отрисовка пункта "Справка" begin if menuselect='h' then begin gotoxy(hlp,15); write('->Справка<-'); end else begin gotoxy(hlp+2,15); write('Справка'); end; end;
procedure rendE; //отрисовка пункта "Выход" begin if menuselect='e' then begin gotoxy(ext,17); write('->Выход<-'); end else begin 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' then begin //Если "Справка", показываем её 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