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

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

Войти
Регистрация
Восстановить пароль
 
Chelioss
180 / 180 / 4
Регистрация: 08.01.2011
Сообщений: 1,133
#1

Программа(консольная) работает и одновременно ждет данные от клавиатуры. Как? - C++

14.10.2011, 22:07. Просмотров 983. Ответов 9
Метки нет (Все метки)

Консольная программа.
Например, рассмотрит игру "змейка".
В этой игре одновременно змейка ползет и ждет данные от клавиатуры. Но если написать cin >> data, то ведь вся программа остановится, пока значение не будет введено и змейка в это время перестанет ползти.
Как это реализовать?
В WinAPI это понятно как сделать, ибо там ожидание данных не прерывает программу. А вот с консолью не понятно.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
14.10.2011, 22:07
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Программа(консольная) работает и одновременно ждет данные от клавиатуры. Как? (C++):

Не работает консольная программа - C++
Здравствуйте! Пожалуйста помогите разобраться, после запуска программы и ввода данных, окно консольного приложения закрывается без вывода...

Почему не работает консольная программа. - C++
Я написал простенькую консольную программку выдающую таблицу умножения. Но у моих друзей почему-то не открывается exe файл.Что я...

Консольная программа которая работает с двумя файлами - C++
Добрый день, интересен вопрос как на С++ реализовать консольное приложение которое получает на вход программы(в виде параметров командной...

Программа не работает как надо. Задача: Вывести сумму всех элементов массива, кратных данному числу К (вводится с клавиатуры) - C++
Вот мой код. Суммарное число выводит слишком большее, а после завершения программы ошибку:"Run-Time Check Failure #2 - Stack around the...

Программа выполнена , но ждет продолжения ввода (getline) - C++
есть код int main() { setlocale(0, ""); using namespace std; string text; string done = "done"; string a; int...

Послав команду функцией system() программа ждет дополнительных данных - C++
Когда посылаю команду например rmdir/S папка удалить папку то программа спрашивает, действительно ли я хочу удалить папку. ...

9
Van111
209 / 188 / 4
Регистрация: 03.08.2011
Сообщений: 2,597
Записей в блоге: 12
14.10.2011, 22:35 #2
CreateThread ,благо есть мнагозадачность

Добавлено через 7 минут
ну создаём поток а внём cin >>
1
silentnuke
Android Programmer
139 / 140 / 5
Регистрация: 08.12.2010
Сообщений: 421
14.10.2011, 22:39 #3
эээ для змейки как раз потоки не нужны, там все спокойно делается через один поток.
getch + kbhit
1
Chelioss
180 / 180 / 4
Регистрация: 08.01.2011
Сообщений: 1,133
14.10.2011, 22:43  [ТС] #4
Цитата Сообщение от Van111 Посмотреть сообщение
CreateThread ,благо есть мнагозадачность
Добавлено через 7 минут
ну создаём поток а внём cin >>
Про это думал, но что-то сложно для змейки.
Цитата Сообщение от silentnuke Посмотреть сообщение
эээ для змейки как раз потоки не нужны, там все спокойно делается через один поток.
getch + kbhit
То, что надо.
kbhit( conio.h) - это вроде от Си. Есть что-нибудь для C++?
0
silentnuke
Android Programmer
139 / 140 / 5
Регистрация: 08.12.2010
Сообщений: 421
14.10.2011, 22:48 #5
Цитата Сообщение от Chelioss Посмотреть сообщение
Про это думал, но что-то сложно для змейки.

То, что надо.
kbhit( conio.h) - это вроде от Си. Есть что-нибудь для C++?
в с++ прекрасно будет работать.
1
Chelioss
180 / 180 / 4
Регистрация: 08.01.2011
Сообщений: 1,133
14.10.2011, 22:53  [ТС] #6
Цитата Сообщение от silentnuke Посмотреть сообщение
в с++ прекрасно будет работать.
Знаю. Буду использовать. Но я хочу узнать аналог для С++, ибо я хочу в программах на С++ пользоваться инструментами из С++.
0
Chelioss
180 / 180 / 4
Регистрация: 08.01.2011
Сообщений: 1,133
16.10.2011, 03:06  [ТС] #7
Допустим, я использую kbhit и каждую секунду проверяю на ввод. Но мне надо только первый символ взять, а остальные убрать из потока(очистить вес поток), чтобы в следующий раз, когда я снова буду проверять на ввод, оставшиеся символы не попали ко мне. Как это сделать?
C++
1
2
3
4
5
6
7
8
while( true )
{
    if( kbhit )
    {
          value = getch();
          // как остальные символы убрать из потока или отчистить весь поток?
    } 
}
и как распознать нажатие стрелок на клавиатуре?
0
silentnuke
Android Programmer
139 / 140 / 5
Регистрация: 08.12.2010
Сообщений: 421
16.10.2011, 03:25 #8
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
while(1)
{
    while(!kbhit())
    {   
        //тут перерисовка, проверка не проиграли ли и прочее
    }
    int c=_getch();
    if(c==0||c==24)
        c=_getch();
    switch (c)
    {
        //обрабатываем нажатие
    }
}
для змейки примерно так сойдет
0
alkagolik
Заблокирован
16.10.2011, 05:35 #9
Chelioss, по моему это как раз тот случай когда пренебрегать api не стоит. зачем велик, если есть хуки, которые специально для этих целей и созданы. А если конкретно о змейке, то наверное надо же как-то ограничить время рисования следующего звена, правильно? иначе никому и не хватит просто времени нажать клавишу как игра закончится. А в этом случае без таймера никак не обойтись.
1
Chelioss
180 / 180 / 4
Регистрация: 08.01.2011
Сообщений: 1,133
16.10.2011, 13:41  [ТС] #10
Цитата Сообщение от alkagolik Посмотреть сообщение
Chelioss, по моему это как раз тот случай когда пренебрегать api не стоит. зачем велик, если есть хуки, которые специально для этих целей и созданы. А если конкретно о змейке, то наверное надо же как-то ограничить время рисования следующего звена, правильно? иначе никому и не хватит просто времени нажать клавишу как игра закончится. А в этом случае без таймера никак не обойтись.
Я буду использовать функцию Sleep(). Как только время пройдет, я считываю данные с клавиатуры, двигаю змейку на 1 пункт вперед, потом перерисовываю игровое поле.
0
16.10.2011, 13:41
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
16.10.2011, 13:41
Привет! Вот еще темы с ответами:

Консольная программа - C++
Здравствуйте... Я уже немного научился программировать на C++ и тут наткнулся на консольную программу где был создан вот такой...

Консольная программа... - C++
Здравствуйте! Прошу помочь с написанием консольной программы, которая вводит с консоли значения элементов двумерного массива целых чисел...

Консольная программа закрывается без причины - C++
Консольная программа выводит на консоль текст, записывает текстовые файлы. Не доходит до конца программы, закрывается никаких ошибок не...

Программа ждет ввода числа и в зависимости от количества цифр в числе выдает сообщение об их разрядности: трехзначное, пятизначное и т.д - C++
1) Программа ждет ввода числа и в зависимости от количества цифр в числе выдает сообщение об их разрядности: трехзначное, пятизначное и...


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

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

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