Форум программистов, компьютерный форум CyberForum.ru

Консольная "графика", игра "Тетрис". Фигуры перестают прорисовываться на определенном этапе - C++

Восстановить пароль Регистрация
 
A_V
0 / 0 / 0
Регистрация: 23.02.2014
Сообщений: 5
23.02.2014, 18:48     Консольная "графика", игра "Тетрис". Фигуры перестают прорисовываться на определенном этапе #1
Доброго времени!
Написал на днях тетрис (в консоле) с использованием, кажется это называется WinApi.

В цикле вызывается функция отрисовки фигуры, которая в свою очередь вызывает п\п отрисовки кубика.
Удаление его осуществляется той же функцией только закрашивает поверх отрисованного цветом фона (так как не знаю возможно ли просто удалить нарисованное).

Все классно работает до определенного момента, где то на 7 - 9 фигуре отрисовка отваливается и фигура становится неподвижной и не дорисованной, но программа продолжает работать, переменные меняются, на отладке все нормально. Может как нибудь освобождать память или еще что после каждой отрисовки?

вот "графический" фрагмент программы.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
void printpos(int x, int y, bool key)
{
    HDC hdc = GetDC(GetConsoleWindow());
    HPEN BlackPen = CreatePen(PS_SOLID, 2, RGB(0, 0, 0));
    HPEN  DelPen = CreatePen(PS_SOLID, 2, RGB(59, 68, 75));
    HPEN  DelPen = CreatePen(PS_SOLID, 2, RGB(242,243,244));
    HBRUSH hBrush1, hBrush2, hBrush3;
    hBrush1 = CreateSolidBrush(RGB(59, 68, 75));
    hBrush2 = CreateSolidBrush(RGB(254, 111, 94));
    hBrush3 = CreateSolidBrush(RGB(0, 168, 107));
 
    switch (key)
    {
    case 1: SelectObject(hdc, BlackPen); SelectObject(hdc, hBrush2);  break;
    case 0: SelectObject(hdc, DelPen); SelectObject(hdc, hBrush1); break;
    }
    Rectangle(hdc, x + 260, y + 10, x + 278, y + 28); // Печать кубика
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
23.02.2014, 18:48     Консольная "графика", игра "Тетрис". Фигуры перестают прорисовываться на определенном этапе
Посмотрите здесь:

Строка: заменить первую "о" на "а", удалив остальные "о" C++
C++ Определить, сколько в строке символов "*", ":", ";"
Все слова, не содержащие "bc" и заканчивающиеся на "ad" заменить на "!" C++
C++ Подскажите как перегрузить операторы ">>", "<<" и "="
Консольная игра "Сапер" C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11845 / 6824 / 771
Регистрация: 27.09.2012
Сообщений: 16,919
Записей в блоге: 2
Завершенные тесты: 1
23.02.2014, 18:52     Консольная "графика", игра "Тетрис". Фигуры перестают прорисовываться на определенном этапе #2
Освобождайте ресурсы после того как они Вам стали не нужны, иначе происходит утечка ресурсов GDI
A_V
0 / 0 / 0
Регистрация: 23.02.2014
Сообщений: 5
23.02.2014, 18:57  [ТС]     Консольная "графика", игра "Тетрис". Фигуры перестают прорисовываться на определенном этапе #3
К сожалению я не знаю как и где это делается.
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11845 / 6824 / 771
Регистрация: 27.09.2012
Сообщений: 16,919
Записей в блоге: 2
Завершенные тесты: 1
24.02.2014, 09:21     Консольная "графика", игра "Тетрис". Фигуры перестают прорисовываться на определенном этапе #4
DeleteObject function
ReleaseDC function
A_V
0 / 0 / 0
Регистрация: 23.02.2014
Сообщений: 5
24.02.2014, 18:20  [ТС]     Консольная "графика", игра "Тетрис". Фигуры перестают прорисовываться на определенном этапе #5
Теперь отваливается на 20-21 фигуре, прогресс на лицо)
Кисть так же удаляется вместе с ручкой?

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
void printpos(int x, int y, bool key)
{
    HDC hDC = GetDC(GetConsoleWindow());
    int color;
    switch (key)
    {
    case 1: 
        color = 0;
        break;
    case 0:     
        color = 255;
        break;
    }
    HPEN BlackPen = CreatePen(PS_SOLID, 2, RGB(color, color, color));
    HPEN hOldPen = (HPEN) SelectObject(hDC, BlackPen); 
    SelectObject(hDC, BlackPen);
    Rectangle(hDC, x + 260, y + 10, x + 278, y + 28);
    SelectObject(hDC, hOldPen); 
    DeleteObject(BlackPen);
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11845 / 6824 / 771
Регистрация: 27.09.2012
Сообщений: 16,919
Записей в блоге: 2
Завершенные тесты: 1
24.02.2014, 19:04     Консольная "графика", игра "Тетрис". Фигуры перестают прорисовываться на определенном этапе #6
C++
1
ReleaseDC(hWnd,hDC);//когда контекст более не нужен
и не надо второй раз цеплять перо BlackPen(строка 16)
A_V
0 / 0 / 0
Регистрация: 23.02.2014
Сообщений: 5
24.02.2014, 19:39  [ТС]     Консольная "графика", игра "Тетрис". Фигуры перестают прорисовываться на определенном этапе #7
Не заметил повторный выбор. Спасибо.
Как быть если ругается на hWnd в ReleaseDC(hWnd,hDC)?
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11845 / 6824 / 771
Регистрация: 27.09.2012
Сообщений: 16,919
Записей в блоге: 2
Завершенные тесты: 1
24.02.2014, 20:45     Консольная "графика", игра "Тетрис". Фигуры перестают прорисовываться на определенном этапе #8
Цитата Сообщение от A_V Посмотреть сообщение
Как быть если ругается на hWnd в ReleaseDC(hWnd,hDC)?
это:
C++
1
HDC hDC = GetDC(GetConsoleWindow());
меняем на это:
C++
1
2
HWND hWnd = GetConsoleWindow() ;
HDC hDC = GetDC(hWnd);
Но вообще то желательно все операции проверять на успешность.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
24.02.2014, 21:30     Консольная "графика", игра "Тетрис". Фигуры перестают прорисовываться на определенном этапе
Еще ссылки по теме:

C++ Переменные "емкость", "Галлон", "Бензин"
Классы "Фигура", "Прямоугольник", "Круг" C++
Консольная игра "3 в ряд" C++

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

Или воспользуйтесь поиском по форуму:
A_V
0 / 0 / 0
Регистрация: 23.02.2014
Сообщений: 5
24.02.2014, 21:30  [ТС]     Консольная "графика", игра "Тетрис". Фигуры перестают прорисовываться на определенном этапе #9
Спасибо! Все работает!
Yandex
Объявления
24.02.2014, 21:30     Консольная "графика", игра "Тетрис". Фигуры перестают прорисовываться на определенном этапе
Ответ Создать тему
Опции темы

Текущее время: 07:26. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru