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

Моргание экрана (graphics.h) - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Найти количество чисел. http://www.cyberforum.ru/cpp-beginners/thread363379.html
Добрый день, помогите пожалуйста составить программу: Вводятся числа a и b. Найти количество таких чисел в диапазоне , которые являются точными квадратами. У меня получилось, что-то вроде этого, ноооо опять же, меня терзают смутные сомнения:D Спасибо! #include<iostream> #include<conio.h> using namespace std;
C++ Вычислить сумму нечётных чисел и количество чисел равных 0 в последовательности Дана последовательность чисел, окачивающихся 0. 1. Вычилсить сумму нечётных чисел. 2. Количество чисел равных 0. Используя конструкцию CASE организовать меню для выбора пользователем решаемой задачи. http://www.cyberforum.ru/cpp-beginners/thread363377.html
C++ написать программу, проверяющую, можно ли в пятеричную запись числа х вставить цифру 4 так, чтобы оно стало степенью 2
написать программу проверяющую можно ли в пятеричную запись числа х вставить цифру 4 так чтобы оно стало степенью 2 использовать +,=,<,-,*,/,% заранее благодарю 3.3 Запрещено создавать темы с бессмысленными названиями вроде "Помогите!", "Вопрос" и т.п.
Проблемы с rand() в Dev-C++ C++
Всем привет=))))Форумчане, нужна ваша помощь!!!!У меня не очень получается с программированием.Мне кажется у меня проблемы с функцией rand()О_о.Сначала числа в матрице генерировались нормально, но при вводе одной и той же размерности, сама матрица не менялась...Я нашла на форуме небольшой пример. После чего у меня начало выводить всякий мусор (т.е. матрица выводилась n-раз), а сейчас и вовсе не...
C++ Необходимо создать меню к игре http://www.cyberforum.ru/cpp-beginners/thread363345.html
Я новичек, поэтому мне сложнова-то обьяснить. Мне необходимо создать меню к игре: 1. появляется окно - в нем пункты - правила игры, новая игра, загрузить игру, таблица рекордов, выход 2. курсором перебираешь пункты меню, хотелось бы чтоб еще прорисовывалась стрелочка(треугольник) возле пункта на котором сейчас стоишь 3. выбираешь пункт (либо он визуально вдавливался, либо цветом выделялся при...
C++ Нужен совет по условию задачи. Всем доброго дня. Занимаюсь по Дейтелу. в седьмой главе есть задача. Моя проблема в том что я не могу понять условие задачи. Используйте одномерный массив для решения следующей задачи. Компания платит своим продавцам на комиссионной основе. Продавцы получают 200 долларов в неделю плюс 9 процентов от валовой продажи за эту неделю. Например, продавец, валовая продажа которого за... подробнее

Показать сообщение отдельно
vortexx1
 Аватар для vortexx1
6 / 6 / 2
Регистрация: 06.03.2011
Сообщений: 269
09.10.2011, 11:23     Моргание экрана (graphics.h)
Привет. Я уже наверное уже всех задолбал со своей "Жизнью"
Извиняйте, ещё один вопрос, надеюсь, что последний.

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
#ifndef LIFE_H
#define LIFE_H
 
class Life
{
public:
    Life ();                        // конструктор
    int around ( int, int );        // считает, сколько клеток вокруг
    void deadOrAlive ( int, int );  // изменяет клетку в зависимости от условий
    void throughArray ();           // прочесывает массив и проверяет каждую его клетку
    void copyArrays ();             // копирует запасной массив в основной
    void clean_Array ();            // очищает запасной массив
    void printArray ();             // печатает массив
    int alive ();                   // считает, сколько живых клеток осталось
        
private:
    static const int y_size = 44;
    static const int x_size = 99;
    
    bool array [ y_size ][ x_size ];        // основной массив
    bool _array [ y_size ][ x_size ];       // запасной массив
};
 
#endif
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
#include <graphics.h>
#include <ctime>
#include <cstdlib>
#include "life.h"
 
Life::Life ()
{   
        // случайное заполнение массива
        srand ( time ( 0 ) );
        
        bool random;
        
        for ( int i = 0; i < y_size - 10; i++ )
            for ( int k = 0; k < x_size - 10; k++ )
            {
                random = 0 + rand() % 2;
                
                if ( random == 0 )
                   array [ i ][ k ] = 0;
                else
                   array [ i ][ k ] = 253;
            }
               
        // копируем первый массив во второй
        for ( int f = 0; f < y_size; f++ )
            for ( int j = 0; j < x_size; j++ )
                _array [ f ][ j ] = array [ f ][ j ];
}
 
// считает, сколько клеток вокруг
int Life::around ( int y, int x )
{
        int around = 0;
 
        if ( array [ y ][ x + 1 ] == true )
           around++;
           
        if ( array [ y - 1 ][ x + 1 ] == true )
           around++;
           
        if ( array [ y - 1 ][ x ] == true )
           around++;
           
        if ( array [ y - 1 ][ x - 1 ] == true )
           around++;
           
        if ( array [ y ][ x - 1 ] == true )
           around++;
           
        if ( array [ y + 1 ][ x - 1 ] == true )
           around++;
           
        if ( array [ y + 1 ][ x ] == true )
           around++;
           
        if ( array [ y + 1 ][ x + 1 ] == true )
           around++;
 
        return around;
}
 
// изменяет клетку в зависимости от условий
void Life::deadOrAlive ( int y, int x )
{
        int i = around ( y, x );
 
        if ( 0 == array [ y ][ x ] )                // если клетка мертвая 
        {                   
            if ( 3 == i )                           // и вокруг 3 живых,
                _array [ y ][ x ] = 1;            // то клетка оживает
                
            return;
        }
        
        if ( i < 2 || i > 3 ) 
        {
            _array [ y ][ x ] = 0;
            
            return;
        }
 
        _array [ y ][ x ] = array [ y ][ x ];
 
}
 
// прочесывает массив и проверяет каждую его клетку
void Life::throughArray ()
{
    for ( int y = 1; y < y_size - 1; y++ )
        for ( int x = 1; x < x_size - 1; x++ )
            deadOrAlive ( y, x );
}
 
// копирует запасной массив в основной
void Life::copyArrays ()
{
    for ( int y = 1; y < y_size - 1; y++ )
        for ( int x = 1; x < x_size - 1; x++ )
            array [ y ][ x ] = _array [ y ][ x ];
}
 
// рисует массив
void Life::printArray ()
{
    // масштаб клеток
    const int const_x = 6;         
    const int const_y = 6;
    
    int x = 0;
    int y = 0;
    
    // отрисовка клеток
    for ( int i = 0; i < y_size; i++ )
        for ( int k = 0; k < x_size; k++ )
        {
            if ( array [ i ][ k ] == true )
            {
                 rectangle ( x, y, x + const_x, y + const_y );
                 floodfill ( x + 1, y + 1, 15 );
            }
            
            x += const_x;
            
            if ( k == x_size - 1 )
            {
                 y += const_y;
                 x = 0;
            }
        }
}
 
// считает, сколько живых клеток осталось
int Life::alive ()
{
    int alive = 0;
        
    for ( int y = 10; y < y_size - 10; y++ )
        for ( int x = 10; x < x_size - 10; x++ )
            if ( array [ y ][ x ] != 0 )
                alive++;
                                
    return alive;
}
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
#include <graphics.h>
#include "life.h"
#include "life.cpp"
 
int main()
{
    initwindow( 560, 230 );          // создаём графическое окно 1024:768
    setbkcolor ( 0 );                // ставим цвет фона ЧЕРНЫЙ
    cleardevice ();                  // обновляем экран
    setcolor ( WHITE );              // цвет вывода БЕЛЫЙ
    
    Life life;
 
    while ( life.alive () )
    {
        life.throughArray ();
        life.copyArrays ();
        life.printArray ();
        
        Sleep ( 300 );
        cleardevice ();
    }
    
    closegraph ();
    return 0;
}
При запуске (я приаттачил файл) всё работает, но неистово моргает и перерисовывает экран. Стоит заметить, что в консольной версии этого не было. Также уровень моргания снижается при уменьшении размеров графического окна.

Так как же сделать, чтобы всё работало красиво и без заморочек?

Спасибо.
Вложения
Тип файла: rar main2.rar (288.2 Кб, 13 просмотров)
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 04:22. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru