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

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

15.02.2015, 13:01. Показов 3930. Ответов 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
Ответ Создать тему
Новые блоги и статьи
Море в объективе
kumehtar 06.07.2026
Хотел написать много проникновенных слов, но передумал. Оно само - говорит. Кто слышит тот слышит.
Doom для терминала без стрельбы и монстров. 3D Raycasting на ascii.
dcc0 05.07.2026
Попросил нейронную сеть deepai. org написать рейкастинг 3D с библиотекой ncurses для Linux. Чтобы можно было ходить на стрелочки. Чтобы стены были отрисованы символами. Справилась. Первый вариант. . .
Установка статуса документа по условию
Maks 05.07.2026
Алгоритм из решения ниже реализован на нетиповом документе "НарядПутевка" разработанного в КА2. Задача: в табличной части "Материалы" документа при записи автоматически устанавливать статус. . .
Сезонность и суточность закисления почв
anaschu 04.07.2026
200 часов это все равно моловато. Есть ситуации, но нестандартные, когда смена происходит за 5 лет. Но обычно это 50 лет и более. Наверное, закисление почвы происходит сезонно в средней. . .
В чем ценность человеческого опыта в глобальном смысле?
kumehtar 03.07.2026
Возможно, ценность человека не в том, что он однажды достигает мудрости, а в том, что он становится носителем карты пути. Он знает не только истину, но и последовательность внутренних изменений,. . .
интеграция AnyLogic с самописным REST API и переход на Odoo
anaschu 03.07.2026
Успешная интеграция AnyLogic с самописным REST API и переход на промышленную Odoo WMS Сегодня проделал огромный путь от простой симуляции физических процессов до построения полноценной. . .
Поиск всех путей на ориентированном графе. Linux
dcc0 02.07.2026
Переработка старого кода из моей статьи. Через несколько переработок от PHP кода к C89 (надеюсь, 89). Но довольно запутанно получилось. Код для Linux. Но если убрать time и то, что с ним. . .
Сам себя обучал rest api
anaschu 02.07.2026
Педагогический лайфхак: Почему чистый REST API для ученика намного круче, чем готовые библиотеки Когда мы отказались от капризного JAR-файла AnyLogic и переписали код на стандартный HttpClient,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru