Я Фоюмчанин ? дааааа)
 Аватар для ivan.-94
213 / 204 / 23
Регистрация: 02.06.2012
Сообщений: 1,424
Записей в блоге: 12

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

15.02.2015, 13:01. Показов 3983. Ответов 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
Ответ Создать тему
Опции темы

Новые блоги и статьи
Кредитный калькулятор
Maks 05.08.2026
Решение задачи по прикладной информатике средствами 1С. Задача: Напишите приложение-калькулятор, которое помогает рассчитывать параметры кредита для аннуитетного и дифференцированного видов. . .
У нас сейчас поговорку "Опять 25" нужно переделать на "Опять +35".
kumehtar 04.08.2026
С ностальгией вспоминаю времена моего детства, когда у нас и правда +25 - была максимальная температура летом. Раньше +25 °C реально казались вершиной жары, когда можно было весь день пропадать на. . .
Как ИИ начал спорить и врать (возможно почуяв опасность для себя от индустрии - уход от электроники).
Hrethgir 04.08.2026
Недельный диалог, на фоне событий с НПЗ. Да, из спирта можно получать бензин, и это не сложно. Но потом в схеме я решил избавиться от насоса, при этом полностью сделав контроль подачи спирта в. . .
Термопринтер QR701
Argus19 03.08.2026
Термопринтер QR701 Купил два термопринтера QR701. На сэлф-тесте написано: Language: PC936 (GB18030). Что означает, что принтеры могут печатать только латиницу и китайские иероглифы. Так же. . .
Создание формы заимствованного документа
Maks 03.08.2026
Задача: Необходимо создать собственную форму заимствованного документа. На форме должен быть реквизит "Покупатель", а также табличная часть со следующими реквизитами: - Расчетный счет покупателя. . .
Задача предоставления скидок покупателям
Maks 03.08.2026
Задача: В документе "Продажи" необходимо реализовать функционал предоставления скидок покупателям. Скидка должна автоматически рассчитываться и подставляться в соответствующее поле при выборе. . .
Почему SEO не начинается с ключевых слов: что проверить до написания текстов
Neotwalker 01.08.2026
Когда владельцу сайта предлагают заняться SEO, первым шагом часто становится сбор запросов и написание текстов. Логика кажется понятной: 1. Находим ключевые слова. 2. Добавляем их на. . .
Знание — сила: Доктрина интенциональности знаний, углубление в формулу
Hrethgir 01.08.2026
https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11957&stc=1&d=1785567302 Знаменитый афоризм Фрэнсиса Бэкона «Знание — сила» (Scientia potentia est) в массовой культуре принято понимать. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru