crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

4 страниц V   1 2 3 > »   
Ответить в данную темуНачать новую тему
> Программа для создания кроссвордов, Обсуждение программы и кода
xwicked
  опции профиля:
сообщение 2.8.2011, 14:50
Сообщение #1


Студент
*

Группа: Участник
Сообщений: 66
Регистрация: 2.8.2011
Из: Старый Оскол
Пользователь №: 2781

Спасибо сказали: 0 раз(а)




Репутация:   0  




Здравствуйте! Есть одна программа для создания кроссвордов. Она состоит из двух частей: создание и отгадывание.

Прошу её код хорошо покритиковать. Для остальных, чтобы могли посмотреть на её работу, дам ссылки на бинарники 32-бит: создание, отгадывание. Qt-4.5.3.

Проекты OpenSource под GPLv2. Ссылки на SourceForge.net - создание, отгадывание.
Это мой первый код на C++(Qt). Жду комментариев :)

Добавлю небольшое описание: Сетка кроссворда представлена обычной таблицей TableCrosswordEdit(QTableWidget), слова загружаются в список слов ListWord(QStringList), толкования(вопросы) находятся в списке вопросов ListQuestions(QListWidget).

Структура файла - динамическая. Когда писал программы на Delphi - использовал статику - расходовалось лишнее дисковое пространство .
XWC: Пароль, количество строк, количество столбцов, ширина(высота) ячейки таблицы, шрифт, структура таблицы(w + 1(x) - белая ячейка, b + 1( c ) - чёрная), строка с данными CrosswordData(QString).
      ... if(file.open(QIODevice::WriteOnly))
                         {
                             QBrush BrushBlack = QBrush(Qt::black, Qt::SolidPattern);
                             QDataStream sfile(&file);
                             QChar sdata;
                             ushort idata;
      
                                 if(State == false) sfile << strPassword;
      
                             sfile << TableCrosswordEdit->rowCount();
                             sfile << TableCrosswordEdit->columnCount();
                             sfile << TableCrosswordEdit->rowHeight(0);
                             sfile << TableCrosswordEdit->font();
      
                                 for(int i = 0; i < TableCrosswordEdit->rowCount(); i++)
                                     for(int j = 0; j < TableCrosswordEdit->columnCount(); j++)
                                         {
                                                 if(TableCrosswordEdit->item(i,j)->background() == BrushBlack)
                                                     {
                                                         sdata = 'b';
                                                         idata = sdata.unicode() + 1;
                                                         sfile << idata;
                                                     }
                                                 else
                                                     {
                                                         sdata = 'w';
                                                         idata = sdata.unicode() + 1;
                                                         sfile << idata;
                                                     }
      
                                             sdata = 0;
                                         }
      
                                 if(State == false) CrosswordToData(2);
                                 if(State == false) sfile << CrosswordData;
      
                             file.close();
      
                                 if(State == false) SaveStateCross = true;
                                 else SaveStateTemplate = true;
                         } ...

CrosswordData: цикл по количеству слов(q, QChar(номер слова), QChar(координата строки в сетке), QChar(координата столбца в сетке), направление слова в сетке), цикл по количеству слов(W, QChar(номер слова), QChar(длина слова), само слово), цикл по количеству вопросов(Q, QChar(номер вопроса), QChar(длина вопроса), сам вопрос).
      ...
                             for(int i = 0; i < ListWord.count(); i++)
                                 {
                                     CrosswordData.append(QChar('W'));
                                     CrosswordData.append(QChar(ushort(i)));
                                     CurrentString.clear();
                                     CurrentString.append(ListWord.at(i));
                                     CrosswordData.append(QChar(ushort(CurrentString.length())));
                                     CrosswordData.append(ListWord.at(i));
                                 }
      
                             for(int i = 0; i < ListQuestions->count(); i++)
                                 {
                                     CrosswordData.append(QChar('Q'));
                                     CrosswordData.append(QChar(ushort(i)));
                                     CrosswordData.append(QChar(ushort(ListQuestions->item(i)->text().length())));
                                     CrosswordData.append(ListQuestions->item(i)->text());
                                 } ...

Шаблон кроссворда(XWTPL) таже структура, но без пароля и без CrosswordData.

Состояние сохранения(tmpcross): цикл по количеству слов(W, QChar(номер слова), QChar(длина слова), само слово).
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
ViGOur
  опции профиля:
сообщение 2.8.2011, 15:43
Сообщение #2


Мастер
******

Группа: Модератор
Сообщений: 3296
Регистрация: 9.10.2007
Из: Москва
Пользователь №: 4

Спасибо сказали: 231 раз(а)




Репутация:   40  


у нас на сайте, есть раздел исходники, можешь добавить туда. ;)
нцужно просто зайти залогинившись на форуме на сам crossplatform.ru и все увидишь.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
xwicked
  опции профиля:
сообщение 2.8.2011, 18:17
Сообщение #3


Студент
*

Группа: Участник
Сообщений: 66
Регистрация: 2.8.2011
Из: Старый Оскол
Пользователь №: 2781

Спасибо сказали: 0 раз(а)




Репутация:   0  


Цитата(ViGOur @ 2.8.2011, 16:43) *
у нас на сайте, есть раздел исходники, можешь добавить туда. ;)
нцужно просто зайти залогинившись на форуме на сам crossplatform.ru и все увидишь.

Благодарю! Увидел - добавлю :)
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
xwicked
  опции профиля:
сообщение 4.8.2011, 16:40
Сообщение #4


Студент
*

Группа: Участник
Сообщений: 66
Регистрация: 2.8.2011
Из: Старый Оскол
Пользователь №: 2781

Спасибо сказали: 0 раз(а)




Репутация:   0  


Продолжаем знакомиться с исходником. Профессиональный кроссворд, версии 0.1.4 - это объединение двух предыдущих: создателя и отгадывателя, с последующей доработкой.
Изменения:
- Добавлена возможность автоматического создания сетки кроссворда(бета-версия).
- Добавлена возможность автоматического составления кроссворда(выбор слов из словаря). Первая бета-версия.
- Присутствуют обе возможности(создание и отгадывыание).

Отмечу, что выбор слов происходит в один проход и могут быть пропуски слов в сетке, после составления кроссворда.

Исходный код + сборки(0.1.4) Отдельный проект на SourceForge.net - Клёст-кроссворд

В Клёст-кроссворде нет возможности сохранять пароль, в то время как в Crossword editor эта возможность есть. Проекты были разделены для большего удобства разработки.

P.S. Профессиональный кроссворд 0.1.7 = Клёст-кроссворд 0.1.7 :)
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
xwicked
  опции профиля:
сообщение 6.8.2011, 12:08
Сообщение #5


Студент
*

Группа: Участник
Сообщений: 66
Регистрация: 2.8.2011
Из: Старый Оскол
Пользователь №: 2781

Спасибо сказали: 0 раз(а)




Репутация:   0  


Следующая версия программы - 0.1.5. Исходный код + сборки.

Изменилась функция составления кроссворда, которая теперь позволяет заполнить всю сетку кроссворда словами.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
registr
  опции профиля:
сообщение 7.8.2011, 11:26
Сообщение #6


Участник
**

Группа: Участник
Сообщений: 115
Регистрация: 16.11.2009
Пользователь №: 1234

Спасибо сказали: 8 раз(а)




Репутация:   1  


Попробуй рассказать об игре на http://www.gamedev.ru/projects/forum/ Будет дополнительная реклама и возможно какие-нибудь советы и пожелания. Ну и удачи с проектом :)
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
xwicked
  опции профиля:
сообщение 7.8.2011, 21:01
Сообщение #7


Студент
*

Группа: Участник
Сообщений: 66
Регистрация: 2.8.2011
Из: Старый Оскол
Пользователь №: 2781

Спасибо сказали: 0 раз(а)




Репутация:   0  


Цитата(registr @ 7.8.2011, 12:26) *
Попробуй рассказать об игре на http://www.gamedev.ru/projects/forum/ Будет дополнительная реклама и возможно какие-нибудь советы и пожелания. Ну и удачи с проектом :)
Благодарю, посмотрю.
-------------------------------------
В новой версии 0.1.6 - исходник + сборки, добавлен экспорт кроссворда в изображения следующих растровых графических форматов: JPG, JPEG, BMP, TIFF, PNG, XPM, XBM, PPM + несколько других исправлений.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
xwicked
  опции профиля:
сообщение 15.8.2011, 6:26
Сообщение #8


Студент
*

Группа: Участник
Сообщений: 66
Регистрация: 2.8.2011
Из: Старый Оскол
Пользователь №: 2781

Спасибо сказали: 0 раз(а)




Репутация:   0  


А вот и новая версия 0.1.7. Изучаем исходный код + сборки.

Что изменено:
Цитата
- Временное название "Профессиональный кроссворд" изменено на "Клёст-кроссворд".
- При вводе слова в кроссворд, производится проверка на количество введённых букв в поле "Введите слово".
- В свойствах таблицы кроссворда отключена возможность ввода букв, непосредственно в ячейку, минуя поле "Введите слово".
- Изменены цветовые стили некоторых компонентов.
- В строку состояния добавлен компонент, отображающий количество букв.
- Добавлена проверка состояния сохранения изменений, произведённые в кроссворде, при выходе, используя меню "Кроссворд->Выход".
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
xwicked
  опции профиля:
сообщение 17.8.2011, 21:33
Сообщение #9


Студент
*

Группа: Участник
Сообщений: 66
Регистрация: 2.8.2011
Из: Старый Оскол
Пользователь №: 2781

Спасибо сказали: 0 раз(а)




Репутация:   0  


Если у кого-нибудь будет желание свою изменённую версию кроссворда далее распространять, то для этой цели я подготовил спекфайл для сборки программы в дистрибутиве ОС Linux, основанного на RPM-пакетах.
Также прошу найти в нём ошибки:
Цитата
Summary: Qt program for professional creating and easy guessing the classic crossword puzzles.

Summary(ru): Qt программа для профессионального создания редактирования и лёгкого отгадывания классических кроссвордов

%define version 0.1.7

Group: Games/Puzzles

Name: klest-crossword

BuildRequires: gcc-c++, libqt4-sql-sqlite >= 4.4.3, libqtgui4 >= 4.4.3, libqt4-core >= 4.4.3

BuildArch: %ix86

Provides: klest-crossword

Release: alt1

Source: klest-crossword-%{version}.tar.gz

Url: http://labfreetech.org/index_e.html

Version: %{version}

License: GPLv2

Packager: LabFreeTech.org admin@labfreetech.org

%description
Qt program for creating and guessing the classic crossword puzzles.
Supported features: - Create a crossword puzzle; - Editing a crossword puzzle; - Guessing crossword puzzle; - Check correctness of guessing a crossword puzzle; - Save state incompletely guessed crossword puzzle; - Automatic creation of crossword puzzle grid (beta) - Automatic selection of words from the dictionary (Beta 2); - Adding / removing words from the dictionary; - Conservation created a crossword puzzle grid, as a template for the new; - Editing the font crossword; - Editing the size of the grid cell crossword puzzle; - Export crossword in the image.

%description -l ru
Qt программа для профессионального создания редактирования и лёгкого отгадывания классических кроссвордов
Поддерживаемые функции: - Создание кроссворда; - Редактирование кроссворда; - Отгадывание кроссворда; - Проверка правильности отгадывания кроссворда; - Сохранение состояния неполностью отгаданного кроссворда; - Автоматическое создание сетки кроссворда(бета); - Автоматический выбор слов из словаря(бета 2); - Добавление/удаление слов из словаря; - Сохранение созданной сетки кроссворда, как шаблон для нового; - Редактирование шрифта кроссворда; - Редактирование размера ячейки сетки кроссворда; - Экспорт кроссворда в изображение.

%prep

%setup -q

%build
%make_build

%install

cp -Rv klest/ %buildroot/
%clean

rm -rf $RPM_BUILD_ROOT

%files

/usr/games/*
/usr/share/*

%post

test -e /usr/bin/klest-crossword-0.1.7 || ln -s /usr/games/klest-crossword-0.1.7 /usr/bin/klest-crossword-0.1.7
test -e $HOME/Desktop/klest-crossword.desktop || cp -r /usr/share/applications/klest-crossword.desktop $HOME/Desktop/klest-crossword.desktop

%postun

test -L /usr/bin/klest-crossword-0.1.7 && rm -r /usr/bin/klest-crossword-0.1.7
test -e $HOME/Desktop/klest-crossword.desktop && rm -r $HOME/Desktop/klest-crossword.desktop
Специальный архив версии 0.1.7.
Устанавливаем дополнительный пакет rpm-build и собираем командой в консоли:
Цитата
$rpmbuild -bb /home/username/RPM/SPECS/klest-crossword-0.1.7-alt.spec
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
xwicked
  опции профиля:
сообщение 18.8.2011, 21:03
Сообщение #10


Студент
*

Группа: Участник
Сообщений: 66
Регистрация: 2.8.2011
Из: Старый Оскол
Пользователь №: 2781

Спасибо сказали: 0 раз(а)




Репутация:   0  


Продолжение: 0.1.8. Исходник + сборки.

Изменения:
Цитата
- Изменился алгоритм выбора слов из словаря(бета 3), с небольшой оптимизацией;
- Исправлена ошибка при экспорте кроссворда в изображение;
- Изменилось автоматическое переключение между направлением слов, на ручное - щелчком правой кнопки мыши.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

4 страниц V   1 2 3 > » 
Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 23.11.2024, 5:27