Russian Qt Forum
Мая 26, 2025, 05:12
Добро пожаловать,
Гость
. Пожалуйста,
войдите
или
зарегистрируйтесь
.
Вам не пришло
письмо с кодом активации?
1 час
1 день
1 неделя
1 месяц
Навсегда
Войти
Начало
Форум
WIKI (Вики)
FAQ
Помощь
Поиск
Войти
Регистрация
Russian Qt Forum
>
Forum
>
Qt
>
Пользовательский интерфейс (GUI)
>
[РЕШЕНО] Программная разработка доски Судоку
Страниц:
1
2
3
[
4
]
5
Вниз
« предыдущая тема
следующая тема »
Печать
Автор
Тема: [РЕШЕНО] Программная разработка доски Судоку (Прочитано 38834 раз)
DmitryM
Гость
Re: Программная разработка доски Судоку
«
Ответ #45 :
Мая 31, 2012, 11:01 »
Цитата: gil9red от Мая 30, 2012, 21:57
Понятно, но если делать вручную судоку то при рисовании поля проблем не возникнет, зато далее будет очень весело: нажатую ячейку нужно выделить, для этого поле разделяем в виде сетки, отлавливаем куда тыкнул пользователь, зная координаты, выясняем на какую ячейку он попал, потом можно и нужно для ячейки подобрать значение (в судоку каждая ячейка имеет значение от 1-9), значит тоже самое что и с определением ячейки по координатам. Если мы захотим изменить размер окна, тут будет проще - используя метод scale() рисовальщика, и зная ширину/высоту окна, можем это осуществить
Но я не сторонник самоистезаний, если есть другой путь, хотя и сам не уверен, что другой путь приведет к цели, но этот способ гарантирует полный контроль над полем и возможность сделать на нем все что придумается
Используя mousePressEven получаешь координаты курсора, поделив координаты на размер ячейки получаешь номер ячейки, а дальше работаешь только с областью конкретной ячейки.
Цитата: ufna от Мая 30, 2012, 21:47
поле игры рисуется целиком вручную в пейнт эвенте, включая "рамочку". Групбоксы там только для меню.
Рисование в paintEven не самая удобная штука, да и сам paintEven часто вызваться. Намного удобней рисовать в QImage/QPixmap, а в paintEven вызывать drawImage/drawPixmap
Записан
kambala
Джедай : наставник для всех
Offline
Сообщений: 4747
Re: Программная разработка доски Судоку
«
Ответ #46 :
Мая 31, 2012, 11:19 »
Цитата: Википедия
В последнее время появились модификации большего размера, чем 9 на 9 клеток. Например, существуют судоку с размерами 12×12 или даже 16×16, предназначенные для опытных игроков.
ещё есть составные судоку - такие не являются квадратными, а получаются путём пересечения квадратов
Записан
Изучением C++ вымощена дорога в Qt.
UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
Bepec
Гость
Re: Программная разработка доски Судоку
«
Ответ #47 :
Мая 31, 2012, 11:56 »
Камбала, если это то, о чём ты говоришь -
http://www.scanword.info/puzzle/gattai/tripple_doku_1.gif
или
http://sudoku.relaks.com.ua/on-line-sudoku/sostavnie-sudoku/sostavnie-sudoku-00002.html
Тогда это делается в модели за минуту. Только надо будет ещё логику поменять расчёта, но это в любом случае придётся делать.
PS закрасить или не отрисовывать рамки ненужных квадратов - легко.
Записан
ufna
Гость
Re: Программная разработка доски Судоку
«
Ответ #48 :
Мая 31, 2012, 13:29 »
Цитата: DmitryM от Мая 31, 2012, 11:01
Рисование в paintEven не самая удобная штука, да и сам paintEven часто вызваться. Намного удобней рисовать в QImage/QPixmap, а в paintEven вызывать drawImage/drawPixmap
А я разве говорил что все нужно рисовать в пейнт эвенте постоянно?
Двойная буферизация - это необходимый минимум.
Записан
kambala
Джедай : наставник для всех
Offline
Сообщений: 4747
Re: Программная разработка доски Судоку
«
Ответ #49 :
Мая 31, 2012, 13:56 »
Цитата: Bepec от Мая 31, 2012, 11:56
Камбала, если это то, о чём ты говоришь -
http://www.scanword.info/puzzle/gattai/tripple_doku_1.gif
или
http://sudoku.relaks.com.ua/on-line-sudoku/sostavnie-sudoku/sostavnie-sudoku-00002.html
Тогда это делается в модели за минуту. Только надо будет ещё логику поменять расчёта, но это в любом случае придётся делать.
PS закрасить или не отрисовывать рамки ненужных квадратов - легко.
да, это. я ж не говорил, что это сложно реализовать, а просто написал для общего развития
Записан
Изучением C++ вымощена дорога в Qt.
UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
DmitryM
Гость
Re: Программная разработка доски Судоку
«
Ответ #50 :
Мая 31, 2012, 13:57 »
Цитата: ufna от Мая 31, 2012, 13:29
А я разве говорил что все нужно рисовать в пейнт эвенте постоянно?
Цитата: ufna от Мая 30, 2012, 21:47
поле игры рисуется
целиком вручную в пейнт эвенте
, включая "рамочку". Групбоксы там только для меню.
Записан
Bepec
Гость
Re: Программная разработка доски Судоку
«
Ответ #51 :
Мая 31, 2012, 13:59 »
А вот в пейнт евенте это будет на порядок сложнее
Даже для общего развития
Записан
DmitryM
Гость
Re: Программная разработка доски Судоку
«
Ответ #52 :
Мая 31, 2012, 14:48 »
Цитата: Bepec от Мая 31, 2012, 13:59
А вот в пейнт евенте это будет на порядок сложнее
Даже для общего развития
О_о Вызвать QPainter::drawPixmap это так сложно?
Записан
Igors
Джедай : наставник для всех
Offline
Сообщений: 11445
Re: Программная разработка доски Судоку
«
Ответ #53 :
Мая 31, 2012, 15:01 »
Цитировать
Одну и ту же работу дали семерым солдатам и семерым инженерам. Семеро солдат до обеда сделали. А семеро инженеров до вечера обсуждали как лучше сделать, но работа даже не была начата
По-моему время обсуждения уже многократно превысило время
любой
реализации
Записан
Bepec
Гость
Re: Программная разработка доски Судоку
«
Ответ #54 :
Мая 31, 2012, 15:13 »
DmitryM.
Чтобы изменить с 1 квадрата на 4 соединённых, в model-View надо будет лишь изменить данные. Типа
добавить в массив десяток записей
.
Чтобы изменить с 1 квадрата на 4 соединённых, в painter-Event нужно переписать код, потестить, изменить параметры отрисовки, собственноручно потестить(вдруг где то константа),
добавить в массив десяток записей
, потестить, убрать баги и вылезающие линии, добавить реализацию щелчка на пустые ячейки(где не должно быть значений) и прочая прочая.
Сравнил масштаб?
В model-View надо изменить данные.
В Painter'e надо переписать код, добавить новые возможности. Возможно даже методы, перерасчёт значений, добавление нескольких проверок.
Записан
Kurles
Бывалый
Offline
Сообщений: 480
Re: Программная разработка доски Судоку
«
Ответ #55 :
Мая 31, 2012, 16:06 »
Верх извращений - использовать model, paintEvent и QDataWidgetMapper
Записан
Код
C++ (Qt)
while
(
!
asleep
(
)
)
sheep
++;
ufna
Гость
Re: Программная разработка доски Судоку
«
Ответ #56 :
Мая 31, 2012, 16:40 »
Цитата: DmitryM от Мая 31, 2012, 13:57
Цитата: ufna от Мая 30, 2012, 21:47
поле игры рисуется
целиком вручную в пейнт эвенте
, включая "рамочку". Групбоксы там только для меню.
И дальше что?
я двойную буферизацию там же и делаю. Когда надо - полная перерисовка кэша (к примеру, сменился цвет или размер), когда не надо - кэшированный пиксмап + поверх те данные, которые кешировать нет смысла. И все это спокойно находится так или иначе в пеинт эвенте
Цитата: Bepec от Мая 31, 2012, 15:13
DmitryM.
Чтобы изменить с 1 квадрата на 4 соединённых, в model-View надо будет лишь изменить данные. Типа
добавить в массив десяток записей
.
Чтобы изменить с 1 квадрата на 4 соединённых, в painter-Event нужно переписать код, потестить, изменить параметры отрисовки, собственноручно потестить(вдруг где то константа),
добавить в массив десяток записей
, потестить, убрать баги и вылезающие линии, добавить реализацию щелчка на пустые ячейки(где не должно быть значений) и прочая прочая.
Сравнил масштаб?
В model-View надо изменить данные.
В Painter'e надо переписать код, добавить новые возможности. Возможно даже методы, перерасчёт значений, добавление нескольких проверок.
1. model-view это подход. В данном случае игра табличная, в принципе наверное через тейбл вью то она может проще и делается, а если ввести что-либо "не табличное", то сразу все пойдет прахом
2. изначально берясь за задачу ты должен изучить ее в деталях (грубо говоря - а что конкретно ты делаешь и что тебе надо). Сделать из одного квадрата четыре не так сложно и муторно, как Вы описали, если сразу подумать об архитектуре, а не наляпать по-быстрому
Записан
Bepec
Гость
Re: Программная разработка доски Судоку
«
Ответ #57 :
Мая 31, 2012, 17:02 »
Правильно ufna. Если немного подумать можно и на ассемблере написать
А TableView из коробки
Модель вью не отменяет других подходов. И в именно данной ситуации, без особо опыта с painter'ом TableView - самый лучший выбор на мой взгляд
Записан
ufna
Гость
Re: Программная разработка доски Судоку
«
Ответ #58 :
Мая 31, 2012, 17:30 »
Цитата: Bepec от Мая 31, 2012, 17:02
Правильно ufna. Если немного подумать можно и на ассемблере написать
А TableView из коробки
Модель вью не отменяет других подходов. И в именно данной ситуации, без особо опыта с painter'ом TableView - самый лучший выбор на мой взгляд
Ну не надо утрировать, все-таки мы говорим о hi-level api в любом случае
Пейнтер - очень классный механизм, я очень много с ним работал, особенно если говорить про мобильные платформы.
В
данном
случае, если не нужно никаких выкрутасов с графикой, то тейбл вью - наиболее прост. А если что-то нужно сверх черненьких ячеек - лично я бы сделал "на пеинтере". Кому что ближе, наверное.
Записан
gil9red
Administrator
Джедай : наставник для всех
Offline
Сообщений: 1805
Re: Программная разработка доски Судоку
«
Ответ #59 :
Мая 31, 2012, 18:12 »
Да уж, не думал что мой невинный вопрос поднимет такой кипешь
В общем, понятно, эту задачу можно решить разными способами, а вот какой - это дело выбора: кому как удобно
Записан
https://github.com/gil9red
https://ru.stackoverflow.com/users/201445/gil9red
Страниц:
1
2
3
[
4
]
5
Вверх
Печать
« предыдущая тема
следующая тема »
Перейти в:
Пожалуйста, выберите назначение:
-----------------------------
Qt
-----------------------------
=> Вопросы новичков
=> Уроки и статьи
=> Установка, сборка, отладка, тестирование
=> Общие вопросы
=> Пользовательский интерфейс (GUI)
=> Qt Quick
=> Model-View (MV)
=> Базы данных
=> Работа с сетью
=> Многопоточное программирование, процессы
=> Мультимедиа
=> 2D и 3D графика
=> OpenGL
=> Печать
=> Интернационализация, локализация
=> QSS
=> XML
=> Qt Script, QtWebKit
=> ActiveX
=> Qt Embedded
=> Дополнительные компоненты
=> Кладовая готовых решений
=> Вклад сообщества в Qt
=> Qt-инструментарий
-----------------------------
Программирование
-----------------------------
=> Общий
=> С/C++
=> Python
=> Алгоритмы
=> Базы данных
=> Разработка игр
-----------------------------
Компиляторы и платформы
-----------------------------
=> Linux
=> Windows
=> Mac OS X
=> Компиляторы
===> Visual C++
-----------------------------
Разное
-----------------------------
=> Новости
===> Новости Qt сообщества
===> Новости IT сферы
=> Говорилка
=> Юмор
=> Объявления
Загружается...