crossplatform.ru

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

> Программа для создания кроссвордов, Обсуждение программы и кода
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(длина слова), само слово).
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
 
Начать новую тему
Ответов
Алексей1153
  опции профиля:
сообщение 10.2.2012, 6:45
Сообщение #2


фрилансер
******

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

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




Репутация:   34  


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

работает быстро, так как компилятор строит табличную адресацию, а не перебор множества условий, как можно было бы подумать. То есть, практически вычисляется тот же индекс, по которому берётся адрес перехода для jmp , делается переход.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Сообщений в этой теме
- xwicked   Программа для создания кроссвордов   2.8.2011, 14:50
- - ViGOur   у нас на сайте, есть раздел исходники, можешь доба...   2.8.2011, 15:43
|- - xwicked   Цитата(ViGOur @ 2.8.2011, 16:43) у нас на...   2.8.2011, 18:17
- - xwicked   Продолжаем знакомиться с исходником. Профессиональ...   4.8.2011, 16:40
- - xwicked   Следующая версия программы - 0.1.5. Исходный код +...   6.8.2011, 12:08
- - registr   Попробуй рассказать об игре на http://www.gamedev....   7.8.2011, 11:26
|- - xwicked   Цитата(registr @ 7.8.2011, 12:26) Попробу...   7.8.2011, 21:01
- - xwicked   А вот и новая версия 0.1.7. Изучаем исходный код +...   15.8.2011, 6:26
- - xwicked   Если у кого-нибудь будет желание свою изменённую в...   17.8.2011, 21:33
- - xwicked   Продолжение: 0.1.8. Исходник + сборки. Изменения:...   18.8.2011, 21:03
- - xwicked   Здравствуйте! Хочу порадовать Вас тем, что я ...   21.8.2011, 19:57
- - xwicked   Следующая версия = 0.2.0. Исходный код + сборки: ...   22.8.2011, 17:12
- - Алексей1153   xwicked, ЦитатаСтруктура файла - динамическая. ...   23.8.2011, 6:36
|- - xwicked   Цитата(Алексей1153 @ 23.8.2011, 7:36) ......   23.8.2011, 8:25
- - Алексей1153   xwicked, громоздкость ? Да ерунда. Имена неосновны...   23.8.2011, 9:03
|- - xwicked   Цитата(Алексей1153 @ 23.8.2011, 10:03) xw...   23.8.2011, 10:15
- - Litkevich Yuriy   Цитата(Алексей1153 @ 23.8.2011, 12:03) 1....   23.8.2011, 9:42
- - Алексей1153   Цитатаэто элементарно, по сравнению с XML сравнимо...   23.8.2011, 9:46
- - Алексей1153   xwicked, я прекрасно осведомлён о содержимом и уст...   23.8.2011, 11:15
|- - xwicked   Цитата(Алексей1153 @ 23.8.2011, 12:08) .....   23.8.2011, 11:20
- - Алексей1153   xwicked, осторожно! Кроссворды тебя погубят   23.8.2011, 11:28
- - xwicked   Программа доведена до стабильности. Релиз 0.2.1. И...   25.8.2011, 18:19
- - xwicked   А в новой версии 0.2.2 я реализовал импорт кроссво...   3.9.2011, 22:53
- - xwicked   Здравствуйте! Цитата- Добавлена возможность по...   8.11.2011, 1:39
|- - Sokoloff   Цитата(xwicked @ 8.11.2011, 2:39) Появила...   29.11.2011, 12:05
- - xwicked   В версии 0.2.8 я добавил функции горизонтального и...   26.11.2011, 23:55
- - Алексей1153   ЦитатаНо... я не смог быстро придумать функцию обр...   28.11.2011, 6:12
- - xwicked   Цитата(Sokoloff @ 29.11.2011, 12:05) ... ...   1.12.2011, 5:52
- - xwicked   Следующая версия программы 0.2.9. В ней я походу в...   28.1.2012, 16:04
- - xwicked   Здравствуйте! Как я избавился от переполнения ...   8.2.2012, 22:48
- - Алексей1153   можно немного встряну )) предлагаю более ООП вари...   9.2.2012, 7:37
|- - xwicked   Цитата(Алексей1153 @ 9.2.2012, 8:37) можн...   9.2.2012, 15:34
- - Алексей1153   >>Насчёт остального мне пока квалификации не...   9.2.2012, 19:52
|- - xwicked   Цитата(Алексей1153 @ 9.2.2012, 20:52) ......   9.2.2012, 21:52
- - Алексей1153   свич - это великолепная штука, когда нужно выбрать...   10.2.2012, 6:45
- - xwicked   Оптимизация констант: enum eTypeCrossword {TYPE_PD...   11.6.2012, 16:14
- - xwicked   Все изменения:Цитата- Добавлена возможность создат...   6.5.2013, 21:36


Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


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




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