Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/8: Рейтинг темы: голосов - 8, средняя оценка - 5.00
 Аватар для Nalik
176 / 124 / 49
Регистрация: 30.11.2012
Сообщений: 1,330

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

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

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

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

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

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

P.S. И не надо пожалуйста кричать "хакер, фигакер, ещё один и бла-бла", не знаете пройдите мимо
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
12.05.2014, 10:31
Ответы с готовыми решениями:

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

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

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

2
:)
Эксперт С++
4773 / 3267 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
12.05.2014, 10:35
Цитата Сообщение от Nalik Посмотреть сообщение
Реализовал это через гетпиксель, обращаюсь к координатам, сверяю пикселя.
Код будьте любезны. Иначе все и будут мимо проходить.
0
 Аватар для Nalik
176 / 124 / 49
Регистрация: 30.11.2012
Сообщений: 1,330
12.05.2014, 10:50  [ТС]
Лучший ответ Сообщение было отмечено 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
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
12.05.2014, 10:50
Помогаю со студенческими работами здесь

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

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

форма для комментариев скрыта как сделать чтобы она была открытой.(обычная)
В общем вот сам код &lt;ul id=&quot;commentRoot&quot;&gt; &lt;li id=&quot;newComment&quot;&gt; &lt;div class=&quot;commentContent&quot;&gt; &lt;div...

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

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


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru