Название: Программа для создания кросвордов - Lazarus[Delphi]-версия. [Обсуждение программ Отправлено: xwicked от Ноябрь 02, 2011, 22:49 Здравствуйте!
Вот и созрел четвёртый проект для глаз общественности. Пока выпущено 2-е бетаверсии. В них я попытался исправиться с комментариями кода. Комментирую сразу, возможно есть лишнее. Он представляет собой Клёст-кроссворд переписанный на Lazarus так же, не используя ничего нестандартного, во избежании плохой межплатформенной переносимости. Носит кодовое название OpenKlest. Смысл его заключается в создании открытого стандарта файла кроссвордов для всех компиляторов, независимо от платформы или языка. Версия 0.1.1 (http://sourceforge.net/projects/openklest/files/0.1.1/) - есть функция отгадывания кроссворда в формате OpenKlest 1.0(экспортируют Клёст-кроссворд 0.2.9, 0.3.7). Пока только латиница ::) Скрин: (http://s60.radikal.ru/i169/1111/25/b29c3570b7b7.jpg) Ссылка (http://sourceforge.net/projects/openklest/) на 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"; Название: Re: Программа для создания кросвордов - Lazarus[Delphi]-версия. [Обсуждение программ Отправлено: xwicked от Ноябрь 07, 2011, 19:13 Мне уже указали на некоторые ошибки:
Цитировать Описание формата OpenKlest 1.0: Пока такой вариант - потом буду дорабатывать, со словесным указанием занимаемой памяти и диапазона принимаемых значений. ::)Это двоичный формат файла кроссворда, разработанный так, чтобы было максимально просто сделать его поддержку в других языках программирования, отличных от C++. Он экспортируется средствами чистого C++, без расширяющих возможностей библиотеки Qt. --- //Версия файла cFileBegin array[14] of char := 'OpenKlest-1.0~'; //Количество строк кроссворда lwRowCount: Longword; //Количество столбцов кроссворда lwColumnCount: Longword; //Ширина(Высота) ячейки lwRowHeight: Longword; // Если ячейка чёрная ;(wcCell: WideChar) wcCell = 'b'; // Если ячейка белая ;(wcCell: WideChar) wcCell = 'w'; // Цикл от 0 до lwRowCount //Вложенный цикл от 0 до lwColumnCount wCell: Word := Word(wcCell) + 1; //Количество слов lwWordCount: Longword; //Координата строки расположения слова в сетке кроссворда; //Цикл от 0 до lwWordCount wWordRow: Word; //Координата столбца расположения слова в сетке кроссворда; //Цикл от 0 до lwWordCount wWordColumn: Word; // Если слово вертикальное ;(wcDirection: WideChar) wcDirection = 'v'; // Если слово горизонтальное ;(wcDirection: WideChar) wcDirection = 'h'; //Направление слова в сетке кроссворда; //Цикл от 0 до lwWordCount wWordDirection: Word := Word(wcDirection); //Длина слова в сетке кроссворда; //Цикл от 0 до lwWordCount wWordLength: Word; //Слово ;sWord: string; //Цикл от 0 до lwWordCount cWord: array[Length(sWord)] of char; //Длина вопроса; //Цикл от 0 до lwWordCount wQuestionLength: Word; //Вопрос ;sQuestion: string; //Цикл от 0 до lwWordCount cQuestion: array[Length(sQuestion)] of char; //Метка конца файла cFileEnd: array[10] of char := '~OpenKlest'; Название: Re: Программа для создания кросвордов - Lazarus[Delphi]-версия. [Обсуждение программ Отправлено: xwicked от Июнь 06, 2012, 20:43 Здравствуйте!
В новой версии есть улучшения работы и интерфейса. TBitBtn Код заменён на TSpeedButton Код Убрано раздражающее мерцание, вызванное неправильной и двойной перерисовкой сетки кроссворда. До: Код После: Код Дополнительные изменения: Цитировать - Устранена ошибка неправильного отображения текста в списке вопросов; Скачать (http://"http://sourceforge.net/projects/openklest/files/0.4.5/")- Добавлена поддержка Windows-тем, используя файл *.manifest; - Оптимизирована часть кода; - Добавлена возможность выбора слова из сетки кроссворда; - Добавлены ссылки программы в разделе "Автор", окна "О программе" на сайт SourceForge.net: Основная ссылка, Bug-трекер и Git; Название: Re: Программа для создания кросвордов - Lazarus[Delphi]-версия. [Обсуждение программ Отправлено: xwicked от Сентябрь 24, 2012, 20:09 Здравствуйте!
Чуть изменил формат уже 1.1 и подправил описание: Цитировать Описание формата OpenKlest 1.1: Обращаю внимание на то, что в ОС Windows русский текст, записываемый в строку AnsiString, записывает Wide(unicode)-символы по одному байту в Ansi-букву. Чтобы это исправить я сделал так:Это двоичный формат файла кроссворда, разработанный так, чтобы было максимально просто сделать его поддержку в других языках программирования, отличных от 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 байт. Код Есть ещё это: Код Скачать новую версию 1.0.0 (http://sourceforge.net/projects/openklest/files/1.0.0/) Изменения: Цитировать - Добавлен перевод интерфейса игры на русский язык; - Добавлена поддержка Unicode в кроссворде; - Добавлена проверка версии файла кроссворда. Тем самым устранена фатальная ошибка; - Добавлена справка; - Добавлена возможность ввода ника; - Добавлены новые кнопки на стандартную панель инструментов; - Добавлена возможность проверки правильности разгадывания кроссворда; - Добавлена статистика игроков; - В строку состояния добавлены новые элементы; - Добавлены подсказки для элементов интерфейса; - Добавлен диалог, позволяющий продолжить разгадывание, при случайной попытке выхода из игры; |