Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
mkostoevr
Незнайка
24 / 9 / 1
Регистрация: 14.10.2016
Сообщений: 366
Записей в блоге: 2
#1

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

06.11.2016, 01:50. Просмотров 168. Ответов 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
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Как можно оптимизировать данный код? (C++):

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

Наследование классов как можно оптимизировать код и условие - C++
Создал два класса родительский монстр и наследный демон. у демона появляется значение разум и условие сила+жизни+разум&lt;=200. Силу и жизнь...

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

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

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

можно ли считать данный код реализацией очереди - C++
можно ли считать данный код реализацией очереди. и если нет, то почему. #include &lt;stdlib.h&gt; #include &lt;stdio.h&gt; typedef...

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

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

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

Как оптимизировать код? - C++
Как оптимизировать код, чтобы работала программа быстрее #include &lt;iostream&gt; #include &lt;fstream&gt; #include &lt;iomanip&gt; using namespace...

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

Как оптимизировать код, со множеством операторов if? - C++
Можно ли сделать так, чтобы проверка обрабатывалась только тогда, когда нужно чтобы она проверила условие. while ( 1 ) { //...

Как можно еще оптимизировать код? - C++
Как еще можно оптимизировать данный код? Если вкратце, то он выводит значение АВ, если ключ = вводу пользотвателя. #include &lt;map&gt; ...


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

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

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