этом легко допустить ошибку, случайно изменив правильный порядок ввода/вывода переменных.
Эта проблема решается по другому. Все пользовательские данные выделяются в программе в отдельный класс. Например, для пасьянса можно было описать специальный класс TSolData:
class TSolData
{
iht Cycle, Line, Pos;
TPack Pack;
TCard Wel1[5][5][PACK_TOTAL] ;
};
а в классе TFormI ввести только одну переменную:
TSolData SolData;
Тогда все обращения к внутренним переменным пришлось бы осуществлять через эту переменную, то есть писать не Pack, a SolData.Pack и т. д. Однако сохранение (и восстановление) всех данных потребовало бы только одного оператора:
FileWrite(iFile, &SolData, sizeof(TSolData) );
При этом можно свободно добавлять новые переменные в класс TSolData, не утруждая себя лишней работой по написанию новых вызовов функций ввода/вывода и вычислению размеров массивов — новые данные будут сохраняться автоматически в составе класса TSolData.
Конечно, если информация предварительно была сохранена, а затем структура класса TSolData изменилась (переменные были добавлены либо удалены), то считывать данные в переменную типа TSolData из-за несоответствия форматов хранения нельзя — возникнет ошибка ввода.
Выбор произвольных файлов
Сохранение и восстановление текущего расклада в файле реализовано. Но игра всегда будет записываться в один и тот же файл в одном и том же каталоге, что довольно неудобно — хотелось бы иметь возможность восстановления и сохранения пасьянса в произвольных файлах.
В этом помогут стандартные диалоговые окна Windows, предназначенные для выбора файлов. Эти окна применяются практически во всех известных
238