Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
mkostoevr
Незнайка
26 / 11 / 2
Регистрация: 14.10.2016
Сообщений: 370
Записей в блоге: 2
1

Как можно оптимизировать данный код?

06.11.2016, 01:50. Просмотров 201. Ответов 2
Метки нет (Все метки)

И... Ещё один вопрос:

Дан участок кода С++:


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
#include <iostream>
#include "Windows.h"
 
 
using namespace std;
 
void du()
{
    HDC hdc = GetDC(0);
    COLORREF color = GetPixel(
        hdc,
        750,
        575
    );
    COLORREF ccolor = GetPixel(
        hdc,
        1033,
        450
    );
    COLORREF cccolor = GetPixel(
        hdc,
        904,
        450
    );
    COLORREF ccccolor = GetPixel(
        hdc,
        1021,
        427
    );
    COLORREF cccccolor = GetPixel(
        hdc,
        678,
        840
    );
    COLORREF ccсcccolor = GetPixel(
        hdc,
        587,
        799
    );
    COLORREF banner = GetPixel(
        hdc,
        940,
        492
    );
    COLORREF riba_sorvalas = GetPixel(
        hdc,
        904,
        520
    );
    ReleaseDC(0, hdc);                          
 
    int cr = GetRValue(color);
    int cg = GetGValue(color);
    int cb = GetBValue(color);
 
    int ccr = GetRValue(ccolor);
    int ccg = GetGValue(ccolor);
    int ccb = GetBValue(ccolor);
 
    int cccr = GetRValue(cccolor);
    int cccg = GetGValue(cccolor);
    int cccb = GetBValue(cccolor);
 
    int ccccr = GetRValue(ccccolor);
    int ccccg = GetGValue(ccccolor);
    int ccccb = GetBValue(ccccolor);
 
    int cccccr = GetRValue(cccccolor);
    int cccccg = GetGValue(cccccolor);
    int cccccb = GetBValue(cccccolor);
 
    int ccccсcr = GetRValue(ccсcccolor);
    int cccсccg = GetGValue(ccсcccolor);
    int cccсccb = GetBValue(ccсcccolor);
 
    int br = GetRValue(banner);
    int bg = GetGValue(banner);
    int bb = GetBValue(banner);
 
    int rbr = GetRValue(riba_sorvalas);
    int rbg = GetGValue(riba_sorvalas);
    int rbb = GetBValue(riba_sorvalas);
 
    if (cr == 61 && cg == 99 && cb == 135) 
    {
        keybd_event(32, 0, 0, 0);
    }
    else if (cr == 63 && cg == 178 && cb == 51)
    {
        keybd_event(32, 0, KEYEVENTF_KEYUP, 0);
    }
    else
    {
        if (ccr == 65 && ccg == 46 && ccb == 32) 
        {
            keybd_event(27, 0, 0, 0);
            keybd_event(27, 0, KEYEVENTF_KEYUP, 0);
        }
        if (cccr == 144 && cccg == 97 && cccb == 35)
        {
            keybd_event(27, 0, 0, 0);
            keybd_event(27, 0, KEYEVENTF_KEYUP, 0);
        }
        if (ccccr == 65 && ccccg == 46 && ccccb == 32          )
        {
            keybd_event(27, 0, 0, 0);
            keybd_event(27, 0, KEYEVENTF_KEYUP, 0);
        }
        if (cccccr == 137 && cccccg == 101 && cccccb == 67)
        {
            keybd_event(32, 0, 0, 0);
        }
        if (ccccсcr == 127 && cccсccg == 168 && cccсccb == 74)
        {
            keybd_event(27, 0, 0, 0);
            keybd_event(27, 0, KEYEVENTF_KEYUP, 0);
        }
        if (br == 144 && bg == 96 && bb == 34)
        {
            keybd_event(27, 0, 0, 0);
            keybd_event(27, 0, KEYEVENTF_KEYUP, 0);
        }
        if (rbr == 144 && rbg == 97 && rbb == 35)
        {
            keybd_event(27, 0, 0, 0);
            keybd_event(27, 0, KEYEVENTF_KEYUP, 0);
        }
 
    }
}
 
int main()
{
    for (;;) {
        du();
    }
    system("pause");
    return 0;
}

Прежде, чем программа догадается, что пора эмулировать нажатие клавиши, проходит как минимум 20 кадров игры... Программа получается немного тормознутая.

Как её ускорить?

Та плюсы не скуплюсь.

Заранее спасибо.
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
06.11.2016, 01:50
Ответы с готовыми решениями:

Как оптимизировать данный код игры крестики нолики?
Привет всем! Я написал консольную игру &quot;Крестики нолики&quot;. Хочу посоветоваться...

Можно как-то оптимизировать этот код?
#include &lt;iostream&gt; using namespace std; int main() { unsigned int num,...

Наследование классов как можно оптимизировать код и условие
Создал два класса родительский монстр и наследный демон. у демона появляется...

Регистрация и авторизация пользователя - можно ли оптимизировать код
Можно ли как-то упростить такой код, или это - то что нужно? Простенькие до...

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

2
monolit
188 / 187 / 46
Регистрация: 24.03.2011
Сообщений: 670
Завершенные тесты: 1
06.11.2016, 09:16 2
Ну, тут врядли дело в медленной работе... Нечему там особо замедляться.
Пройдись отладчиком эти самые первые 20 кадров, и посмотри, что происходит. Тут где-то в логике ошибка, похоже (ели она есть).

Единственное что могу сказать - это в строках 94-128, т.к. там у тебя взаимоискоючающие условия, было бы неплохо использовать `if ...else if`. Но опять же - это врядли повлияет на производительность. Слишком мелко.

PS
Мб попробуй в бесконечно цикле Sleep(0) ставить, чтоб ОС передавала управление от твоей программе другим (мб там просто это редко происходит) на каждом цикле. Вполне может сработать.
1
Croessmah
++Ͻ
14777 / 8453 / 1605
Регистрация: 27.09.2012
Сообщений: 20,803
Записей в блоге: 2
Завершенные тесты: 1
06.11.2016, 11:20 3
И еще минимизировать вызовы GetPixel.
Может лучше сразу скопом пиксели брать, а не по одному?
Тем более, между двумя разными вызовами GetPixel
кадр может измениться и получим "рассинхрон".
1
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
06.11.2016, 11:20

Можно ли данный код сделать короче?
#include&lt;iostream&gt; #include&lt;iomanip&gt; int main() { int r,f,a,b,c,d,x,y;...

можно ли считать данный код реализацией очереди
можно ли считать данный код реализацией очереди. и если нет, то почему. ...

Как оптимизировать код?
Вот такой код, написанный для микроконтроллера импульсного блока питания....


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru