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

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

Войти
Регистрация
Восстановить пароль
 
rikimaru2013
C++ Game Dev
2436 / 1130 / 240
Регистрация: 30.11.2013
Сообщений: 3,688
#1

Почему иногда отслеживается нажатие на три клавиши сразу, а иногда нет - C++

04.05.2014, 06:07. Просмотров 416. Ответов 7
Метки нет (Все метки)

Доброй ночи, кто может объяснить почему иногда отслеживает нажатие на три кнопки сразу, а иногда нет. И как выйти с ситуации *(
P.S. Пишу консольный бомбер, надо ставить пробелом бомбу вовремя движения, включая движение по диагонали.
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
#include <iostream>
#include <Windows.h>
 
using namespace std;
 
void main()
{
    int left, right, down, up, space;
    
    while(true)
    {
        left=right=down=up=space=0;
        if(GetAsyncKeyState(VK_LEFT))
        {
            left = 1;
        }
        if(GetAsyncKeyState(VK_RIGHT))
        {
            right = 1;
        }
        if(GetAsyncKeyState(VK_UP))
        {
            up = 1;
        }
        if(GetAsyncKeyState(VK_DOWN))
        {
            down = 1;
        }
        if(GetAsyncKeyState(VK_SPACE))
        {
            space = 1;
        }
        if(GetAsyncKeyState(VK_ESCAPE))
        {
           exit(0);
        }
        system("cls");
        cout << "LEFT:  " << left << endl;
        cout << "RIGHT:  " << right << endl;
        cout << "UP:  " << up << endl;
        cout << "DOWN:  " << down << endl;
        cout << "SPACE:  " << space << endl;
 
        Sleep(50);
    }
 
 
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
04.05.2014, 06:07
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Почему иногда отслеживается нажатие на три клавиши сразу, а иногда нет (C++):

Openssl. Иногда вызов функций шифрования проходит нормально, иногда нет - C++
Всем привет! Использую библиотеку openssl для шифрования / дешифрования. Генерирую ключи следующим образом: RSA...

Почему иногда функции передается значение int, а иногда - нет? - C++
1 случай: void Function_1(int* &amp; rVarOne, int* &amp;rVarTwo) { /* Какие-то операции с указателями: rVarOne++; *rVarOne =...

Нужно, чтобы консоль не ожидала нажатие клавиши, а сразу закрывалась - C++
Может это прозвучит глупо, но мне надо чтобы консоль не ожидала нажатие клавиши, а сразу закрывалась. Ни getch() ни system(&quot;pause&quot;) я не...

Почему в VC нет виртуальной клавиши типа VK_ENTER? - C++
Почему в VC нет виртуальной клавиши типа VK_ENTER? Как тогда поймать нажатие на Enter? Кстати, а что такое VK_RETURN?

Изучаю C++ иногда бывает непонятно - C++
Здравствуйте. Я изучаю С++ по книжкам, по видео и прочим заметкам в интернете. Уже где-то дней 7 учу. С++ первый язык который изучаю....

Иногда переменные, созданные в main, не видны в цикле for - C++
#include &lt;iostream&gt; #include &lt;vector&gt; #include &lt;functional&gt; using namespace std; int main() { const int max(20); int...

7
dimcoder
Полярный
466 / 438 / 68
Регистрация: 11.09.2011
Сообщений: 1,136
04.05.2014, 09:44 #2
Цитата Сообщение от rikimaru2013 Посмотреть сообщение
почему иногда отслеживает нажатие на три кнопки сразу, а иногда нет.
А Вы зажимаете или нажимаете и сразу отпускаете? Я вот зажимаю все пять клавиш, везде показывает единицы.
0
rikimaru2013
C++ Game Dev
2436 / 1130 / 240
Регистрация: 30.11.2013
Сообщений: 3,688
04.05.2014, 09:50  [ТС] #3
Пример:
1) Бежим влево (зажали влево)
2) Бежим по диагонали влево-вверх (зажали в придачу еще вверх)
3) При этом всём ставим по дороге мину (нажимаем периодически пробел)

Единица не загорается на space и к тому же идёт системный звук залипания клавиш.

В настройках залипание клавиш полностью отключено. (Win 7 Ultimate SP1)
0
castaway
Эксперт С++
4884 / 3019 / 370
Регистрация: 10.11.2010
Сообщений: 11,078
Записей в блоге: 10
Завершенные тесты: 1
04.05.2014, 10:01 #4
Это зависит от последовательности, в которой ты их нажимаешь.
Например, если ты сначала нажмешь SPACE, то ни одна другая клавиша не "засчитается".
Необходимо пересмотреть алгоритм в соответствии с задачей.
1
rikimaru2013
C++ Game Dev
2436 / 1130 / 240
Регистрация: 30.11.2013
Сообщений: 3,688
04.05.2014, 10:12  [ТС] #5
Цитата Сообщение от castaway Посмотреть сообщение
Это зависит от последовательности, в которой ты их нажимаешь.
Например, если ты сначала нажмешь SPACE, то ни одна другая клавиша не "засчитается".
Необходимо пересмотреть алгоритм в соответствии с задачей.
В моём примере space не первый даже. Обидно что к примеру там вниз+влево+space работает, а влево+вверх+space нет. Хотелось бы понять почему. Да и выбор другого алгоритма так же заводит в тупик:
1) перейти на :
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <conio.h>
if(kbhit()) 
{
 
switch(getch()) 
{
  case 72: //вверх
cout << "Up" << endl;
break;
  case 80: //вниз
cout << "Down" << endl;
break;
  case 75: //влево 
cout << "left" << endl;
break;
  case 77: //вправо
cout << "Right" << endl;
break;
}
}
}
  }
Не позволяет двигаться по диагоналям и при одновременном нажатии влево+вправо вместо остановится двигается влево.


Других вариантов не знаю
0
castaway
Эксперт С++
4884 / 3019 / 370
Регистрация: 10.11.2010
Сообщений: 11,078
Записей в блоге: 10
Завершенные тесты: 1
04.05.2014, 10:52 #6
Цитата Сообщение от rikimaru2013 Посмотреть сообщение
В моём примере space не первый даже.
Он последний. Не беря в расчет ESCAPE.
Проясни задачу. Тебе нужно считывать коды с задержкой или без?
0
rikimaru2013
C++ Game Dev
2436 / 1130 / 240
Регистрация: 30.11.2013
Сообщений: 3,688
05.05.2014, 07:46  [ТС] #7
Цитата Сообщение от castaway Посмотреть сообщение
Проясни задачу.
Цитата Сообщение от rikimaru2013 Посмотреть сообщение
P.S. Пишу консольный бомбер, надо ставить пробелом бомбу вовремя движения, включая движение по диагонали
Зажимаю влево+вверх бегу по диагонали (x -= mmm; y -= ddd и в любой момент могу нажать пробел, что поставит бомбу

Добавлено через 20 часов 28 минут
Запутался - всё еще ищу решение. Переписал вместо пробела на любую другую символьную клавишу. То ставит бомбочку, то нет )
0
ValeryS
Модератор
6651 / 5060 / 470
Регистрация: 14.02.2011
Сообщений: 16,918
05.05.2014, 08:08 #8
rikimaru2013,
дано на откуп клавиатуре какие клавиши и сколько нажимать, и какие она будет генерировать последовательности
гарантировано три клавиши(CTRL+ALT+Delete), дальше зависит дальше зависит от клавы

проверяется просто в любом текстовом редакторе по зажимай клавиши
так что програмно, по моему, эту тему не решить
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
05.05.2014, 08:08
Привет! Вот еще темы с ответами:

Останавливается цикл и иногда пропускает второй cin - C++
Проблема в названии темы. Программа должна класть в переменную slovo все буквы из s1, но доходит до первой &quot;не буквы&quot; и цикл...

Ищу человека который будит иногда объяснять - C++
Ищу человека который будит иногда объяснять мне что я не понял . Вот скайп s.t.a.l.k.e.r3396

Программа без синтаксических ошибок, но иногда считает неправильно - C++
Здравствуйте помогите пожалусто мене новичку разобраться в чом ошибка . Условие : Игра «кубики». Условие: имеется два игральных кубика...

Простой генератор паролей в файл иногда ставит пробелы - C++
Писал генератор паролей: #include&lt;stdio.h&gt; #include&lt;stdlib.h&gt; #include&lt;fstream&gt; #include&lt;time.h&gt; #include&lt;iostream&gt; ...


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

Или воспользуйтесь поиском по форуму:
8
Yandex
Объявления
05.05.2014, 08:08
Ответ Создать тему
Опции темы

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