Здравствуйте!
Чуть изменил формат уже 1.1 и подправил описание:
Описание формата OpenKlest 1.1:
Это двоичный формат файла кроссворда, разработанный так, чтобы было максимально просто сделать его поддержку в других языках программирования, отличных от C++. Он экспортируется средствами чистого C++, без расширяющих возможностей библиотеки Qt.
Чтение файла начинается c 14-ти байт типа Char('OpenKlest-1.1~'), где 1.1 - это версия формата. 1 символ Char = 1 символу AnsiChar = знаковое 1 байт.
Далее идёт язык кроссворда логического типа, boolean, 1 байт.
Далее количество строк сетки кроссворда, LongWord, беззнаковое 4 байта.
Далее количество столбцов сетки кроссворда, LongWord, беззнаковое 4 байта.
Затем размер ячейки сетки кроссворда, LongWord, беззнаковое 4 байта.
Затем значение цвета ячейки, Word, беззнаковое 2 байта. От него отнимается цифра 1. Чтение происходит в 2-х циклах:
Основной от 0 до количества строк, вложенный цикл от 0 до количества столбцов.
Затем количество слов, LongWord, беззнаковое 4 байта.
Потом чтение координат первых букв слов(строки), Word, беззнаковое 2 байта. Цикл от 0 до количества слов.
Потом чтение координат первых букв слов(столбцы), Word, беззнаковое 2 байта. Цикл от 0 до количества слов.
Потом чтение направлений слов, Word, беззнаковое 2 байта. Цикл от 0 до количества слов.
Следующим будет чтение длин слов, Word, беззнаковое 2 байта. Цикл от 0 до количества слов.
Следующим будет чтение слов-ответов, состоящих из набора unicode-симоволов, типа Word, беззнаковое 2 байта. Основной цикл от 0 до количества слов, вложенный от 0 до количества букв текущего слова.
Следующим будет чтение длин вопросов, Word, беззнаковое 2 байта. Цикл от 0 до количества слов.
Далее идёт чтение предложений-вопросов, состоящих из набора unicode-симоволов, типа Word, беззнаковое 2 байта. Основной цикл от 0 до количества слов, вложенный от 0 до количества букв текущего вопроса.
Ну и в конце загружается флаг конца файла ('~OpenKlest'), 10 байт типа Char. 1 символ Char = 1 символу AnsiChar = знаковое 1 байт.
Обращаю внимание на то, что в ОС Windows русский текст, записываемый в строку AnsiString, записывает Wide(unicode)-символы по одному байту в Ansi-букву. Чтобы это исправить я сделал так:
Delphi
//Для Windows
//s: String;
{if gWordLine = 'h' then
begin
for i := ColumnFirstCellWord to ColumnFirstCellWord + LengthWord - 1 do
begin
//Если язык русский
if bLanguageWords = true then
begin
s := sTemp[j - 1] + sTemp[j];//Собираю их вместе :)
GridOpenKlest.Cells[i, RowFirstCellWord] := s;//Загрузка слова в сетку
j := j + 2;
end
else
begin
GridOpenKlest.Cells[i, RowFirstCellWord] := sTemp[j];//Загрузка слова в сетку
Inc(j);
end;
end;
end;
Есть ещё это:
Delphi
//Для Windows
//Если язык русский
{if bLanguageWords = true then
begin
slQuestionT.Add(AnsiToUtf8(sTemp));//Wide(!)-символы преобразую из Ansi(!) в Wide :)
ListQuestions.Items.Add(AnsiToUtf8(sTemp));
end
else
begin
slQuestionT.Add(sTemp);
ListQuestions.Items.Add(sTemp);
end;}
Скачать новую версию 1.0.0Изменения:
- Добавлен перевод интерфейса игры на русский язык;
- Добавлена поддержка Unicode в кроссворде;
- Добавлена проверка версии файла кроссворда. Тем самым устранена фатальная ошибка;
- Добавлена справка;
- Добавлена возможность ввода ника;
- Добавлены новые кнопки на стандартную панель инструментов;
- Добавлена возможность проверки правильности разгадывания кроссворда;
- Добавлена статистика игроков;
- В строку состояния добавлены новые элементы;
- Добавлены подсказки для элементов интерфейса;
- Добавлен диалог, позволяющий продолжить разгадывание, при случайной попытке выхода из игры;