Помогите с паузой скрипта C++

off
Участник
Статус
Оффлайн
Регистрация
7 Сен 2017
Сообщения
696
Реакции[?]
163
Поинты[?]
0
Всем здарова, имею скрипт прицела по середине экрана, помогите сделать так - чтобы по нажатию на кнопку F1, происходило появление/исчезание прицела. Скрипт в спойлере.
Код:
#include <windows.h>
#include <iostream>
#include <math.h>
using namespace std;

int main()
{
    setlocale(LC_ALL, "Russian");
    bool crosshairon = false;
    HDC ragedc = NULL;
    int crosshairsize = 0;
    int cx = 0;
    int cy = 0;
    cout << "Введите размер прицела в пикселях [Дефолт: 10]:\n";
    cin >> crosshairsize;
    if (crosshairsize % 2 == 0) //check if its even
    {
        crosshairsize += 1; //if it is add 1
    }
    system("cls"); //Очистить консоль
    cout << "Нажмите кнопку F1 для включения прицела\n";
    while (1)
    {
        if (crosshairon = true)
        {
            for (int i = 0; i<crosshairsize; i++)
            {
                SetPixel(ragedc, cx + i, cy + ((crosshairsize - 1) / 2), RGB(255, 0, 0));
                SetPixel(ragedc, cx + ((crosshairsize - 1) / 2), cy + i, RGB(255, 0, 0));
            }
        }
        if (GetAsyncKeyState(VK_F1) & 1)
        {
            crosshairon = !crosshairon;
            ragedc = GetDC(HWND_DESKTOP);
            cx = GetSystemMetrics(SM_CXSCREEN) / 2 - ((crosshairsize - 1) / 2);
            cy = GetSystemMetrics(SM_CYSCREEN) / 2 - ((crosshairsize - 1) / 2);
        }
        Sleep(1);
    }
}
Заранее спасибо.
 
Участник
Статус
Оффлайн
Регистрация
23 Фев 2017
Сообщения
613
Реакции[?]
507
Поинты[?]
0
Мда..... В этом ифе всегда будет тру, и если ты проверяешь bool переменную на значение 1 или 0, то просто пиши вот так:
Код:
bool a = true;
if(a) // Проверка если a == true
{
//Do smth
}
if(!a) //проверка если a == false
{
//Do smth
}
 
off
Участник
Статус
Оффлайн
Регистрация
7 Сен 2017
Сообщения
696
Реакции[?]
163
Поинты[?]
0
if (GetAsycKeyState(VK_F1))
{
рисуешь
}
else
{
чистишь
}
Мда..... В этом ифе всегда будет тру, и если ты проверяешь bool переменную на значение 1 или 0, то просто пиши вот так:
Код:
bool a = true;
if(a) // Проверка если a == true
{
//Do smth
}
if(!a) //проверка если a == false
{
//Do smth
}
if (GetAsycKeyState(VK_F1))
Можете скинуть готовый код?!
 
В игре Source SDK
Забаненный
Статус
Оффлайн
Регистрация
10 Янв 2017
Сообщения
2,148
Реакции[?]
806
Поинты[?]
0
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Код:
int flag = 0;
if(GeyAsyncKeyState(VK_F1) & 0x1) flag ^= 1;

if(flag)
//render




UPD (Крайслер):
не "гоже" использовать исключающее ИЛИ в данном случаи.
 
Последнее редактирование модератором:
off
Участник
Статус
Оффлайн
Регистрация
7 Сен 2017
Сообщения
696
Реакции[?]
163
Поинты[?]
0
//del
 
Код:
int flag = 0;
if(GeyAsyncKeyState(VK_F1) & 0x1) flag ^= 1;

if(flag)
//render
Не работает. Или я сделал что-то не так?
Код:
#include <windows.h>
#include <iostream>
#include <math.h>
using namespace std;

int main()
{
    setlocale(LC_ALL, "Russian");
    bool crosshairon = false;
    HDC ragedc = NULL;
    int crosshairsize = 0;
    int cx = 0;
    int cy = 0;
    cout << "Введите размер прицела в пикселях [Дефолт: 10]:\n";
    cin >> crosshairsize;
    if (crosshairsize % 2 == 0) //check if its even
    {
        crosshairsize += 1; //if it is add 1
    }
    system("cls"); //Очистить консоль
    cout << "Нажмите кнопку F1 для включения прицела\n";
    while (1)
    {
        if (crosshairon = true)
        {
            for (int i = 0; i<crosshairsize; i++)
            {
                SetPixel(ragedc, cx + i, cy + ((crosshairsize - 1) / 2), RGB(255, 0, 0));
                SetPixel(ragedc, cx + ((crosshairsize - 1) / 2), cy + i, RGB(255, 0, 0));
            }
        }
        int flag = 0;
        if (GetAsyncKeyState(VK_F1) & 0x1) flag ^= 1;

        if (flag)
            //render
        {
            crosshairon = !crosshairon;
            ragedc = GetDC(HWND_DESKTOP);
            cx = GetSystemMetrics(SM_CXSCREEN) / 2 - ((crosshairsize - 1) / 2);
            cy = GetSystemMetrics(SM_CYSCREEN) / 2 - ((crosshairsize - 1) / 2);
        }
        Sleep(1);
    }
}
 
В игре Source SDK
Забаненный
Статус
Оффлайн
Регистрация
10 Янв 2017
Сообщения
2,148
Реакции[?]
806
Поинты[?]
0
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
//del
 

Не работает. Или я сделал что-то не так?
Код:
#include <windows.h>
#include <iostream>
#include <math.h>
using namespace std;

int main()
{
    setlocale(LC_ALL, "Russian");
    bool crosshairon = false;
    HDC ragedc = NULL;
    int crosshairsize = 0;
    int cx = 0;
    int cy = 0;
    cout << "Введите размер прицела в пикселях [Дефолт: 10]:\n";
    cin >> crosshairsize;
    if (crosshairsize % 2 == 0) //check if its even
    {
        crosshairsize += 1; //if it is add 1
    }
    system("cls"); //Очистить консоль
    cout << "Нажмите кнопку F1 для включения прицела\n";
    while (1)
    {
        if (crosshairon = true)
        {
            for (int i = 0; i<crosshairsize; i++)
            {
                SetPixel(ragedc, cx + i, cy + ((crosshairsize - 1) / 2), RGB(255, 0, 0));
                SetPixel(ragedc, cx + ((crosshairsize - 1) / 2), cy + i, RGB(255, 0, 0));
            }
        }
        int flag = 0;
        if (GetAsyncKeyState(VK_F1) & 0x1) flag ^= 1;

        if (flag)
            //render
        {
            crosshairon = !crosshairon;
            ragedc = GetDC(HWND_DESKTOP);
            cx = GetSystemMetrics(SM_CXSCREEN) / 2 - ((crosshairsize - 1) / 2);
            cy = GetSystemMetrics(SM_CYSCREEN) / 2 - ((crosshairsize - 1) / 2);
        }
        Sleep(1);
    }
}
у тебя флаг происходит переопределение. Вынеси int flag за пределы циклы
 
off
Участник
Статус
Оффлайн
Регистрация
7 Сен 2017
Сообщения
696
Реакции[?]
163
Поинты[?]
0
у тебя флаг происходит переопределение. Вынеси int flag за пределы циклы
Не работает снова, модет опять что-то не так сделал?!?
Код:
#include <windows.h>
#include <iostream>
#include <math.h>
using namespace std;

int main()
{
    setlocale(LC_ALL, "Russian");
    bool crosshairon = false;
    HDC ragedc = NULL;
    int crosshairsize = 0;
    int cx = 0;
    int cy = 0;
    int flag = 0;
    cout << "Введите размер прицела в пикселях [Дефолт: 10]:\n";
    cin >> crosshairsize;
    if (crosshairsize % 2 == 0) //check if its even
    {
        crosshairsize += 1; //if it is add 1
    }
    system("cls"); //Очистить консоль
    cout << "Нажмите кнопку F1 для включения прицела\n";
    while (1)
    {
        if (crosshairon = true)
        {
            for (int i = 0; i<crosshairsize; i++)
            {
                SetPixel(ragedc, cx + i, cy + ((crosshairsize - 1) / 2), RGB(255, 0, 0));
                SetPixel(ragedc, cx + ((crosshairsize - 1) / 2), cy + i, RGB(255, 0, 0));
            }
        }

        if (GetAsyncKeyState(VK_F1) & 0x1) flag ^= 1;
            //render
        {
            crosshairon = !crosshairon;
            ragedc = GetDC(HWND_DESKTOP);
            cx = GetSystemMetrics(SM_CXSCREEN) / 2 - ((crosshairsize - 1) / 2);
            cy = GetSystemMetrics(SM_CYSCREEN) / 2 - ((crosshairsize - 1) / 2);
        }
        if (flag)
        Sleep(1);
    }
}
 
Эксперт
Статус
Оффлайн
Регистрация
12 Июн 2014
Сообщения
999
Реакции[?]
1,209
Поинты[?]
3K
Код:
std::cout << "Нажмите кнопку F1 для включения прицела,F2 - close programm" << std::endl;
static bool bFlag = false;
for (;;Sleep(10);)
    {
        if (GetAsyncKeyState(VK_F1) & 0x1)
            bFlag ^= 1;
        if (GetAsyncKeyState(VK_F2) & 0x1)
            break;
        if (bFlag == true)
        {       
            //рисуем прицел
        } 
    }
 
off
Участник
Статус
Оффлайн
Регистрация
7 Сен 2017
Сообщения
696
Реакции[?]
163
Поинты[?]
0
Код:
std::cout << "Нажмите кнопку F1 для включения прицела,F2 - close programm" << std::endl;
static bool bFlag = false;
for (;;Sleep(10);)
    {
        if (GetAsyncKeyState(VK_F1) & 0x1)
            bFlag ^= 1;
        if (GetAsyncKeyState(VK_F2) & 0x1)
            break;
        if (bFlag == true)
        {     
            //рисуем прицел
        }
    }
Зачем не завершение программы?! Мне нужна ПАУЗА!
Или я тему не правильно описал!?
 
Эксперт
Статус
Оффлайн
Регистрация
12 Июн 2014
Сообщения
999
Реакции[?]
1,209
Поинты[?]
3K
Зачем не завершение программы?! Мне нужна ПАУЗА!
Или я тему не правильно описал!?
Завершение просто бонусом. при на жатии F1 у тебя изменяется флаг переменной: true или false. При true у тебя будет рисоваться нудное тебе при false - нет
 
Пользователь
Статус
Оффлайн
Регистрация
7 Мар 2017
Сообщения
306
Реакции[?]
78
Поинты[?]
0
Завершение просто бонусом. при на жатии F1 у тебя изменяется флаг переменной: true или false. При true у тебя будет рисоваться нудное тебе при false - нет
мне кажется, или последняя точка с запятой в форе лишняя?
 
Сверху Снизу