Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Qt и кроссплатформенное программирование С/С++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 28.05.2011, 03:28   #1
xwicked
Участник клуба
 
Аватар для xwicked
 
Регистрация: 21.03.2010
Сообщений: 1,508
Лампочка Программа для создания кроссвордов, C++ Qt

Всем здарова! Решил я тут выложить в свободный доступ исходник программы для создания кроссвордов.
Пока код отгадывателя. Создатель будет чуть позже, но в этой же теме(где-то через неделю).

Он немножко устарел, по сравнению с его потомком(Клёст-кроссворд) но, за неимением кросс-аналогов, думаю, что многим будет интересно в нём поковыряться.

Вообщем мне нужна вся критика Открыл проект на SourceForge.net

ЗЫ: C++(Qt)
Google - лучший помощник программиста.
---
моя лаборатория | мой FaceBook
xwicked вне форума Ответить с цитированием
Старый 12.06.2011, 23:05   #2
xwicked
Участник клуба
 
Аватар для xwicked
 
Регистрация: 21.03.2010
Сообщений: 1,508
Лампочка

А вот и создатель кроссвордов - исходник. Второй проект на SourceForge.net.
Дам ещё ссылки на windows-версии, чтобы могли также остальные посмотреть на них: создание, отгадывание.

Проекты оба OpenSource под GPL-copyleft.

Сетка кроссворда представлена обычной таблицей 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(длина слова), само слово).

Жду комментариев
Google - лучший помощник программиста.
---
моя лаборатория | мой FaceBook

Последний раз редактировалось xwicked; 13.06.2011 в 17:31.
xwicked вне форума Ответить с цитированием
Старый 23.06.2011, 11:47   #3
xwicked
Участник клуба
 
Аватар для xwicked
 
Регистрация: 21.03.2010
Сообщений: 1,508
Лампочка Профессиональный кроссворд 0.1.4

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

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

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

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

P.S. Профессиональный кроссворд 0.1.7 = Клёст-кроссворд 0.1.7
Google - лучший помощник программиста.
---
моя лаборатория | мой FaceBook
xwicked вне форума Ответить с цитированием
Старый 28.06.2011, 00:54   #4
xwicked
Участник клуба
 
Аватар для xwicked
 
Регистрация: 21.03.2010
Сообщений: 1,508
Лампочка Профессиональный кроссворд 0.1.5

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

Изменилась функция составления кроссворда, которая теперь позволяет заполнить всю сетку кроссворда словами.
Google - лучший помощник программиста.
---
моя лаборатория | мой FaceBook
xwicked вне форума Ответить с цитированием
Старый 29.06.2011, 14:20   #5
xwicked
Участник клуба
 
Аватар для xwicked
 
Регистрация: 21.03.2010
Сообщений: 1,508
Лампочка Профессиональный кроссворд[Final Edition] 0.1.6

В новой версии 0.1.6 - исходник, добавлен экспорт кроссворда в изображения следующих растровых графических форматов: JPG, JPEG, BMP, TIFF, PNG, XPM, XBM, PPM + несколько других исправлений.
Google - лучший помощник программиста.
---
моя лаборатория | мой FaceBook
xwicked вне форума Ответить с цитированием
Старый 10.07.2011, 19:44   #6
xwicked
Участник клуба
 
Аватар для xwicked
 
Регистрация: 21.03.2010
Сообщений: 1,508
Лампочка Клёст-кроссворд 0.1.7

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

Что изменено:
Цитата:
- Временное название "Профессиональный кроссворд" изменено на "Клёст-кроссворд".
- При вводе слова в кроссворд, производится проверка на количество введённых букв в поле "Введите слово".
- В свойствах таблицы кроссворда отключена возможность ввода букв, непосредственно в ячейку, минуя поле "Введите слово".
- Изменены цветовые стили некоторых компонентов.
- В строку состояния добавлен компонент, отображающий количество букв.
- Добавлена проверка состояния сохранения изменений, произведённые в кроссворде, при выходе, используя меню "Кроссворд->Выход".
Google - лучший помощник программиста.
---
моя лаборатория | мой FaceBook
xwicked вне форума Ответить с цитированием
Старый 10.07.2011, 22:58   #7
still_alive
Great Code Monkey
Форумчанин
 
Аватар для still_alive
 
Регистрация: 09.08.2007
Сообщений: 533
По умолчанию

Цитата:
Сообщение от xwicked Посмотреть сообщение
Вообщем мне нужна вся критика
Я немного, можно?)

Не открывая исходных текстов:
не вижу багтрекера с документацией
не вижу использования системы контроля версий
не вижу тестов (это самое страшное!).
Уже из-за этого я бы очень-очень сильно подумал, стоит ли присоединяться к разработке проекта

Отрыл хэлп:
много лишних комментариев, на которые хочется сказать "спасибо, кэп". Они раздражают и мешают читать код.
Открыл мэйн:
размер мэйна не радует глаз, а кол-во операторов выбора в нем вгоняет в депрессивное состояние. Как и некоторые магические числа.
Тут я на беду открыл кроссвордпро...
Нереально читать код. Ну совсем. Действительно не хочется. Архитектуры вообще никакой. Проектирование отсутствует в принципе. Одни антипаттерны. Божественный класс, большие и запутанные методы и тд и тп. Короче дальше не осилил, сорри...
still_alive вне форума Ответить с цитированием
Старый 11.07.2011, 02:30   #8
xwicked
Участник клуба
 
Аватар для xwicked
 
Регистрация: 21.03.2010
Сообщений: 1,508
Лампочка

Цитата:
Сообщение от still_alive Посмотреть сообщение
Я немного, можно?)

Не открывая исходных текстов:
не вижу багтрекера с документацией
не вижу использования системы контроля версий
не вижу тестов (это самое страшное!).
Уже из-за этого я бы очень-очень сильно подумал, стоит ли присоединяться к разработке проекта

Отрыл хэлп:
много лишних комментариев, на которые хочется сказать "спасибо, кэп". Они раздражают и мешают читать код.
Открыл мэйн:
размер мэйна не радует глаз, а кол-во операторов выбора в нем вгоняет в депрессивное состояние. Как и некоторые магические числа.
Тут я на беду открыл кроссвордпро...
Нереально читать код. Ну совсем. Действительно не хочется. Архитектуры вообще никакой. Проектирование отсутствует в принципе. Одни антипаттерны. Божественный класс, большие и запутанные методы и тд и тп. Короче дальше не осилил, сорри...
1 - Багтрекер можно юзать от SourceForge.net - просто размещу ссылку на него и всё, пойдёт?
2 - Если объясните мне как использовать Git в QtCreator, то буду Вам благодарен
3 - Отсутствие тестов - это не страшно - программа не так сложна, как Вы себе представили.
4 - Комментарии только самые необходимые, для понимания базовых принципов работы основных моментов.
5 - Любой, кто откроет этот код - увидит, что в выделенном фрагменте прослеживается слова новичка-студента, серьёзно. Это так называемое процедурное программирование, с использованием некоторых элементов объектного-ориентирования и всё.
6 - Методы так и разрабатываются, чтобы выносить отдельно только то, что можно вынести. В коде так и сделано, посмотрите внимательно! Вы не писали, что-ли программ? Поглядите на сорцы KDE->любой маленькой программы - и Вы меня поймёте насчёт методов
7 - Чтож, это всего лишь Ваше мнение
Google - лучший помощник программиста.
---
моя лаборатория | мой FaceBook
xwicked вне форума Ответить с цитированием
Старый 11.07.2011, 09:39   #9
still_alive
Great Code Monkey
Форумчанин
 
Аватар для still_alive
 
Регистрация: 09.08.2007
Сообщений: 533
Радость

1 - Если в багтрекере что-то будет, то пойдет.
2 - Я сам для гита пользую консоль. Насчет встройки в криэйтор не знаю, давно не приходилось заниматься всякой гуйней, но на оффсайте написано "Qt Creator integrates with most popular version control systems, including Git, Subversion, Perforce, CVS and Mercurial", так что проблем возникнуть не должно было.
3 - я верю, но она же будет в дальнейшем усложняться или уже все?
4 - открываем main.cpp и видим самые необходимые комментарии, без которых не обойтись:
Код:
//Форма руководства пользователя
    HelpViewer FormHelpViewer;

//Путь, где будет искаться файл руководства
    FormHelpViewer.TextViewer->setSearchPaths(
            QStringList() << "/usr/share/doc/klest-crossword");

//Если был передан параметр
        if(argc == 2)

SP = argv[1];//Параметр в переменную

//Если "ru" - загрузить файл русского руководства
                    if(SP == "ru")
                        FormHelpViewer.TextViewer->setSource(QString("klest-crossword.html"));

//Развернуть окно на весь экраны
    FormHelpViewer.setWindowState(Qt::WindowMaximized);
    FormHelpViewer.show();//Показать форму
5 - И много его открыло и отписалось?)
Значит, скажем, интимная связь между бизнес-логикой и интерфейсом теперь так называется? Буду знать, чтобы не упасть лицом в грязь, разговаривая с настоящим мега-гуру) Кстати, возьму на вооружение. Придет шеф, спросит: "А чой это у тебя код такой отстойный?" Я: "Ты дурак что-ль? Это же процедурное программирование, с использованием некоторых элементов объектного-ориентирования!" Прям тема для комикса)
6 - Такие писал. Но это было давно и мне за них стыдно) В общем это было давно и неправда. Так что не, не писал, не было такого)
Так вы-то как раз и не вынесли кучу из того, что можно и нужно вынести.
7 - Да, это всего лишь мое скромное, ни на что не годящееся мнение, которое можно с чистой совестью проигнорировать и продолжать писать код так, как вздумается
still_alive вне форума Ответить с цитированием
Старый 11.07.2011, 16:15   #10
xwicked
Участник клуба
 
Аватар для xwicked
 
Регистрация: 21.03.2010
Сообщений: 1,508
Лампочка

Цитата:
Сообщение от still_alive Посмотреть сообщение
...
Значит, скажем, интимная связь между бизнес-логикой и интерфейсом теперь так называется? Буду знать, чтобы не упасть лицом в грязь, разговаривая с настоящим мега-гуру) Кстати, возьму на вооружение. Придет шеф, спросит: "А чой это у тебя код такой отстойный?" Я: "Ты дурак что-ль? Это же процедурное программирование, с использованием некоторых элементов объектного-ориентирования!" Прям тема для комикса)...
Нужно не комиксы сочинять, а посмотреть на реальные программы, которыми пользуются все

1. KDE4->возмите любую программу->мой код ни чуть не хуже, про то, что лучше я даже и заикаться не буду.
2. Qt считается самой сложной библиотекой. Убедился я сам на опыте. Поэтому и нет пока других отписавшихся, кроме Вас.
3. Нельзя же быть таким агрессивным. Нервные клетки не восстанавливаются. Это всего лишь Ваше мнение, зачем упорствовать в его навязывании мне, непонятно.
Google - лучший помощник программиста.
---
моя лаборатория | мой FaceBook

Последний раз редактировалось xwicked; 11.07.2011 в 17:07.
xwicked вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Программа для создания кроссвордов - Lazarus[Delphi]-версия xwicked Общие вопросы Delphi 3 24.09.2012 21:02
Программа для создания модулей/макетов для КМС LeoN Софт 0 02.12.2010 10:51
Программа для создания меню для сайта iukash Софт 3 06.06.2009 13:10
Логика для Кроссвордов Судоку. С.М.С Свободное общение 7 02.04.2009 16:07