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

Работа с while, kbhit() и getch() - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 12, средняя оценка - 4.92
Granin
0 / 0 / 0
Регистрация: 08.09.2013
Сообщений: 19
08.09.2013, 21:10     Работа с while, kbhit() и getch() #1
Здравствуйте!
Подскажите пожалуйста,
Задача, сделать точку в консоли, которая бы двигалась в заданном направление и меняла его при нажатие на клавиши ( W A S D )
Как я это вижу, точка двигается пока не заданно другое (т.е. прошлое место заменяется на пробел, место +1 меняется на точку).
При нажатие клавиши пускаем функцию отвечающую за смену направления. Может не прав?


C++
1
2
3
4
5
6
7
8
9
10
11
12
13
void change() // считываем что нажато
   {
char klava; //
klava = getch(); // 
switch (klava) // 
     {
 case 'w':  cout<<"eto W";   break;
 case 's':  cout<<"eto s";   break;
 case 'a':  cout<<"eto a";   break;
 case 'd':  cout<<"eto d";   break;
 default : break;           
     }
   }

При таком коде, он прекращает работу при нажатие любой клавиши.
C++
1
2
while(!kbhit())
cout<<"*";
А как мне задать что при нажатие на A одна функция, при нажатие W вторая и т.д.?

Благодарю!
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
08.09.2013, 21:10     Работа с while, kbhit() и getch()
Посмотрите здесь:

немогу разобратся с kbhit() C++
Некорректная работа ф-ции getch() в цикле C++
C++ kbhit
Подскажите с функцией kbhit() C++
C++ Функция kbhit
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Nullik
 Аватар для Nullik
43 / 12 / 1
Регистрация: 13.03.2013
Сообщений: 297
Завершенные тесты: 1
08.09.2013, 21:15     Работа с while, kbhit() и getch() #2
использовать switch-case?

Добавлено через 24 секунды
засунутый в цикл do-while
Granin
0 / 0 / 0
Регистрация: 08.09.2013
Сообщений: 19
08.09.2013, 21:22  [ТС]     Работа с while, kbhit() и getch() #3
Цитата Сообщение от Nullik Посмотреть сообщение
использовать switch-case?

Добавлено через 24 секунды
засунутый в цикл do-while
Я это пробовал изначально. Но видно что-то не так пишу

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
int main(int argc, char* argv[])
{
 
    int a = 0; 
    
    do // начало цикла do while
    {
     cout<<"*";
     a = getch();
     char klava;
    }
     //
 
    while ( a != 0 ); // конец цикла do while
    system("pause");
    return 0;
}
Belfegor
Ghost
 Аватар для Belfegor
172 / 172 / 6
Регистрация: 16.09.2012
Сообщений: 524
08.09.2013, 21:22     Работа с while, kbhit() и getch() #4
http://www.cyberforum.ru/blogs/34326/blog263.html
Nullik
 Аватар для Nullik
43 / 12 / 1
Регистрация: 13.03.2013
Сообщений: 297
Завершенные тесты: 1
08.09.2013, 21:30     Работа с while, kbhit() и getch() #5
Granin

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
do
{
cin >> a;
 
switch (a)
{
case (код клавиши, напрмиер)
{
}
case (другой код клавиши)
{
}
....
 
}
 
}while();
Добавлено через 1 минуту
т.е., суть этого кода в том, что внешний while будет ждать такую а, (должен ждать такую а), при которой он (цикл) сделает стоп.

А вот свич - условный оператор, т.е., пока есть такое, делаем так.
Granin
0 / 0 / 0
Регистрация: 08.09.2013
Сообщений: 19
08.09.2013, 23:39  [ТС]     Работа с while, kbhit() и getch() #6
вот так работает как надо, но как можно сделать то-же самое, но без GetAsyncKeyState а с kbhit() и getch() ? Благодарю!

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
int main()
{
    while(TRUE)
    {
        printf("ab");
        if(GetAsyncKeyState(VK_LEFT))
        {
            keybd_event(VK_LEFT, 0, KEYEVENTF_KEYUP, 0);//Отжимаем кнопку
            printf("done\n");
            break;
            
        }
   
    }
    return 0;
}
Yandex
Объявления
08.09.2013, 23:39     Работа с while, kbhit() и getch()
Ответ Создать тему
Опции темы

Текущее время: 12:29. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru