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

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

Войти
Регистрация
Восстановить пароль
 
Nalik
46 / 32 / 10
Регистрация: 30.11.2012
Сообщений: 677
#1

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

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

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

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

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

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

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

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

рабочая программа. но нужно ее переписать так, чтобы она была наиболее общей. - C++
Задана матрица смежности размерности N*M. С помощью процедуры и матрицы меньшей размерности найти медианы и записать в виде матрицы...

как сделать программно чтобы программа была постоянно на заднем плане - C++
Суть вопроса как сделать программно чтобы программа была постоянно на заднем плане? Пишу экранную клавиатуру, как делать имитацию...

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

Как сделать так, чтобы программа не компилилась, хотя синтаксически была бы правильной? - C++
Друзья! Дело в следующем, вот у меня есть функции X и Y. И вот мне не хотелось бы вызывать X прежде, чем будет вызвана Y. Но это всё в...

Как объявить переменную так, чтобы она была видна в .h файле? - C++
День всем добрый! Допустим, есть у меня код в главном .cpp файле: #include "Windows.h" #include "my.h" using namespace...

2
Tulosba
:)
Эксперт С++
4396 / 3232 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
12.05.2014, 10:35 #2
Цитата Сообщение от Nalik Посмотреть сообщение
Реализовал это через гетпиксель, обращаюсь к координатам, сверяю пикселя.
Код будьте любезны. Иначе все и будут мимо проходить.
0
Nalik
46 / 32 / 10
Регистрация: 30.11.2012
Сообщений: 677
12.05.2014, 10:50  [ТС] #3
Вот например. В вызванных функциях так же идут обращения к координатам, но весь код заточен под разрешения экрана винды 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
Привет! Вот еще темы с ответами:

Модернизируйте функцию factorial так, чтобы она не была рекурсивной - C++
Пример программы: // Вычисляющей сумму, разность и факториал // двух чисел #include &lt;iostream.h&gt; class MyInt { int i; ...

при работе рекурсивной функции заканчивается стек и программа соответственно; как сделать так, чтобы она писала "стек закончился"? - C++
Сабж g++ 4.5.0

Как сделать чтобы функция была видна из .cpp файла? - C++
У меня есть 3 файла: main.cpp, 1.h, 1.cpp. Все делаю по книге, но получается так, что определение функции не видно из main().cpp ...

Массив: Образовать новую последовательность чисел так, чтобы она тоже была неубывающей - C++
Помогиет реализовать программу на С++ или дайте советы по ее построению Даны две последовательности a1 ≤ a2 ≤ ... ≤ an и b1 ≤...


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

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

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