Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.53/19: Рейтинг темы: голосов - 19, средняя оценка - 4.53
Я Фоюмчанин ? дааааа)
 Аватар для ivan.-94
213 / 204 / 23
Регистрация: 02.06.2012
Сообщений: 1,424
Записей в блоге: 12

Структура приложения "Спичечные головоломки"

15.02.2015, 13:01. Показов 4048. Ответов 56
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем доброго времени суток.
С самого начала: хочу реализовать приложение головоломку "спички".
И так, что я пока сделал:
Я могу ввести число строк и столбцов и нарисовать, а так же сразу
создаю массив с точками пересечения прямых.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
    Image1->Canvas->Brush->Color = clWhite;
    Image1->Canvas->Pen->Color = clSkyBlue;
    int N = 7;
    N = Edit1->Text.ToInt();
    Panel1->Width = Panel1->Height;
    float dx, dy;
    dy = (float)Image1->Height / N;
    dx = (float)Image1->Width / N;
    TPointF *map = new TPointF[(N+1)*(N+1)]; // массив точек
    int i = 0;
    for (float y = 0; y < Image1->Height; y+=dy) {
        for (float x = 0; x < Image1->Width; x+=dx) {
            Image1->Canvas->Rectangle(x, y , x+dx, y+dy);
            if (x==0&&y==0) {
                map[i] = PointF(x,y);       i++;
                map[i] = PointF(x+dx,y);    i++;
                map[i] = PointF(x+dx,y+dy); i++;
                map[i] = PointF(x,y+dy);    i++;
            }
            if (x!=0&&y==0) {
                map[i] = PointF(x+dx,y);    i++;
                map[i] = PointF(x+dx,y+dy); i++;
            }
            if (y!=0&&x==0) {
                map[i] = PointF(x,y+dy);    i++;
                map[i] = PointF(x+dx,y+dy); i++;
            }
            if (x!=0&&y!=0) {
                map[i] = PointF(x+dx,y+dy); i++;
            }
        }
    }
Далее я буду создавать спичку и рисовать.
И тут вопрос как лучше рисовать спичку и как обрабатывать Drag And Drop? при рисовании на Canvos
Плюс ко всему мне нужно обрабатывать положение спички, так, что бы она могла располагаться только от точки до точки:
Название: 2.png
Просмотров: 141

Размер: 2.7 КбНазвание: 3.png
Просмотров: 140

Размер: 4.5 Кб
Как я думою:
Мне нужно создать класс Квадрат и при подсчете точек создавать объекты этого класса и сохранять его координаты.
т.е. наглядно будет так:Название: 4.png
Просмотров: 142

Размер: 3.1 Кб
Далее просто MouseMove будем бегать по всем квадратам и сравнивать координаты и положение мышки:
Относительно всего поля найдем нужный квадрат, а относительно этого квадрата будем смотреть где в нем расположить спичку.

Нужны комментарии, предложения, замечания и т.д. ...
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
15.02.2015, 13:01
Ответы с готовыми решениями:

Структура приложения
Обращаюсь к опытным разработчикам как новичок. Хочу написать маленькое несложное приложение, но возникла проблема с проектированием...

Структура приложения
У меня есть класс user и post. Есть контроллер. Насчет классов понятно - на каждый объект свой класс. А вот насчет контроллеров -...

Структура Qt-приложения
Хотел бы понять, как устроено приложение Qt и как правильно его разрабатывать. Как правильно разделять интерфейс от логики приложения....

56
Я Фоюмчанин ? дааааа)
 Аватар для ivan.-94
213 / 204 / 23
Регистрация: 02.06.2012
Сообщений: 1,424
Записей в блоге: 12
19.02.2015, 15:39  [ТС]
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от Avazart Посмотреть сообщение
На кой тебе StretchDraw() ?
У меня не фиксированный размер квадратов, он меняется по средством изменения размера формы или по средством увеличения их количества. Поэтому приходится вжимать изображение.
0
Эксперт С++
 Аватар для Avazart
8489 / 6156 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
19.02.2015, 15:42
Цитата Сообщение от ivan.-94 Посмотреть сообщение
У меня не фиксированный размер квадратов, он меняется по средством изменения размера формы или по средством увеличения их количества. Поэтому приходится вжимать изображение.
Ну так меняй тогда когда меняется размер формы, а не каждый раз как рисуешь.
В любом случаи это "узкое" место.
0
Я Фоюмчанин ? дааааа)
 Аватар для ivan.-94
213 / 204 / 23
Регистрация: 02.06.2012
Сообщений: 1,424
Записей в блоге: 12
19.02.2015, 15:49  [ТС]
Цитата Сообщение от SatanaXIII Посмотреть сообщение
1) Включите двойную буферизацию формы.
Это само собой сделал как только создал проект)))
Цитата Сообщение от SatanaXIII Посмотреть сообщение
Отрисовывайте все в битмап, а потом прорисовывайте его в имейдж.
Пока не пробовал, но если не зная, как там все внутри работает, на первый взгляд в голову приходи, что действий для ЭВМ станет больше и оно должно замедлить процесс...

Добавлено через 2 минуты
Avazart, Я понимаю, что каждый раз ужимая изображение выполняются лишние и трудоемкие действия,
но у меня форма по умолчанию на весь экран. А кто знает какой экран у какого пользователя? да никто вот и приходится хранить изображение большие и рисовать сжимая.
0
Почетный модератор
Эксперт С++
 Аватар для SatanaXIII
5851 / 2862 / 392
Регистрация: 01.11.2011
Сообщений: 6,906
19.02.2015, 16:23
Цитата Сообщение от ivan.-94 Посмотреть сообщение
на первый взгляд в голову приходи, что действий для ЭВМ станет больше и оно должно замедлить процесс
Без отрисовки в битмап:
Просчитать небольшой кусочек, отрисовать его (полностью перерисовать всю область рисования, прям на экране, все дела), просчитать еще кусочек, отрисовать, еще просчитать, отрисовать.

С промежуточной отрисовкой:
Просчитать кусок, отрисовать его в битмап (в памяти байтики переставить), просчитать, отрисовать... В конце отрисовать битмап на экран.
0
Я Фоюмчанин ? дааааа)
 Аватар для ivan.-94
213 / 204 / 23
Регистрация: 02.06.2012
Сообщений: 1,424
Записей в блоге: 12
20.02.2015, 15:11  [ТС]
SatanaXIII,
Я вас ни капельки не понял

Добавлено через 21 час 57 минут
В общем тут ничего не изменить, вся графика в приложениях обрабатывается непосредственно процессором и видеокарта ничего не делает. В Win Api, что бы снизить нагрузку сделана двойная буферизация и её я использую...
Выход только 1 переключить обработку графики на видео карту, а это можно сделать только использую графические библиотеки например Open GL...
0
Почетный модератор
Эксперт С++
 Аватар для SatanaXIII
5851 / 2862 / 392
Регистрация: 01.11.2011
Сообщений: 6,906
20.02.2015, 15:36
Цитата Сообщение от ivan.-94 Посмотреть сообщение
Выход только 1
Ну или слушать, что вам говорят.
0
Я Фоюмчанин ? дааааа)
 Аватар для ivan.-94
213 / 204 / 23
Регистрация: 02.06.2012
Сообщений: 1,424
Записей в блоге: 12
20.02.2015, 15:41  [ТС]
SatanaXIII, а каким образом перерисовывать кусочек?
Скажем у меня нужно перерисовать 2 квадрата: 1 с которого я забрал спичку и 2 в который положил.
И у меня есть точные координаты этих квадратов.
Как мне какой то битмап с моим квадратом нарисовать на изображении в каком то месте?
0
Почетный модератор
Эксперт С++
 Аватар для SatanaXIII
5851 / 2862 / 392
Регистрация: 01.11.2011
Сообщений: 6,906
20.02.2015, 15:57
ivan.-94, надо уходить в винапи. Ловить WM_Paint для окна и хоть попиксельно его перерисовывать.

Я вообще к тому, что скорее всего вы лечите следствие. Плохой алгоритм отрисовки используете. Неверная организация программы вообще. Я бы в эту сторону копал. Но я уже повторяюсь.
0
Я Фоюмчанин ? дааааа)
 Аватар для ivan.-94
213 / 204 / 23
Регистрация: 02.06.2012
Сообщений: 1,424
Записей в блоге: 12
20.02.2015, 16:09  [ТС]
Цитата Сообщение от SatanaXIII Посмотреть сообщение
Плохой алгоритм отрисовки используете. Неверная организация программы вообще. Я бы в эту сторону копал
В принципе я тут показал как я рисую, показал алгоритм. Укажите мне четко, что не верно.
А так получаются пустые слова, без фактов.

Добавлено через 3 минуты
C++
1
2
3
for (float y = 0; y < Image1->Height; y+=dy) {
        for (float x = 0; x < Image1->Width; x+=dx) {
            Image1->Canvas->Rectangle(x, y , x+dx, y+dy);
Тут я согласен, что рисовать кучу квадратов не рационально можно просто нарисовать лини от края до края имеджа вертикально и горизонтально с шагом равным длине квадрата.(И то мне тут никто на это не указывал...)

Вот это факт...
0
Почетный модератор
Эксперт С++
 Аватар для SatanaXIII
5851 / 2862 / 392
Регистрация: 01.11.2011
Сообщений: 6,906
20.02.2015, 16:10
Цитата Сообщение от ivan.-94 Посмотреть сообщение
Укажите мне четко, что не верно
Структура приложения "Спичечные головоломки"
Цитата Сообщение от ivan.-94 Посмотреть сообщение
А так получаются пустые слова, без фактов.
Все, все. Отваливаю.
0
Я Фоюмчанин ? дааааа)
 Аватар для ivan.-94
213 / 204 / 23
Регистрация: 02.06.2012
Сообщений: 1,424
Записей в блоге: 12
20.02.2015, 21:31  [ТС]
SatanaXIII, я читал, проверки у меня есть. я уменьшил количество прорисовок, конечно же я проверяю положение и так далее, конечно же я проверяю изменился ли статус спички или квадрат в котором она располагается, что бы не перерисовывать когда спичка на одном месте.
Как на Image рисовать в каком то определенном месте изображение я так и не понял, но смысл того, что вы предлагали я понял.

Не по теме:

я вроде не грубил, не на что обижаться.



Добавлено через 5 часов 9 минут
Цитата Сообщение от Avazart Посмотреть сообщение
Ну так меняй тогда когда меняется размер формы, а не каждый раз как рисуешь.
Я вот наверно сразу не уловил.
Т.е. Вы имели ввиду, что можно 1 раз ужать изображение до какого то размера и потом его просто прорисовать уже сжатое? и производить масштабирование изображения только при изменении размеров квадратов?
Как же тогда в TPNGGraphic ужать изображение?
Нужно создать битмап нужных размеров - прорисовать в него Stretch спичку
и присвоить это непосредственно спичке?
0
Эксперт С++
 Аватар для Avazart
8489 / 6156 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
20.02.2015, 22:24
Цитата Сообщение от ivan.-94 Посмотреть сообщение
Я вот наверно сразу не уловил.
Ну я хз ... читай дважды ...
Цитата Сообщение от ivan.-94 Посмотреть сообщение
Т.е. Вы имели ввиду, что можно 1 раз ужать изображение до какого то размера и потом его просто прорисовать уже сжатое? и производить масштабирование изображения только при изменении размеров квадратов?
Да.
0
Я Фоюмчанин ? дааааа)
 Аватар для ivan.-94
213 / 204 / 23
Регистрация: 02.06.2012
Сообщений: 1,424
Записей в блоге: 12
20.02.2015, 22:36  [ТС]
А как это реализовать?
Вот загрузил я изображение.
C++
1
    BitmapMatches[0] = new TPNGGraphic(); BitmapMatches[0]->LoadFromFile("Matches.png");
Как ужать его? до размеров Height и Width?
0
0 / 0 / 0
Регистрация: 06.05.2014
Сообщений: 7
07.04.2015, 10:18
здравствуйте, у меня такая проблема, мне навязали преподы курсовую со спичками в котором должно быть 30 уровней, не подскажите как сохранять уровни и как их реализовать изначально чтоб не заносить спички а менять местами с помощью мышки у меня есть форма с кнопками для открытия других форм
0
0 / 0 / 0
Регистрация: 24.12.2014
Сообщений: 3
27.12.2016, 15:30
Добрый день.
Я можно увидеть исходник, того, что у Вас получилось
0
Я Фоюмчанин ? дааааа)
 Аватар для ivan.-94
213 / 204 / 23
Регистрация: 02.06.2012
Сообщений: 1,424
Записей в блоге: 12
28.12.2016, 15:09  [ТС]
Цитата Сообщение от lito2 Посмотреть сообщение
Добрый день.
Я можно увидеть исходник, того, что у Вас получилось
К сожалению нет, остался он лишь на диске, который сдан с курсовой в универ.
0
0 / 0 / 0
Регистрация: 24.12.2014
Сообщений: 3
28.12.2016, 15:16
Жаль
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
28.12.2016, 15:16

Структура приложения
Меня уже давно интересует как правильно организовать структуру приложения(набор каталогов, файлов etc). Куда класть сторонние библиотеки и...

Структура приложения
Коллеги, помогите, плз, советом. Создаю приложение: Есть консольный класс Client: В общих чертах программа делает следующее (Для...

Структура приложения
Подскажите, поделитесь опытом. Как правильно начать писать приложение, как предварительно определить структуру будущего приложения, чтобы в...

Структура приложения
Здравтсвуйте! Приложение постраничное с использованием React на некоторых страницах. Подскажите, как удобнее в плане расширяемости...

Структура приложения ООП
Добрый день! Погружаюсь в изучение ООП в PHP! Не могу нигде нарыть информацию о структуре приложений. Допустим есть задача - создать...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
57
Ответ Создать тему
Новые блоги и статьи
Мобильное приложение ColorStep
pavlinmavlin 17.09.2026
Реализовал приложение Красный, Зеленый, Синий в Unity3d + c#. Название изменил на ColorStep. Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
Запрет дублирования строк в табличной части
Maks 13.09.2026
Реализация из решения ниже выполнена на нетиповом справочнике "Нормы ТО" с табличной часть "Виды ТО", разработанного в КА2, со следующими реквизитами: - ВидТО (СправочникСсылка. ВидыТО); - ВидГСМ. . .
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр. Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала. Ниже прикреплён. . .
Программа опроса у.з. расходомера SLS-720F
Argus19 02.09.2026
Программа опроса у. з. расходомера SLS-720F Программа опрашивает один раз в минуту три ультразвуковых расходомера SLS-720F через интерфейс RS-485 по протоколу Modbus RTU. Опрашиваются регистры. . .
Hyper-V: Компьютер должен поддерживать доверенный платформенный модуль 2.0.
Maks 31.08.2026
При установке Windows 11 на виртуальную машину Hyper-V 2-го поколения вылезла такая ошибка: Решение: в параметрах виртуальной машины, в разделе "Безопасность" (Security) активировать флаг. . .
Архитектура биовида Стива в Майнкрафте: Зачем бонобо кубический каннибализм
anaschu 30.08.2026
Кубический Вагинокапитализм в Minecraft: Математический инвариант ОДУ и рок Стивов-бонобо Главная задача разработанной «Модели Всего» — наглядно продемонстрировать наличие системной «судьбы». . .
Оттачиваю умение писать js программы.
russiannick 30.08.2026
Проектом выходного дня стало написание Книги шифров Виженера. Итогом стала версия 200, синий туман. Синий туман назван так, потому что замораживает текст под собой. Нажатие синих кнопок управляют. . .
мат медиц модель 30. презентация проекта
anaschu 27.08.2026
хоп хоп хоп хидахоп, а я кладую))
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru