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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 10, средняя оценка - 4.90
Santttal
Сообщений: n/a
#1

Нужна помощь! Как сделать Ожидание нажатие кнопок? - C++

26.02.2009, 11:37. Просмотров 1359. Ответов 4
Метки нет (Все метки)

Нужно написать программу на Си, которая при нажатии "стрелочки влево" начинает с задержкой в 0.5 секунд писать букву "D", а при нажатии "стрелочки вправо" - прекращает. Потом можно опять нажать "стрелочки влево" и "стрелочки вправо". И так далее до того как пользователь не нажмет ESC.

Проблема первая: в том как сделать ожидание этой книпки таким образом, чтобы если кнопка не была нажата, то он ее и не ждал, а возвращал код 0 или что-то подобное. Ведь getch() - ждет нажатие и следовательно буква "D" перестанет писаться.

Как сделать задержку в Си п 0.5секунд. Если в паскале это delay, то как сделать это здесь и какой include-файл надо подключить?

Заранее спасибо всем и если похожая тема уже была, то дайте пожалуйста ссылку.

P.S.
Код "стрелки влево" - 75
Код "стрелки вправо" - 77
Код ESC - 27
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
26.02.2009, 11:37     Нужна помощь! Как сделать Ожидание нажатие кнопок?
Посмотрите здесь:
C++ Как рисовать в консольных приложениях? Нужна помощь
Как создать файл с именем введенным с клавиатуры. нужна помощь. C++
C++ Неправильно срабатывает нажатие кнопок в MessageBox
C++ Откомпилированное приложение не отвечает на нажатие кнопок мыши
C++ Как сделать при повторном нажатие на Label не выполнялось действие?
Нужна помощь с классом C++
C++ Нужна помощь с комментариями.
Нужна помощь Строки. C++
Нужна помощь с циклами C++
C++ Нужна помощь в исправлении
CALLBACK. Нужна помощь C++
C++ Нужна помощь с ассемблером.

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Yurii_74
paladin
279 / 179 / 3
Регистрация: 25.02.2009
Сообщений: 592
26.02.2009, 12:09     Нужна помощь! Как сделать Ожидание нажатие кнопок? #2
Насколько я помню, есть такая функция keypressed. Она должна помочь. Насчет задержки уже забыл. Давно все это было...
Del_Piero_10
Smart is the new Sexy
24 / 24 / 1
Регистрация: 29.12.2008
Сообщений: 109
26.02.2009, 12:25     Нужна помощь! Как сделать Ожидание нажатие кнопок? #3
Задержку конечно можно бестелесным циклом сделать...
Damn
0 / 0 / 0
Регистрация: 09.03.2009
Сообщений: 3
09.03.2009, 14:25     Нужна помощь! Как сделать Ожидание нажатие кнопок? #4
Santttal,
если эта тема еще актуальна то... воть
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <stdio.h>
#include <conio.h>
#include <dos.h>
void main()
{
 char code;
 clrscr();
 getch();
 while (code!=27)
 if (kbhit())
   {
    code=getch();
    if(code==75)
     while(code!=77)
     {
      printf("D");
      sleep(1);
      if (kbhit())
      code=getch();
     }
   }
}
Santttal
Сообщений: n/a
11.03.2009, 15:30     Нужна помощь! Как сделать Ожидание нажатие кнопок? #5
добавляю программу для которой это все делалось. Может кому пригодится:
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
#include <stdio.h>
#include <graph.h>
#include <math.h>
#define X 220
#define Y 50
#define R 145
#define pi 3.1415927
double dl;
void Dvornic_ris(double);
void Dvornic_del(double);
 
void Dvornic_del(double L){
 double x,y;
 _setcolor(0);
 _moveto(X+20,Y+149);
 x=(cos(L))*R+X+20;
 y=-(sin(L))*R+Y+149;
 _lineto(x,y);
 return 0;
 }
void Dvornic_ris(double L){
 double x,y;
 _setcolor(15);
 _moveto(X+20,Y+149);
 x=(cos(L))*R+X+20;
 y=-(sin(L))*R+Y+149;
 _lineto(x,y);
 return 0;
}
 
main(){
 int c1,c2,c3,c4;//dlya ciclov;
 int end,i,start_work,stop;
 char ch;
 double L;
 struct videoconfig vc;
 _getvideoconfig(&vc);
 _setvideomode(16);
 
 //risuem Cabinu;
 _setcolor(2);
 _moveto(X,Y);
 _lineto(X+200,Y);
 _lineto(X+230,Y+150);
 _lineto(X-30,Y+150);
 _lineto(X,Y);
 
 //risuem bamper;
 _rectangle(_GFILLINTERIOR,X-30,Y+150,X+230,Y+200);
 _setcolor(15);
 _ellipse(_GFILLINTERIOR,X+180,Y+160,X+220,Y+190);
 _ellipse(_GFILLINTERIOR,X-20,Y+160,X+20,Y+190);
 
 //risuem kolesa;
 _setcolor(7);
 _rectangle(_GFILLINTERIOR,X+200,Y+201,X+220,Y+230);
 _rectangle(_GFILLINTERIOR,X-20,Y+201,X,Y+230);
 
 //rabota dvornika;
 end=0;
 stop=0;
 L=pi/180*0;
 Dvornic_ris(L);
 start_work=0;
 dl=pi/180;
 while(!end){
 if (start_work){
 for (c1=0;c1<=3000;c1++)
  for (c2=0;c2<=2000;c2++)
    c3++;
 
 if (L<=pi/180*1 && stop) {
  stop=0;
  start_work=0;
  goto a1;
  }
 
 Dvornic_del(L);
 L+=dl;
 Dvornic_ris(L);
 
 if (L>pi/2 || L<pi/180*1) dl*=-1;
 }
 a1:
 if(kbhit()){
  i=getch(ch);
  if (i==27) end=1;
  if (i==80) start_work=1;
  if (i==72 && start_work==1) stop=1;
  }
 }
 return 0;
}

Программа рисует машинку, у которой работает дворник. Начинает при нажатии стрелки вниз, а кончает при нажатии стрелки вверх. Выход по ESC
Yandex
Объявления
11.03.2009, 15:30     Нужна помощь! Как сделать Ожидание нажатие кнопок?
Ответ Создать тему
Опции темы

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