Russian Qt Forum
Май 07, 2024, 01:55 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: 1 2 3 [4] 5   Вниз
  Печать  
Автор Тема: [РЕШЕНО] Программная разработка доски Судоку  (Прочитано 36044 раз)
DmitryM
Гость
« Ответ #45 : Май 31, 2012, 11:01 »

Понятно, но если делать вручную судоку то при рисовании поля проблем не возникнет, зато далее будет очень весело: нажатую ячейку нужно выделить, для этого поле разделяем в виде сетки, отлавливаем куда тыкнул пользователь, зная координаты, выясняем на какую ячейку он попал, потом можно и нужно для ячейки подобрать значение (в судоку каждая ячейка имеет значение от 1-9), значит тоже самое что и с определением ячейки по координатам. Если мы захотим изменить размер окна, тут будет проще - используя метод scale() рисовальщика, и зная ширину/высоту окна, можем это осуществить Улыбающийся
Но я не сторонник самоистезаний, если есть другой путь, хотя и сам не уверен, что другой путь приведет к цели, но этот способ гарантирует полный контроль над полем и возможность сделать на нем все что придумается Улыбающийся
Используя mousePressEven получаешь координаты курсора, поделив координаты на размер ячейки получаешь номер ячейки, а дальше работаешь только с областью конкретной ячейки.

поле игры рисуется целиком вручную в пейнт эвенте, включая "рамочку". Групбоксы там только для меню.
Рисование в paintEven не самая удобная штука, да и сам paintEven часто вызваться. Намного удобней рисовать в QImage/QPixmap, а в paintEven вызывать drawImage/drawPixmap
Записан
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4727



Просмотр профиля WWW
« Ответ #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
Гость
« Ответ #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
Гость
« Ответ #48 : Май 31, 2012, 13:29 »

Рисование в paintEven не самая удобная штука, да и сам paintEven часто вызваться. Намного удобней рисовать в QImage/QPixmap, а в paintEven вызывать drawImage/drawPixmap

А я разве говорил что все нужно рисовать в пейнт эвенте постоянно? Подмигивающий Двойная буферизация - это необходимый минимум.
Записан
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4727



Просмотр профиля WWW
« Ответ #49 : Май 31, 2012, 13: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
Гость
« Ответ #50 : Май 31, 2012, 13:57 »

А я разве говорил что все нужно рисовать в пейнт эвенте постоянно? Подмигивающий

поле игры рисуется целиком вручную в пейнт эвенте, включая "рамочку". Групбоксы там только для меню.
Записан
Bepec
Гость
« Ответ #51 : Май 31, 2012, 13:59 »

А вот в пейнт евенте это будет на порядок сложнее Подмигивающий Даже для общего развития Улыбающийся
Записан
DmitryM
Гость
« Ответ #52 : Май 31, 2012, 14:48 »

А вот в пейнт евенте это будет на порядок сложнее Подмигивающий Даже для общего развития Улыбающийся
О_о Вызвать QPainter::drawPixmap это так сложно?
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #53 : Май 31, 2012, 15:01 »

Цитировать
Одну и ту же работу дали семерым солдатам и семерым инженерам. Семеро солдат до обеда сделали. А семеро инженеров до вечера обсуждали как лучше сделать, но работа даже не была начата
По-моему время обсуждения уже многократно превысило время любой реализации  Улыбающийся
Записан
Bepec
Гость
« Ответ #54 : Май 31, 2012, 15:13 »

DmitryM.

Чтобы изменить с 1 квадрата на 4 соединённых, в model-View надо будет лишь изменить данные. Типа добавить в массив десяток записей.

Чтобы изменить с 1 квадрата на 4 соединённых, в painter-Event нужно переписать код, потестить, изменить параметры отрисовки, собственноручно потестить(вдруг где то константа), добавить в массив десяток записей, потестить, убрать баги и вылезающие линии, добавить реализацию щелчка на пустые ячейки(где не должно быть значений) и прочая прочая.

Сравнил масштаб?
В model-View надо изменить данные.

В Painter'e надо переписать код, добавить новые возможности. Возможно даже методы, перерасчёт значений, добавление нескольких проверок.
Записан
Kurles
Бывалый
*****
Offline Offline

Сообщений: 480



Просмотр профиля
« Ответ #55 : Май 31, 2012, 16:06 »

Верх извращений - использовать model, paintEvent и QDataWidgetMapper Улыбающийся
Записан

Код
C++ (Qt)
while(!asleep()) sheep++;
ufna
Гость
« Ответ #56 : Май 31, 2012, 16:40 »

поле игры рисуется целиком вручную в пейнт эвенте, включая "рамочку". Групбоксы там только для меню.

И дальше что? Непонимающий я двойную буферизацию там же и делаю. Когда надо - полная перерисовка кэша (к примеру, сменился цвет или размер), когда не надо - кэшированный пиксмап + поверх те данные, которые кешировать нет смысла. И все это спокойно находится так или иначе в пеинт эвенте Улыбающийся

DmitryM.

Чтобы изменить с 1 квадрата на 4 соединённых, в model-View надо будет лишь изменить данные. Типа добавить в массив десяток записей.

Чтобы изменить с 1 квадрата на 4 соединённых, в painter-Event нужно переписать код, потестить, изменить параметры отрисовки, собственноручно потестить(вдруг где то константа), добавить в массив десяток записей, потестить, убрать баги и вылезающие линии, добавить реализацию щелчка на пустые ячейки(где не должно быть значений) и прочая прочая.

Сравнил масштаб?
В model-View надо изменить данные.

В Painter'e надо переписать код, добавить новые возможности. Возможно даже методы, перерасчёт значений, добавление нескольких проверок.

 Непонимающий

1. model-view это подход. В данном случае игра табличная, в принципе наверное через тейбл вью то она может проще и делается, а если ввести что-либо "не табличное", то сразу все пойдет прахом
2. изначально берясь за задачу ты должен изучить ее в деталях (грубо говоря - а что конкретно ты делаешь и что тебе надо). Сделать из одного квадрата четыре не так сложно и муторно, как Вы описали, если сразу подумать об архитектуре, а не наляпать по-быстрому Улыбающийся
Записан
Bepec
Гость
« Ответ #57 : Май 31, 2012, 17:02 »

Правильно ufna. Если немного подумать можно и на ассемблере написать Подмигивающий А TableView из коробки Подмигивающий

Модель вью не отменяет других подходов. И в именно данной ситуации, без особо опыта с painter'ом TableView - самый лучший выбор на мой взгляд Улыбающийся
Записан
ufna
Гость
« Ответ #58 : Май 31, 2012, 17:30 »

Правильно ufna. Если немного подумать можно и на ассемблере написать Подмигивающий А TableView из коробки Подмигивающий

Модель вью не отменяет других подходов. И в именно данной ситуации, без особо опыта с painter'ом TableView - самый лучший выбор на мой взгляд Улыбающийся

Ну не надо утрировать, все-таки мы говорим о hi-level api в любом случае Подмигивающий Пейнтер - очень классный механизм, я очень много с ним работал, особенно если говорить про мобильные платформы.

В данном случае, если не нужно никаких выкрутасов с графикой, то тейбл вью - наиболее прост. А если что-то нужно сверх черненьких ячеек - лично я бы сделал "на пеинтере". Кому что ближе, наверное.
Записан
gil9red
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 1805



Просмотр профиля WWW
« Ответ #59 : Май 31, 2012, 18:12 »

Да уж, не думал что мой невинный вопрос поднимет такой кипешь Улыбающийся
В общем, понятно, эту задачу можно решить разными способами, а вот какой - это дело выбора: кому как удобно Улыбающийся
Записан

Страниц: 1 2 3 [4] 5   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.079 секунд. Запросов: 23.