Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 5.00/6: Рейтинг темы: голосов - 6, средняя оценка - 5.00
Nalik
128 / 80 / 40
Регистрация: 30.11.2012
Сообщений: 948
1

Программа работает только с одним разрешением экрана, как сделать чтобы она была универсальна

12.05.2014, 10:31. Просмотров 1073. Ответов 2
Метки нет (Все метки)

Написал простенький кликер на с++, который в игре нажимает кнопочки от 1 до 9, сделал зависимости нажатия кнопочек от того что происходит на экране, ну то есть если уровень здоровья маленький, то программа нажимает кнопочку 1 и т.д. Реализовал это через гетпиксель, обращаюсь к координатам, сверяю пикселя. Но столкнулся с проблемой, что когда запускаю прогу на ноуте, все отлично работает, но когда запускаю игру на компе, то программа как то не правильно начинает работать.

Понял почему так, не смотря на то что игру и на ноуте и на компе запускаю в оконном режиме с разрешением экрана 1024х768, ещё так же влияет разрешения самого Windows, на ноуте 1366х768 и всё отлично работает, на компе 1920х1080 и в игре не все функции работают как надо.

Запихнул в пеинт скрин игрового окна с компа и с ноута и смотрю, что хоть настройки в игре стоят 1024х768, но по факту получается, что когда играю с компа то разрешение там одно, а с ноута другое.

Собственно вопрос в том, может кто подскажет, как можно привести программу к универсальному виду, чтобы она работала на всех разрешениях экрана, не прибегая к тому, что под каждое разрешение придется писать свой код?

P.S. И не надо пожалуйста кричать "хакер, фигакер, ещё один и бла-бла", не знаете пройдите мимо
0
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
12.05.2014, 10:31
Ответы с готовыми решениями:

Программа считывает только первую строку файла,как сделать чтобы она считывала все строки
#include <fstream> #include <iostream> using namespace std; int main(int argc, char* argv) {...

Программа Новый год: Чтобы она была актуальной на каждый год, а не только 2012
Чтобы программа была на каждый год, а не только 2012... Должен 1 год прибавляться с наступлением...

Как сделать вьюшку, чтобы она была поверх любых приложений?
Например, как это сделано в ГеймХацкере. Нигде не могу нарыть. Говорят про AlertDialog, но это...

Как создать другую форму, но чтобы при нажатии кнопки эта форма была не сбоку, тоесть чтобы она была в этой первой форме
Как создать другую форму, но чтобы при нажатии кнопки эта форма была не сбоку, тоесть чтобы она...

форма для комментариев скрыта как сделать чтобы она была открытой.(обычная)
В общем вот сам код <ul id="commentRoot"> <li id="newComment"> <div...

2
Tulosba
:)
Эксперт С++
4751 / 3245 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
12.05.2014, 10:35 2
Цитата Сообщение от Nalik Посмотреть сообщение
Реализовал это через гетпиксель, обращаюсь к координатам, сверяю пикселя.
Код будьте любезны. Иначе все и будут мимо проходить.
0
Nalik
128 / 80 / 40
Регистрация: 30.11.2012
Сообщений: 948
12.05.2014, 10:50  [ТС] 3
Лучший ответ Сообщение было отмечено Nalik как решение

Решение

Вот например. В вызванных функциях так же идут обращения к координатам, но весь код заточен под разрешения экрана винды 1366х768 и разрешение игры 1024х768.
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
//РЕЖИМ 2: ФАРМ НА МЕСТЕ
 
void mode2 (HWND Handle_ArcheAge)
{
    //int i;
    cout << "\nРежим 2: фарм на месте\n";
    time_t Time= time(NULL);    //счетчик времени
    while(1)
    //{
        //cout <<"Кидаю баффы\n";
        //F1 (Handle_ArcheAge);
        //altu (Handle_ArcheAge);
        //send9 (Handle_ArcheAge);
        //for (i=0;i<10;i++)
        {
            //в курсоре моб (красный) - предположительно маленький, если большой, то бить будет не до конца
            COLORREF minLimit = RGB(134,29,29); //диапазон минимального цвета
            COLORREF maxLimit = RGB(180,70,70); //диапазон максимального цвета
 
            HDC hdc=GetDC(Handle_ArcheAge);
            COLORREF  d = GetPixel (hdc, 389-3, 63-25); // координаты определения пикселя
            ReleaseDC(Handle_ArcheAge,hdc);
            if(GetRValue(d) >= GetRValue(minLimit) && GetRValue(d) <= GetRValue(maxLimit) &&
            GetGValue(d) >= GetGValue(minLimit) && GetGValue(d) <= GetGValue(maxLimit) &&
            GetBValue(d) >= GetBValue(minLimit) && GetBValue(d) <= GetBValue(maxLimit))
            {   
                kritHP (Handle_ArcheAge); //критическое состояние, нажимаю Z
                health80lutnya (Handle_ArcheAge); //
                mana80fleyta (Handle_ArcheAge);
                cout <<" >> Атакую..\n";
                Sleep(1000);
                send1 (Handle_ArcheAge); //клавиша 1
                send2 (Handle_ArcheAge); //клавиша 2
                send3 (Handle_ArcheAge); //клавиша 3
                send4 (Handle_ArcheAge); //клавиша 4
                send5 (Handle_ArcheAge); //клавиша 5
                send6 (Handle_ArcheAge); //клавиша 6
                send7 (Handle_ArcheAge); //клавиша 7
                send8 (Handle_ArcheAge); //клавиша 8
                F (Handle_ArcheAge); //поднять предмет
            }
            else //в курсоре нет красного цвета (нету моба)
            {
                //делаем проверку есть ли в курсоре вообще моб (может быть большим или мертвым) (коричневый)
                HDC hdc=GetDC(Handle_ArcheAge);
                COLORREF  c = GetPixel (hdc, 633-3, 61-25); // координаты определения пикселя
                ReleaseDC(Handle_ArcheAge,hdc);
                if (Handle_ArcheAge, c ==RGB(55,42,17)) //RGB коды цветов
                {
                    //делаем проверку большой ли это моб (красный)
                    COLORREF minLimit = RGB(134,29,29); //диапазон минимального цвета
                    COLORREF maxLimit = RGB(180,70,70); //диапазон максимального цвета
 
                    HDC hdc=GetDC(Handle_ArcheAge);
                    COLORREF  d = GetPixel (hdc, 333-3, 63-25); // координаты определения пикселя
                    ReleaseDC(Handle_ArcheAge,hdc);
                    if(GetRValue(d) >= GetRValue(minLimit) && GetRValue(d) <= GetRValue(maxLimit) &&
                    GetGValue(d) >= GetGValue(minLimit) && GetGValue(d) <= GetGValue(maxLimit) &&
                    GetBValue(d) >= GetBValue(minLimit) && GetBValue(d) <= GetBValue(maxLimit))
                    {
                        kritHP (Handle_ArcheAge); //критическое состояние, нажимаю Z
                        health80lutnya (Handle_ArcheAge); //
                        mana80fleyta (Handle_ArcheAge);
                        agr (Handle_ArcheAge);
                        cout <<" >> Атакую..\n";
                        Sleep(1000);
                        send1 (Handle_ArcheAge); //клавиша 1
                        send2 (Handle_ArcheAge); //клавиша 2
                        send3 (Handle_ArcheAge); //клавиша 3
                        send4 (Handle_ArcheAge); //клавиша 4
                        send5 (Handle_ArcheAge); //клавиша 5
                        send6 (Handle_ArcheAge); //клавиша 6
                        send7 (Handle_ArcheAge); //клавиша 7
                        send8 (Handle_ArcheAge); //клавиша 8
                        F (Handle_ArcheAge); //поднять предмет
                    }
                    else //в курсоре есть коричневый цвет, но нет красного, моб полностью убит
                    {
                        cout <<"В КУРСОРЕ ЕСТЬ КОРИЧНЕВЫЙ ЦВЕТ, НО НЕТ КРАСНОГО, МОБ полностью убит\n";
                        kritHP (Handle_ArcheAge);
                        health80lutnya (Handle_ArcheAge);
                        mana80fleyta (Handle_ArcheAge);
                        agr (Handle_ArcheAge);
                        send1(Handle_ArcheAge); //клавиша 1
                        F (Handle_ArcheAge); //поднять предмет
                        D (Handle_ArcheAge); //повернуться
                        K (Handle_ArcheAge); //открыть - закрыть окно умений
                    }
                }
                else //в курсоре нет красного и нет коричневого
                {
                    cout <<"В КУРСОРЕ НЕТУ КРАСНОГО И НЕТУ КОРИЧНЕВОГО\n";
                    kritHP (Handle_ArcheAge);
                    health80lutnya (Handle_ArcheAge);
                    mana80fleyta (Handle_ArcheAge);
                    send1(Handle_ArcheAge); //клавиша 1
                    F (Handle_ArcheAge); //поднять предмет
                    D (Handle_ArcheAge); //повернуться
                    K (Handle_ArcheAge); //открыть - закрыть окно умений
                }
            }
            //закончено выполнения цикла, не более не менее
            //проверяется R пиксель из RGB цвета и если он совпадает выполняются эти действия
            cout <<"ЗАКОНЧЕНО ВЫПОЛНЕНИЕ ЦИКЛА, ИДЁМ НА СЛЕДУЮЩУЮ СТУПЕНЬ\n";
            //if ( kritHP &&
            //health80lutnya  &&
            //mana80fleyta  )
            //{
            //  cout <<"в курсоре вообще никого нет, смотрим крит, жизни и ману и ищем цель\n";
            //send1(Handle_ArcheAge); //клавиша 1
            //F (Handle_ArcheAge); //поднять предмет
            //D (Handle_ArcheAge); //повернуться
            //K (Handle_ArcheAge); //открыть - закрыть окно умений
            //}
 
        }
    //}
}
Знакомый посоветовал использовать оффсеты окна. Определять с каким разрешением запущено окно и к моим координатам прибавлять или отнимать разницу, чтобы программа жала на нужные кнопочки
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
12.05.2014, 10:50

Как сделать чтобы после перезагрузки страницы в окне она была прокручена в конец?
Как сделать чтобы после перезагрузки страницы в окне она была прокручена в конец? Есть идеи?

Как сделать, чтобы немодальная форма всегда была поверх других (даже если она не активна)?
Субж... Недавно перешел с Дельфей на VB (вынужден был по работе)... Этот вопрос - мое первое...

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


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

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

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