Форум программистов, компьютерный форум, киберфорум
C/C++: WinAPI
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.73/11: Рейтинг темы: голосов - 11, средняя оценка - 4.73
-18 / 1 / 1
Регистрация: 15.12.2016
Сообщений: 60

Движение прямоугольника

02.03.2017, 23:47. Показов 2463. Ответов 14
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброе время суток всем!!!
Ребята, подскажите в чем загвоздка???
Color color - Выдает ошибкой

Благодарен, тому, кто откликнется!!!

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
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
#include<iostream>
#include<windows.h>
#include<conio.h>
#include<time.h>
using namespace std;
enum Color { Black = 0, Blue, Green, Cyan, Red, Magenta, Brown, LightGray, DarkGray, LightBlue, LightGreen, LightCyan, LightRed, LightMagenta, Yellow, White };
HANDLE hStdOut = GetStdHandle(STD_OUTPUT_HANDLE);
 
void setColor(Color text, Color background)
{
    SetConsoleTextAttribute(hStdOut, (WORD)((background << 4) | text));
}
void setCursor(int x, int y)
{
    COORD c = { x,y };
    SetConsoleCursorPosition(hStdOut, c);
}
 
/*Реализовать перемещение прямоугольника  внутри цветной рамки.
Каждая сторона рамки отрисовывается разным цветом.
Когда прямоугольник наезжает на одну из сторон рамки - прямоугольник становится такого цвета, как была рамка.
Рамка меняет цвет случайным образом.*/
 
void show_field(int size, Color arr[])
{
    //int size = 20;
    //int color_value = rand()%16;
    // левая граница
    for (int i = 0; i < size; i++)
    {
        setColor(arr[0], Color color);
        cout << (char)179 << '\n';
    }
    setCursor(1, 0);
    //color_value = rand()%16;
    // верхняя граница
    for (int i = 0; i < size * 2; i++)
    {
        setColor(arr[1], Color color);
        cout << (char)196;
    }
    //color_value = rand()%16;
    // правая граница
    for (int i = 0; i < size; i++)
    {
        setColor(arr[2], Color color);
        setCursor(size * 2, i);
        cout << (char)179 << '\n';
    }
    setCursor(1, size);
    //color_value = rand()%16;
    // нижняя граница
    for (int i = 0; i < size * 2; i++)
    {
        setColor(arr[3], Color color);
        cout << (char)196;
    }
    cout << '\n';
    setColor(White, Black);
}
 
void show_rectangle(int size, int kx, int ky, Color color)
{
    //int color = rand()%15+1;
    for (int i = 0; i < size - 1; i++)
    {
        setColor((Color)color, (Color)color);
        setCursor(kx, ky + i);
        for (int j = 0; j < size; j++)
        {
            cout << ' ';
        }
        cout << '\n';
    }
    setColor(White, Black);
}
void main()
{
    srand(time(NULL));
    int field_size = 10,
        figure_size = 3;
    Color colors[4],
        figure_color = Color(rand() % 15);
    for (int i = 0; i< 4; i++) {
        colors[i] = Color(rand() % 15);
    }
    const int LEFT_KEY = 75;
    const int RIGHT_KEY = 77;
    const int UP_KEY = 72;
    const int DOWN_KEY = 80;
    const int ESC_KEY = 27;
    int button, kx = 1, ky = 1; // координаты не менее 1!!!!
    int color = rand() % 15 + 1;
 
    show_field(field_size, color);
    show_rectangle(figure_size, kx, ky, figure_color);
 
    do {
        button = _getch();
        switch (button)
        {
        case LEFT_KEY:
            if (kx <= 2)
            {
                figure_color = colors[0];
                show_rectangle(figure_size, kx, ky, figure_color);
                break;
            }
            else
            {
                kx--;
            }
            system("cls");
            show_field(field_size, colors);
            show_rectangle(figure_size, kx, ky, figure_color);
            break;
        case RIGHT_KEY:
            if (kx >= field_size * 2 - figure_size - 1)
            {
                figure_color = colors[2];
                show_rectangle(figure_size, kx, ky, figure_color);
                break;
            }
            else
            {
                kx++;
            }
            system("cls");
            show_field(field_size, colors);
            show_rectangle(figure_size, kx, ky, figure_color);
            break;
        case UP_KEY:
            if (ky <= 2)
            {
                figure_color = colors[1];
                show_rectangle(figure_size, kx, ky, figure_color);
                break;
            }
            else
            {
                ky--;
            }
            system("cls");
            show_field(field_size, colors);
            show_rectangle(figure_size, kx, ky, figure_color);
            break;
        case DOWN_KEY:
            if (ky >= field_size - figure_size)
            {
                figure_color = colors[3];
                show_rectangle(figure_size, kx, ky, figure_color);
                break;
            }
            else
            {
                ky++;
            }
            system("cls");
            show_field(field_size, colors);
            show_rectangle(figure_size, kx, ky, figure_color);
            break;
        default:
            break;
        }
    } while (button != ESC_KEY);
    system("pause");
}
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
02.03.2017, 23:47
Ответы с готовыми решениями:

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

Движение прямоугольника
Привет, друзья! Извините, не могли бы вы мне помочь, нужно сделать движение квадрата размером 32х32 (например, направо по оси х)...

WinAPI: движение прямоугольника
подскажите плиз как можно заставить прямоугольник, например такой Rectangle( hdc, 100,120,150,110); двигаться при нажатии стрелок?

14
1272 / 1029 / 470
Регистрация: 25.12.2016
Сообщений: 3,333
03.03.2017, 10:34
Лучший ответ Сообщение было отмечено SatanaXIII как решение

Решение

Цитата Сообщение от Sportsm Посмотреть сообщение
C++
1
setColor(arr[0], Color color);
При вызове функции тип писать не нужно:
C++
1
setColor(arr[0], color);
1
-18 / 1 / 1
Регистрация: 15.12.2016
Сообщений: 60
03.03.2017, 11:42  [ТС]
Ок, могли бы вы Ваш вариант показать, на основе этого кода.
Просто я как не сделаю, оно все равно ошибку выдает
0
1272 / 1029 / 470
Регистрация: 25.12.2016
Сообщений: 3,333
03.03.2017, 12:34
Цитата Сообщение от Sportsm Посмотреть сообщение
могли бы вы Ваш вариант показать, на основе этого кода
Я уже показал.
Цитата Сообщение от Sportsm Посмотреть сообщение
Просто я как не сделаю, оно все равно ошибку выдает
Вот об этом и нужно писать: что за ошибка, в какой строке.
0
-18 / 1 / 1
Регистрация: 15.12.2016
Сообщений: 60
03.03.2017, 13:34  [ТС]
Убираю Color, выдает обшибкой

Добавлено через 2 минуты
строка 31, 39, 46, 55
0
Эксперт CЭксперт С++
 Аватар для liv
5120 / 4574 / 855
Регистрация: 07.10.2015
Сообщений: 9,462
03.03.2017, 14:20
Sportsm, компилятор не знает, что такое color
Предполагалось - цвет фона, так задайте в подпрограмме переменную
Color color = black;
Или явно задавайте параметром black
0
-18 / 1 / 1
Регистрация: 15.12.2016
Сообщений: 60
03.03.2017, 14:33  [ТС]
спс, вы видели, что в коде все норм, кроме цвета, на коде это можете показать???
Я так не могу понять!!!!
0
Эксперт CЭксперт С++
 Аватар для liv
5120 / 4574 / 855
Регистрация: 07.10.2015
Сообщений: 9,462
03.03.2017, 15:42
C++
1
2
3
4
5
void show_field(int size, Color arr[])
{
    Color color = black;
    //int size = 20;
    //...
Добавлено через 2 минуты
Хотя, честно говоря, color то одно значение, то массив.
Определитесь. Я бы не был уверен, что "в коде все норм"

Добавлено через 1 час 0 минут
Если еще подправить вот этот вызов, то начинает работать:
C++
1
2
3
//    Color color = (Color)(rand() % 15 + 1); //это лишнее
 
    show_field(field_size, colors); //параметром должен быть адрес массива цветов
0
-18 / 1 / 1
Регистрация: 15.12.2016
Сообщений: 60
04.03.2017, 10:36  [ТС]
Смотрите, сделал так, но ГРАНИЦЫ НЕ КАСАЕТСЯ((((((((((((((((

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
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
#include<iostream>
#include<windows.h>
#include<conio.h>
#include<time.h>
using namespace std;
enum Color { Black = 0, Blue, Green, Cyan, Red, Magenta, Brown, LightGray, DarkGray, LightBlue, LightGreen, LightCyan, LightRed, LightMagenta, Yellow, White };
HANDLE hStdOut = GetStdHandle(STD_OUTPUT_HANDLE);//НАДО
 
void setColor(Color text, Color background)
{
    SetConsoleTextAttribute(hStdOut, (WORD)((background << 4) | text));
}
void setCursor(int x, int y)
{
    COORD c = { x,y };//инициализируем объект координатами
    SetConsoleCursorPosition(hStdOut, c);
}
/*Реализовать перемещение прямоугольника  внутри цветной рамки.
Каждая сторона рамки отрисовывается разным цветом.
Когда прямоугольник наезжает на одну из сторон рамки - прямоугольник становится такого цвета, как была рамка.
Рамка меняет цвет случайным образом.*/
 
void show_field(int size, Color arr[])
{
    //int size = 20;
    //int color_value = rand()%16;
    // левая граница
    Color color = Black;
    for (int i = 0; i < size; i++)
    {
        setColor(arr[0], (Color) color);
        cout << (char)179 << '\n';
    }
    setCursor(1, 0);
    //color_value = rand()%16;
    // верхняя граница
    for (int i = 0; i < size * 2; i++)
    {
        setColor(arr[1], (Color) color);
        cout << (char)196;
    }
    //color_value = rand()%16;
    // правая граница
    for (int i = 0; i < size; i++)
    {
        setColor(arr[2], (Color) color);
        setCursor(size * 2, i);
        cout << (char)179 << '\n';
    }
    setCursor(1, size);
    //color_value = rand()%16;
    // нижняя граница
    for (int i = 0; i < size * 2; i++)
    {
        setColor(arr[3], (Color) color);
        cout << (char)196;
    }
    cout << '\n';
    setColor(White, Black);
}
 
void show_rectangle(int size, int kx, int ky, int color)
{
    color = rand() % 15 + 1;
    for (int i = 0; i < size - 1; i++)
    {
        setColor((Color)color, (Color)color);
        setCursor(kx, ky + i);
        for (int j = 0; j < size; j++)
        {
            cout << ' ';
        }
        cout << '\n';
    }
    setColor(White, Black);
}
void main()
{
    srand(time(NULL));
    int field_size = 10,
        figure_size = 3;
    Color colors[4],
        figure_color = Color(rand() % 15 + 1);
    for (int i = 0; i < 4; i++) 
    {
        colors[i] = Color(rand() % 15 + 1);
    }
    const int LEFT_KEY = 75;
    const int RIGHT_KEY = 77;
    const int UP_KEY = 72;
    const int DOWN_KEY = 80;
    const int ESC_KEY = 27;
    int button, kx = 1, ky = 1;
    int color = rand() % 15 + 1;
 
    show_field(field_size, colors);
    show_rectangle(figure_size, kx, ky, figure_color);
 
    do {
        button = _getch();
        switch (button)
        {
        case LEFT_KEY:
            if (kx <= 2)
            {
                figure_color = colors[0];
                show_rectangle(figure_size, kx, ky, figure_color);
                break;
            }
            else
            {
                kx--;
            }
            system("cls");
            show_field(field_size, colors);
            show_rectangle(figure_size, kx, ky, figure_color);
            break;
        case RIGHT_KEY:
            if (kx >= field_size * 2 - figure_size - 1)
            {
                figure_color = colors[2];
                show_rectangle(figure_size, kx, ky, figure_color);
                break;
            }
            else
            {
                kx++;
            }
            system("cls");
            show_field(field_size, colors);
            show_rectangle(figure_size, kx, ky, figure_color);
            break;
        case UP_KEY:
            if (ky <= 2)
            {
                figure_color = colors[1];
                show_rectangle(figure_size, kx, ky, figure_color);
                break;
            }
            else
            {
                ky--;
            }
            system("cls");
            show_field(field_size, colors);
            show_rectangle(figure_size, kx, ky, figure_color);
            break;
        case DOWN_KEY:
            if (ky >= field_size - figure_size)
            {
                figure_color = colors[3];
                show_rectangle(figure_size, kx, ky, figure_color);
                break;
            }
            else
            {
                ky++;
            }
            system("cls");
            show_field(field_size, colors);
            show_rectangle(figure_size, kx, ky, figure_color);
            break;
        default:
            break;
        }
    } while (button != ESC_KEY);
    system("pause");
}
Добавлено через 3 часа 28 минут
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
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
#include<iostream>
#include<windows.h>
#include<conio.h>
#include<time.h>
using namespace std;
enum Color { Black = 0, Blue, Green, Cyan, Red, Magenta, Brown, LightGray, DarkGray, LightBlue, LightGreen, LightCyan, LightRed, LightMagenta, Yellow, White };
HANDLE hStdOut = GetStdHandle(STD_OUTPUT_HANDLE);//НАДО
 
void setColor(Color text, Color background)
{
    SetConsoleTextAttribute(hStdOut, (WORD)((background << 4) | text));
}
void setCursor(int x, int y)
{
    COORD c = { x,y };//инициализируем объект координатами
    SetConsoleCursorPosition(hStdOut, c);
}
 
/*Реализовать перемещение прямоугольника  внутри цветной рамки.
Каждая сторона рамки отрисовывается разным цветом.
Когда прямоугольник наезжает на одну из сторон рамки - прямоугольник становится такого цвета, как была рамка.
Рамка меняет цвет случайным образом.*/
 
void show_field(int size, Color arr[])
{
    // левая граница
    Color color = Black;
    for (int i = 0; i <= size; i++)
    {
        setColor(arr[0], (Color)color);
        cout << (char)179 << '\n';
    }
    setCursor(1, 0);
    // верхняя граница
    for (int i = 0; i < size * 2; i++)
    {
        setColor(arr[1], (Color)color);
        cout << (char)196;
    }
    // правая граница
    for (int i = 0; i < size; i++)
    {
        setColor(arr[2], (Color)color);
        setCursor(size * 2, i);
        cout << (char)179 << '\n';
    }
    setCursor(1, size);
    // нижняя граница
    for (int i = 0; i < size * 2; i++)
    {
        setColor(arr[3], (Color)color);
        cout << (char)196;
    }
    cout << '\n';
    setColor(White, Black);
}
 
void show_rectangle(int size, int kx, int ky, int color)
{
    for (int i = 0; i < size - 1; i++)
    {
        setColor((Color)color, (Color)color);
        setCursor(kx, ky + i);
        for (int j = 0; j < size; j++)
        {
            cout << ' ';
        }
        cout << '\n';
    }
    setColor(White, Black);
}
void main()
{
    srand(time(NULL));
    int field_size = 10, figure_size = 3;
    Color colors[4], figure_color = Color(rand() % 15 + 1);
    for (int i = 0; i < 4; i++)
    {
        colors[i] = Color(rand() % 15 + 1);
    }
    const int LEFT_KEY = 75;
    const int RIGHT_KEY = 77;
    const int UP_KEY = 72;
    const int DOWN_KEY = 80;
    const int ESC_KEY = 27;
    int button, kx = 1, ky = 1;
    int color = rand() % (15 + 1);
 
    show_field(field_size, colors);
    show_rectangle(figure_size, kx, ky, figure_color);
 
    do {
        button = _getch();
        switch (button)
        {
        case LEFT_KEY:
            if (kx <= 1)
            {
                figure_color = colors[0];
                show_rectangle(figure_size, kx, ky, figure_color);
                break;
            }
            else
            {
                kx--;
            }
            system("cls");
            show_field(field_size, colors);
            show_rectangle(figure_size, kx, ky, figure_color);
            break;
        case RIGHT_KEY:
            if (kx >= field_size * 2 - figure_size + 0)
            {
                figure_color = colors[2];
                show_rectangle(figure_size, kx, ky, figure_color);
                break;
            }
            else
            {
                kx++;
            }
            system("cls");
            show_field(field_size, colors);
            show_rectangle(figure_size, kx, ky, figure_color);
            break;
        case UP_KEY:
            if (ky <= 1)
            {
                figure_color = colors[1];
                show_rectangle(figure_size, kx, ky, figure_color);
                break;
            }
            else
            {
                ky--;
            }
            system("cls");
            show_field(field_size, colors);
            show_rectangle(figure_size, kx, ky, figure_color);
            break;
        case DOWN_KEY:
            if (ky >= field_size - figure_size + 1)
            {
                figure_color = colors[3];
                show_rectangle(figure_size, kx, ky, figure_color);
                break;
            }
            else
            {
                ky++;
            }
            system("cls");
            show_field(field_size, colors);
            show_rectangle(figure_size, kx, ky, figure_color);
            break;
        default:
            break;
        }
    } while (button != ESC_KEY);
    system("pause");
}
Нормально работает теперь,
скажите, когда прямоугольник касается границы он берет цвет границы, возможен ли вариант,
чтобы когда при касании, рандомить границу? например, прямоугольник стал красным, а граница зеленой???

Добавлено через 8 часов 30 минут
Теперь получается, с право

Добавлено через 2 минуты
Теперь получается, с правой стороны я наезжаю на границу, а с других сторон, нет + когда идет прикосновение прямоугольника с границей, граница должна менять цвет
0
Эксперт CЭксперт С++
 Аватар для liv
5120 / 4574 / 855
Регистрация: 07.10.2015
Сообщений: 9,462
04.03.2017, 12:15
Sportsm, у Вас все получится! Пишите, пробуйте!
Иначе никак. Надо самому "проползти", пропустить через себя. Только так!
0
-18 / 1 / 1
Регистрация: 15.12.2016
Сообщений: 60
05.03.2017, 02:53  [ТС]
Без продвижении.......
Расскажите как рандомит цвет, когда прямоугольник заходит на его границу???
0
1272 / 1029 / 470
Регистрация: 25.12.2016
Сообщений: 3,333
05.03.2017, 09:47
Цитата Сообщение от Sportsm Посмотреть сообщение
Расскажите как рандомит цвет, когда прямоугольник заходит на его границу???
Как рандомит или как рандомить?
0
-18 / 1 / 1
Регистрация: 15.12.2016
Сообщений: 60
05.03.2017, 18:31  [ТС]
Когда прямоугольник заходит на границу, цвет должен меняться!
например если прямоугольник Синий, когда заходит на границу - граница должна стать Красной

Добавлено через 4 часа 48 минут
Когда прямоугольник наезжает на одну из сторон рамки - прямоугольник становится другого цвета

подскажите, как тут быть?!

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
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
#include<iostream>
#include<windows.h>
#include<conio.h>
#include<time.h>
using namespace std;
enum Color {
    Black = 0, Blue, Green, Cyan, Red, Magenta, Brown, LightGray,
    DarkGray, LightBlue, LightGreen, LightCyan, LightRed, LightMagenta, Yellow, White
};
HANDLE hStdOut = GetStdHandle(STD_OUTPUT_HANDLE);//НАДО
 
void setColor(Color text, Color background)
{
    SetConsoleTextAttribute(hStdOut, (WORD)((background << 4) | text));
}
void setCursor(int x, int y)
{
    COORD c = { x, y };//инициализируем объект координатами
    SetConsoleCursorPosition(hStdOut, c);
}
/*Реализовать перемещение прямоугольника  внутри цветной рамки.
Каждая сторона рамки отрисовывается разным цветом.
Когда прямоугольник наезжает на одну из сторон рамки - прямоугольник становится такого цвета, как была рамка.
Рамка меняет цвет случайным образом.*/
 
void show_field(int size, Color arr[])
{
    // левая граница
    Color color = Black;
    for (int i = 0; i <= size; i++)
    {
        setColor(arr[0], (Color)color);
        cout << (char)15 << '\n';
    }
    setCursor(1, 0);
    // верхняя граница
    for (int i = 0; i < size * 2; i++)
    {
        setColor(arr[1], (Color)color);
        cout << (char)15;
    }
    // правая граница
    for (int i = 0; i < size; i++)
    {
        setColor(arr[2], (Color)color);
        setCursor(size * 2, i);
        cout << (char)15 << '\n';
    }
    setCursor(1, size);
    // нижняя граница
    for (int i = 0; i < size * 2; i++)
    {
        setColor(arr[3], (Color)color);
        cout << (char)15;
    }
    cout << '\n';
    setColor(White, Black);
}
 
void show_rectangle(int size, int kx, int ky, int color)
{
    for (int i = 0; i < size - 1; i++)
    {
        setColor((Color)color, (Color)color);
        setCursor(kx, ky + i);
        for (int j = 0; j < size; j++)
        {
            cout << ' ';
        }
        cout << '\n';
    }
    setColor(White, Black);
}
void main()
{
    srand(time(NULL));
    int field_size = 10, figure_size = 3;
    Color colors[4], figure_color = Color(rand() % 15 + 1);
    for (int i = 0; i < 4; i++)
    {
        colors[i] = Color(rand() % 15 + 1);
    }
    const int LEFT_KEY = 75;
    const int RIGHT_KEY = 77;
    const int UP_KEY = 72;
    const int DOWN_KEY = 80;
    const int ESC_KEY = 27;
    int button, kx = 0, ky = 0;
    int color = rand() % 15 + 1;
 
 
    show_field(field_size, colors);
    show_rectangle(figure_size, kx, ky, figure_color);
 
    do {
        button = _getch();
        switch (button)
        {
        case LEFT_KEY:
            if (kx <= 0)
            {
                figure_color = colors[0];
                show_rectangle(figure_size, kx, ky, figure_color);
                break;
            }
            else
            {
                kx--;
            }
            system("cls");
            show_field(field_size, colors);
            show_rectangle(figure_size, kx, ky, figure_color);
            break;
        case RIGHT_KEY:
            if (kx >= field_size * 2 - figure_size + 1)
            {
                figure_color = colors[2];
                show_rectangle(figure_size, kx, ky, figure_color);
                break;
            }
            else
            {
                kx++;
            }
            system("cls");
            show_field(field_size, colors);
            show_rectangle(figure_size, kx, ky, figure_color);
            break;
        case UP_KEY:
            if (ky <= 0)
            {
                figure_color = colors[1];
                show_rectangle(figure_size, kx, ky, figure_color);
                break;
            }
            else
            {
                ky--;
            }
            system("cls");
            show_field(field_size, colors);
            show_rectangle(figure_size, kx, ky, figure_color);
            break;
        case DOWN_KEY:
            if (ky >= field_size - 1)
            {
                figure_color = colors[3];
                show_rectangle(figure_size, kx, ky, figure_color);
                break;
            }
            else
            {
                ky++;
            }
            system("cls");
            show_field(field_size, colors);
            show_rectangle(figure_size, kx, ky, figure_color);
            break;
        default:
            break;
        }
    } while (button != ESC_KEY);
 
}
0
1272 / 1029 / 470
Регистрация: 25.12.2016
Сообщений: 3,333
05.03.2017, 19:46
Цитата Сообщение от Sportsm Посмотреть сообщение
Когда прямоугольник заходит на границу, цвет должен меняться!
Ну так и меняй его: генерируй случайный цвет и перерисовывай границу с этим цветом.
Можно даже для удобства сделать отдельную функцию draw_border(side, color), рисующую одну из границ заданным цветом.
0
-18 / 1 / 1
Регистрация: 15.12.2016
Сообщений: 60
05.03.2017, 21:46  [ТС]
Цитата Сообщение от likehood Посмотреть сообщение
Ну так и меняй его: генерируй случайный цвет и перерисовывай границу с этим цветом.
Это легко сказать, а на деле сложновато
где генерировать? и как?
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
void show_field(int size, Color arr[])
{
    // левая граница
    Color color = Black;
    for (int i = 0; i <= size; i++)
    {
        setColor(arr[0], (Color)color);
        cout << (char)15 << '\n';
    }
    setCursor(1, 0);
    // верхняя граница
    for (int i = 0; i < size * 2; i++)
    {
        setColor(arr[1], (Color)color);
        cout << (char)15;
    }
    // правая граница
    for (int i = 0; i < size; i++)
    {
        setColor(arr[2], (Color)color);
        setCursor(size * 2, i);
        cout << (char)15 << '\n';
    }
    setCursor(1, size);
    // нижняя граница
    for (int i = 0; i < size * 2; i++)
    {
        setColor(arr[3], (Color)color);
        cout << (char)15;
    }
    cout << '\n';
    setColor(White, Black);
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
05.03.2017, 21:46
Помогаю со студенческими работами здесь

Сформировать меню: 1) свободное движение объекта 2)движение с клавиатуры
Сформировать на экране меню, состоящее из следующих пунктов: 1. Движение вдоль периметра экрана. Через случайное количество тактов...

движение прямоугольника
как уменьшить скорость движения? #include &lt;stdio.h&gt; #include &lt;conio.h&gt; #include &lt;stdlib.h&gt; #include &lt;graphics.h&gt; #define...

Движение прямоугольника
Здравствуйте! У меня проблема с этой работой. Программа идет. Но прямоугольник движется по диагонали,а мне нужно,чтобы он двигался по...

Движение прямоугольника c применением функции
Доброе время суток, ребята подскажите в где проблема? Реализовать перемещение прямоугольника внутри цветной рамки. Каждая сторона...

Движение прямоугольника по касательной вокруг окружности
Помогите переделать код, чтобы получилось то, что требуется по условию? Никак не могу сделать до конца :( ...


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

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Новые блоги и статьи
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа, решает её и находит переходные токи и напряжения на элементах схемы. . . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru