Форум программистов, компьютерный форум, киберфорум
C/C++: WinAPI
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.71/7: Рейтинг темы: голосов - 7, средняя оценка - 4.71
0 / 0 / 0
Регистрация: 10.02.2013
Сообщений: 6

Создать поле из квадратов случайных цветов

10.02.2013, 13:44. Показов 1447. Ответов 10
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
задача:
сделать поле из квадратов случайных цветов (10 х 10)
(как в игре Quadratum
Кликните здесь для просмотра всего текста
[ссылки на другие форумы запрещены... и под спойлером тоже!]
)
проблема:
при компиляции(Dev c++) ошибок нет
поле из квадратов сделать получается
проблема с цветами не сказать что они распределены случайно

вот сам код
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
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
#include <windows.h>
#include <time.h>
 
 
LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
//==============================================================================
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine,
                   int nCmdShow)
{
    HWND hMainWnd;
    char szClassName[] = "MyClass";
    MSG msg;
    WNDCLASSEX wc;
    
    //заполняем структуру класса окна
    wc.cbSize        = sizeof(wc);
    wc.style         = CS_HREDRAW | CS_VREDRAW;
    wc.lpfnWndProc   = WndProc;
    wc.cbClsExtra    = 0; 
    wc.cbWndExtra    = 0;
    wc.hInstance     = hInstance;
    wc.hIcon         = LoadIcon(NULL, IDI_APPLICATION);
    wc.hCursor       = LoadCursor(NULL, IDC_ARROW);
    wc.hbrBackground = (HBRUSH)GetStockObject(BLACK_BRUSH);
    wc.lpszMenuName  = NULL;
    wc.lpszClassName = szClassName;
    wc.hIconSm       = LoadIcon(NULL, IDI_APPLICATION);
    
    //Регистрация класса окна
    if(!RegisterClassEx(&wc))
    {
        MessageBox(NULL, "не удалось зарегистрировать класс", "ERROR", MB_OK);
        return 0;
    }
    
    //создаём главное окно приложения 
    hMainWnd = CreateWindow(szClassName, 
                            "A Hello Application", 
                            WS_OVERLAPPEDWINDOW,
                            50, 
                            50, 
                            800, 
                            630,
                            (HWND)NULL, 
                            (HMENU)NULL,
                            (HINSTANCE)hInstance, 
                            NULL); 
    if(!hMainWnd)
    {
        MessageBox(NULL, "Не удалось создать окно", "ERROR", MB_OK);
        return 0;
    }
    // показываем окно
    ShowWindow(hMainWnd, nCmdShow);
    //обрабатываем сообщения
    while(GetMessage(&msg, NULL, 0, 0))
    {
        TranslateMessage(&msg);
        DispatchMessage(&msg);
    }
    return msg.wParam;
}
//==============================================================================
LRESULT CALLBACK WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
    HDC hDC;
    PAINTSTRUCT ps;
    RECT rect;
    HBRUSH brush; 
    int pole[200];
    int n=0;
    int x = 5, y = 5; //координаты квадратов(рисуем поле)
    
    switch(uMsg)
    {
        case WM_CREATE:
             {  
                for(n; n<90; n++)
                {  
                   pole[n] = rand() % 6;   //заполняем массив случайными числами
                                                   //в зависимости от числа квадратам присваивается  
                                                   //определенный цвет                                                                                                                                                  
                }
                SetTimer(hWnd, 1, 20, NULL);
                break;
             }
        case WM_TIMER:
             {  
                RECT rect;  
                 
                hDC = GetDC(hWnd);
                n=0;
                for(n; n<100; n++)
                {
                   rect.left    = x;
                   rect.top     = y;
                   rect.right   = x + 60;
                   rect.bottom  = y + 60;
                   
                   if(pole[n]== 1)
                      brush = CreateSolidBrush(RGB(0,0,225));    //синий
                   else if(pole[n]== 2)
                      brush = CreateSolidBrush(RGB(0,225,0));    //зелёный
                   else if(pole[n]== 3) 
                      brush = CreateSolidBrush(RGB(225,0,0));    //красный
                   else if(pole[n]== 4)
                      brush = CreateSolidBrush(RGB(255,215,0));  //желтый
                   else if(pole[n]== 5)
                      brush = CreateSolidBrush(RGB(255,0,255));  //пурпурный
                   else if(pole[n]== 6)
                      brush = CreateSolidBrush(RGB(127,199,255));//небесный
                         
                   FillRect(hDC, &rect, brush);
                   x += 65;
                   if(x > 640)
                   {
                       x = 5;
                       y += 65;
                   }
                }
                ReleaseDC(hWnd, hDC);
                break;
             }
        case WM_CLOSE:
             {
                DestroyWindow(hWnd);
                break;
             }
        case WM_DESTROY:
             {
                PostQuitMessage(0);
                break;
             }
        default:
                return DefWindowProc(hWnd, uMsg, wParam, lParam);
    }
    return 0;
}
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
10.02.2013, 13:44
Ответы с готовыми решениями:

Создать гистограмму цветов из цветов загруженного изображения и искать с помощью нее пиксели одинакового цвета
Необходимо создать гистограмму цветов из цветов загруженного изображения и искать с помощью нее пиксели одинакового цвета. Нужно переделать...

Генератор случайных цветов
Добрый вечер проблема с случайным цветом всех возможных комбинациях цвета фона и цвета символов, как можно сделать такой генератор...

Генератор случайных цветов для Формы
Суть такова , при нажатии на кнопку мыши менялся цвет BackGround PictureBox. Помогите пожалуйста

10
Неэпический
 Аватар для Croessmah
18146 / 10730 / 2066
Регистрация: 27.09.2012
Сообщений: 27,029
Записей в блоге: 1
10.02.2013, 14:17
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
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
#include <windows.h>
#include <time.h>
 
 
LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
//==============================================================================
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine,
                   int nCmdShow)
{
    HWND hMainWnd;
    char szClassName[] = "MyClass";
    MSG msg;
    WNDCLASSEX wc;
    
    //заполняем структуру класса окна
    wc.cbSize        = sizeof(wc);
    wc.style         = CS_HREDRAW | CS_VREDRAW;
    wc.lpfnWndProc   = WndProc;
    wc.cbClsExtra    = 0; 
    wc.cbWndExtra    = 0;
    wc.hInstance     = hInstance;
    wc.hIcon         = LoadIcon(NULL, IDI_APPLICATION);
    wc.hCursor       = LoadCursor(NULL, IDC_ARROW);
    wc.hbrBackground = (HBRUSH)GetStockObject(BLACK_BRUSH);
    wc.lpszMenuName  = NULL;
    wc.lpszClassName = szClassName;
    wc.hIconSm       = LoadIcon(NULL, IDI_APPLICATION);
    
    //Регистрация класса окна
    if(!RegisterClassEx(&wc))
    {
        MessageBox(NULL, "не удалось зарегистрировать класс", "ERROR", MB_OK);
        return 0;
    }
    
    //создаём главное окно приложения 
    hMainWnd = CreateWindow(szClassName, 
                            "A Hello Application", 
                            WS_OVERLAPPEDWINDOW,
                            50, 
                            50, 
                            800, 
                            630,
                            (HWND)NULL, 
                            (HMENU)NULL,
                            (HINSTANCE)hInstance, 
                            NULL); 
    if(!hMainWnd)
    {
        MessageBox(NULL, "Не удалось создать окно", "ERROR", MB_OK);
        return 0;
    }
    // показываем окно
    ShowWindow(hMainWnd, nCmdShow);
    //обрабатываем сообщения
    while(GetMessage(&msg, NULL, 0, 0))
    {
        TranslateMessage(&msg);
        DispatchMessage(&msg);
    }
    return msg.wParam;
}
//==============================================================================
LRESULT CALLBACK WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
    HDC hDC;
    PAINTSTRUCT ps;
    RECT rect;
    HBRUSH brush; 
     int n;
    int x = 5, y = 5; //координаты квадратов(рисуем поле)
    
    switch(uMsg)
    {
        case WM_CREATE:
             {  
             srand(time(NULL));//!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
                SetTimer(hWnd, 1, 20, NULL);
                break;
             }
        case WM_TIMER:
             {  
                RECT rect;  
                 
                hDC = GetDC(hWnd);
                for(n=0; n<100; n++)
                {
                   rect.left    = x;
                   rect.top     = y;
                   rect.right   = x + 60;
                   rect.bottom  = y + 60;
                   brush = CreateSolidBrush(RGB(rand()%256,rand()%256,rand()%256));    //синий                      
                   FillRect(hDC, &rect, brush);
                         DeleteObject(brush);//!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
                   x += 65;
                   if(x > 640)
                   {
                       x = 5;
                       y += 65;
                   }
                }
                ReleaseDC(hWnd,hDC);
 
                break;
             }
        case WM_CLOSE:
             {
                DestroyWindow(hWnd);
                break;
             }
        case WM_DESTROY:
             {
                PostQuitMessage(0);
                break;
             }
        default:
                return DefWindowProc(hWnd, uMsg, wParam, lParam);
    }
    return 0;
}
Так больше на рандом смахивает?
0
0 / 0 / 0
Регистрация: 10.02.2013
Сообщений: 6
10.02.2013, 14:25  [ТС]
мне нужно с теми цветами которые были у меня
0
Неэпический
 Аватар для Croessmah
18146 / 10730 / 2066
Регистрация: 27.09.2012
Сообщений: 27,029
Записей в блоге: 1
10.02.2013, 14:29
Цитата Сообщение от seeveruss Посмотреть сообщение
мне нужно с теми цветами которые были у меня
Так?
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
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
LRESULT CALLBACK WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
    HDC hDC;
    PAINTSTRUCT ps;
    RECT rect;
    HBRUSH brush; 
    static int pole[200];
    int n=0;
    int x = 5, y = 5; //координаты квадратов(рисуем поле)
    
    switch(uMsg)
    {
        case WM_CREATE:
             {  
                     srand(time(NULL));
                for(n; n<90; n++)
                {  
                   pole[n] = rand() % 6;   //заполняем массив случайными числами
                                                   //в зависимости от числа квадратам присваивается  
                                                   //определенный цвет                                                                                                                                                  
                }
                SetTimer(hWnd, 1, 20, NULL);
                break;
             }
        case WM_TIMER:
             {  
                RECT rect;  
                 
                hDC = GetDC(hWnd);
                n=0;
                for(n; n<100; n++)
                {
                   rect.left    = x;
                   rect.top     = y;
                   rect.right   = x + 60;
                   rect.bottom  = y + 60;
                   
                   if(pole[n]== 1)
                      brush = CreateSolidBrush(RGB(0,0,225));    //синий
                   else if(pole[n]== 2)
                      brush = CreateSolidBrush(RGB(0,225,0));    //зелёный
                   else if(pole[n]== 3) 
                      brush = CreateSolidBrush(RGB(225,0,0));    //красный
                   else if(pole[n]== 4)
                      brush = CreateSolidBrush(RGB(255,215,0));  //желтый
                   else if(pole[n]== 5)
                      brush = CreateSolidBrush(RGB(255,0,255));  //пурпурный
                   else if(pole[n]== 6)
                      brush = CreateSolidBrush(RGB(127,199,255));//небесный
                         
                   FillRect(hDC, &rect, brush);
                            DeleteObject(brush);//
                   x += 65;
                   if(x > 640)
                   {
                       x = 5;
                       y += 65;
                   }
                }
                ReleaseDC(hWnd, hDC);
                break;
             }
        case WM_CLOSE:
             {
                DestroyWindow(hWnd);
                break;
             }
        case WM_DESTROY:
             {
                PostQuitMessage(0);
                break;
             }
        default:
                return DefWindowProc(hWnd, uMsg, wParam, lParam);
    }
    return 0;
}
1
0 / 0 / 0
Регистрация: 10.02.2013
Сообщений: 6
10.02.2013, 14:34  [ТС]
вы скопировали мой код и добавили "DeleteObject(brush);" ???
0
Неэпический
 Аватар для Croessmah
18146 / 10730 / 2066
Регистрация: 27.09.2012
Сообщений: 27,029
Записей в блоге: 1
10.02.2013, 14:38
Цитата Сообщение от seeveruss Посмотреть сообщение
вы скопировали мой код и добавили "DeleteObject(brush);" ???
C++
1
2
3
4
5
static int pole[200];
//...
srand(time(NULL));
//...
DeleteObject(brush);
1
0 / 0 / 0
Регистрация: 10.02.2013
Сообщений: 6
10.02.2013, 14:41  [ТС]
мне не нужно что бы цвета постоянно менялись
они должны сначала задаться и отрисовыватся
0
Неэпический
 Аватар для Croessmah
18146 / 10730 / 2066
Регистрация: 27.09.2012
Сообщений: 27,029
Записей в блоге: 1
10.02.2013, 14:47
Цитата Сообщение от seeveruss Посмотреть сообщение
мне не нужно что бы цвета постоянно менялись
они должны сначала задаться и отрисовыватся
Так вроде не меняются же.
0
0 / 0 / 0
Регистрация: 10.02.2013
Сообщений: 6
10.02.2013, 14:56  [ТС]
как на дискотеке)))

Добавлено через 5 минут
хотя нет все работает правильно
спасибо!!!

если я правильно понял мне надо было сделать так

static int pole[200]
а не
int pole[200]
0
Неэпический
 Аватар для Croessmah
18146 / 10730 / 2066
Регистрация: 27.09.2012
Сообщений: 27,029
Записей в блоге: 1
10.02.2013, 15:02
Цитата Сообщение от seeveruss Посмотреть сообщение
если я правильно понял мне надо было сделать так
Да. Иначе у Вас pole создавалось при каждом вызове функции.

Добавлено через 1 минуту
C++
1
DeleteObject(brush);
удалять за собой тоже обязательно, иначе потом будет "бо-бо". В Windows есть ограничение на количество объектов GDI.
1
0 / 0 / 0
Регистрация: 10.02.2013
Сообщений: 6
10.02.2013, 15:28  [ТС]
спасибо вы мне очень помогли
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
10.02.2013, 15:28
Помогаю со студенческими работами здесь

Набор из 23 пикселей случайных цветов(анимация)
Набор из 23 пикселей случайных цветов, двух квадратов с диагоналями, параллельными краям экрана, и двух окружностей. Изменять размеры...

Построить окружность, состоящую из заданного числа дуг случайных цветов
Дорого времени суток! Очень прошу помочь с решением задачки. Построить окружность, состоящую из заданного числа дуг случайных цветов.

Есть н цветов разных видов. Составьте все возможные сочетания букетов из всех этих цветов. Количество цветов и их названия вводит пользователь
Есть n цветов разных видов. Составьте все возможные сочетания букетов из всех этих цветов. Количество цветов и их названия вводит...

Нужно нарисовать куб в котором с каждой стороны по 6 квадратов и они все разных цветов
Помогите пожалуйста!!!! очень прошу, буду очень благодарна если поможете мне. Мне нужно решить задачу на графику с помощью graph, нужно...

Друзья, подскажите, как в классе создать константное поле, ссылочное поле и объектное поле?
Препод на защите лабораторной по классам дал задание большое. В общем-то все пункты я знаю как делать, кроме этого. Вот что такое...


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

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Новые блоги и статьи
Символьное дифференцирование
igorrr37 13.02.2026
/ * Логарифм записывается как: (x-2)log(x^2+2) - означает логарифм (x^2+2) по основанию (x-2). Унарный минус обозначается как ! */ #include <iostream> #include <stack> #include <cctype>. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru