Программа для создания кросвордов - Lazarus[Delphi]-версия., [Обсуждение программы и кода] |
Здравствуйте, гость ( Вход | Регистрация )
Программа для создания кросвордов - Lazarus[Delphi]-версия., [Обсуждение программы и кода] |
xwicked |
2.11.2011, 22:49
Сообщение
#1
|
Студент Группа: Участник Сообщений: 66 Регистрация: 2.8.2011 Из: Старый Оскол Пользователь №: 2781 Спасибо сказали: 0 раз(а) Репутация: 0 |
Здравствуйте!
Вот и созрел четвёртый проект для глаз общественности. Пока выпущено 2-е бетаверсии. В них я попытался исправиться с комментариями кода. Комментирую сразу, возможно есть лишнее. Он представляет собой Клёст-кроссворд переписанный на Lazarus так же, не используя ничего нестандартного, во избежании плохой межплатформенной переносимости. Носит кодовое название OpenKlest. Смысл его заключается в создании открытого стандарта файла кроссвордов для всех компиляторов, независимо от платформы или языка. Версия 0.1.1 - есть функция отгадывания кроссворда в формате OpenKlest 1.0(экспортируют Клёст-кроссворд 0.2.9, 0.3.7). Пока только латиница Скрин: Ссылка на SourceForge.net. Код под GNU GPL v2 - OpenSource. Цитата Описание формата OpenKlest 1.0: Как Вам словесное описание и сам формат? Что нужно добавить или изменить? Жду комментариев.
Это двоичный формат файла кроссворда, разработанный так, чтобы было максимально просто сделать его поддержку в других языках программирования, отличных от C++. Он экспортируется средствами чистого C++, без расширяющих возможностей библиотеки Qt. --- //Версия файла char cFileBegin[14] = "OpenKlest-1.0~"; //Количество строк кроссворда uint uiRowCount; //Количество столбцов кроссворда uint uiColumnCount; //Ширина(Высота) ячейки uint uiRowHeight; // Если ячейка чёрная ;QChar qcCell = 'b'; // Если ячейка белая ;QChar qcCell = 'w'; // Цикл от uiRowCount до uiColumnCount ushort usCell = qcCell.unicode() + 1; //Количество слов uint uiWordCount; //Координата строки расположения слова в сетке кроссворда; //Цикл от 0 до uiWordCount ushort usWordRow; //Координата столбца расположения слова в сетке кроссворда; //Цикл от 0 до uiWordCount ushort usWordColumn; // Если слово вертикальное ;QChar qcDirection = 'v'; // Если слово горизонтальное ;QChar qcDirection = 'h'; //Направление слова в сетке кроссворда; //Цикл от 0 до uiWordCount ushort usWordDirection = qcDirection.unicode(); //Длина слова в сетке кроссворда; //Цикл от 0 до uiWordCount ushort usWordLength; //Слово ;string sWord; //Цикл от 0 до uiWordCount char cWord[sWord.length()]; //Длина вопроса; Цикл от 0 до uiWordCount ushort usQuestionLength; //Вопрос ;string sQuestion; //Цикл от 0 до uiWordCount char cQuestion[sQuestion.length()]; //Метка конца файла char cFileEnd[10] = "~OpenKlest"; |
|
|
xwicked |
24.9.2012, 20:12
Сообщение
#2
|
Студент Группа: Участник Сообщений: 66 Регистрация: 2.8.2011 Из: Старый Оскол Пользователь №: 2781 Спасибо сказали: 0 раз(а) Репутация: 0 |
Здравствуйте!
Чуть изменил формат уже 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-букву. Чтобы это исправить я сделал так:
Есть ещё это: Скачать новую версию 1.0.0Изменения: Цитата - Добавлен перевод интерфейса игры на русский язык;
- Добавлена поддержка Unicode в кроссворде; - Добавлена проверка версии файла кроссворда. Тем самым устранена фатальная ошибка; - Добавлена справка; - Добавлена возможность ввода ника; - Добавлены новые кнопки на стандартную панель инструментов; - Добавлена возможность проверки правильности разгадывания кроссворда; - Добавлена статистика игроков; - В строку состояния добавлены новые элементы; - Добавлены подсказки для элементов интерфейса; - Добавлен диалог, позволяющий продолжить разгадывание, при случайной попытке выхода из игры; |
|
|
Текстовая версия | Сейчас: 23.11.2024, 20:46 |