1 / 1 / 0
Регистрация: 02.11.2014
Сообщений: 57
1

Не совпадают коды клавиш

14.06.2016, 20:36. Показов 1868. Ответов 6
Метки нет (Все метки)

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
switch (key)
    {
        case 101 : 
            dir=0;
            break;
        case 102 :
            dir=1;
            break;
        case 100 :
            dir=2;
            break;
        case 103 :
            dir=3;
            break;
    }

Почему 100, 101, 102, 103 работает (стрелочки на клавиатуре)? Ведь коды этих клавиш 37,38, 39, 40
__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
14.06.2016, 20:36
Ответы с готовыми решениями:

Коды клавиш в консольном приложении
Добрый вечер! Возможно ли узнать код клавиши, которая была нажата. Просто при обработке событий с...

Коды специальных клавиш клавиатуры
if(я нажимаю "F1") { cout << "Hello " << endl; }

Одинаковые коды клавиш-стрелочек
Есть задача написать меню . В консольном приложении. Состоит из 6ти пунктов(строчек) Выбор строчи...

Коды клавиш и обработка событий клавиатуры в консоли
Многие часто спрашивают один и тот же вопрос по поводу обработки событий нажатия клавиш в консоли....

6
7166 / 6141 / 2802
Регистрация: 14.04.2014
Сообщений: 26,462
14.06.2016, 20:57 2
Откуда ты взял, что у них такие коды?
0
Модератор
Эксперт по электронике
8701 / 6498 / 880
Регистрация: 14.02.2011
Сообщений: 22,734
14.06.2016, 21:00 3
Цитата Сообщение от IramKenZo Посмотреть сообщение
Ведь коды этих клавиш 37,38, 39, 40
откуда данные?
отсюда http://api.farmanager.com/ru/w... odes.html?
но там ведь ясно написано виртуальные коды и для винды
а здесь скорее всего скан-коды
ОС неплохо бы узнать, и как энтот key добывается
0
1 / 1 / 0
Регистрация: 02.11.2014
Сообщений: 57
15.06.2016, 19:22  [ТС] 4
функция KeyboardEvent
У меня(на винде) змейка управляется на эти клавиши\коды
И я не могу понять почему

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
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
#include <time.h>
#include <stdlib.h>
#include  <GL/glut.h>
 
int N=30,M=20;
int Scale=25;
 
int w = Scale*N;
int h = Scale*M;
 
int dir,num=4;
 
struct 
{ int x;
  int y;}  s[100];
 
class Fructs
{ 
public:
    int x,y;
 
    void New()
    {  x=rand() % N;
        y=rand() % M;   }
    
    void DrawApple()
   {   glColor3f(0.0,1.0,0.0);
       glRectf(x*Scale,y*Scale,(x+1)*Scale,(y+1)*Scale); }
 
} m[10];
 
 void DrawSnake()
 {  
  glColor3f(0.0,0.0,1.0);
  for (int i=0;i<num;i++)
    {glRectf(s[i].x*Scale, s[i].y*Scale, (s[i].x+0.9)*Scale, (s[i].y+0.9)*Scale); }
 }
 
 void Tick()
 {
    for (int i=num;i>0;--i)
     {s[i].x=s[i-1].x;
     s[i].y=s[i-1].y;}
 
    if (dir==0) s[0].y+=1;      
    if (dir==1) s[0].x-=1;        
    if (dir==2) s[0].x+=1;         
    if (dir==3) s[0].y-=1;         
 
  for (int i=0;i<10;i++)
    if ((s[0].x==m[i].x) && (s[0].y==m[i].y)) 
      {num++; m[i].New();}
 
  if (s[0].x>N) dir=1;  if (s[0].x<0) dir=2;
  if (s[0].y>M) dir=3;  if (s[0].y<0) dir=0;
 
 for (int i=1;i<num;i++)
  if (s[0].x==s[i].x && s[0].y==s[i].y)  num=i;
 }
 
 
 
void DrawField()
  {
   glColor3f(0.0,0.7,0.0);
   glBegin(GL_LINES);
    for (int i=0; i<w; i+=Scale) 
      {glVertex2f(i,0); glVertex2f(i,h);}
    for (int j=0; j<h; j+=Scale)  
      {glVertex2f(0,j); glVertex2f(w,j);}
    glEnd();
}
 
 
void display() {
 
     glClear(GL_COLOR_BUFFER_BIT);
 
    DrawField();
 
    DrawSnake(); 
 
   for (int i=0;i<10;i++)
     m[i].DrawApple();
 
   glFlush();
   glutSwapBuffers();
}
 
void KeyboardEvent(int key, int a, int b)
{   
    switch(key)
    {
        case 101 :  dir=0; break;
         case 102:   dir=2; break;
        case 100 :  dir=1; break;
        case 103 :  dir=3; break;
     }
}
 
void timer(int = 0)
{
  display();
 
  Tick();
       
 glutTimerFunc(50,timer,0);
}
 
int main(int argc, char **argv) {
 
    srand(time(0));
    
    for (int i=0;i<10;i++)
        m[i].New();
    
 
     s[i].x=10;
     s[i].y=10;
 
glutInit(&argc, argv);
glutInitDisplayMode (GLUT_SINGLE | GLUT_RGB );
glutInitWindowSize (w, h);
glutCreateWindow ("Test"); 
glClearColor(1.0,1.0,0.6,1.0);  //цвет фона
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluOrtho2D(0,w,0,h);
 
glutDisplayFunc (display);
glutSpecialFunc(KeyboardEvent);
glutTimerFunc(50,timer,0);
 
glutMainLoop();
}
Добавлено через 21 час 14 минут
ValeryS, скан коды тоже не подходят
0
7166 / 6141 / 2802
Регистрация: 14.04.2014
Сообщений: 26,462
15.06.2016, 19:29 5
Описание GLUT читай. Там для специальных клавиш определены свои константы, только у тебя они почему-то записаны числами, а не именами: https://www.opengl.org/resourc... ode54.html
1
1 / 1 / 0
Регистрация: 02.11.2014
Сообщений: 57
15.06.2016, 20:10  [ТС] 6
nmcf, А почему тогда работает? Меня вот это интересует
0
Модератор
Эксперт по электронике
8701 / 6498 / 880
Регистрация: 14.02.2011
Сообщений: 22,734
15.06.2016, 20:55 7
Лучший ответ Сообщение было отмечено ValeryS как решение

Решение

Цитата Сообщение от IramKenZo Посмотреть сообщение
А почему тогда работает?
наверно потому, что должно
вот твои констаты
C
1
2
3
4
GLUT_KEY_LEFT       = 0x0064
  GLUT_KEY_UP         = 0x0065
  GLUT_KEY_RIGHT      = 0x0066
  GLUT_KEY_DOWN       = 0x0067
отсюда https://docs.omniref.com/ruby/... HT#line=52
что в десятичном представлении 100 101 102 103
Цитата Сообщение от IramKenZo Посмотреть сообщение
C
1
2
3
4
5
6
7
8
9
10
11
12
case 101 : 
 dir=0;
 break;
 case 102 :
 dir=1;
 break;
case 100 :
 dir=2;
 break;
case 103 :
  dir=3;
  break
неправда ли, похоже
1
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
15.06.2016, 20:55
Помогаю со студенческими работами здесь

Не совпадают hex-коды одних и тех же байтов
Почему не совпадают шестнадцатеричные представления байтов в моей программке с представлениями в...

коды клавиш
отличаются ли коды клавиш PgUp и PgDn на ноутбуке и обычной клавиатуре? по-моему, на ноутбуке - это...

Коды клавиш
Код клавиши: Label1.Caption := Label1.Caption+ IntToStr(Key); Не могу вспомнить как не код...

Коды клавиш
Всем привет! Помогите, пожалуйста... Коды клавиши F1 и ';' совпадают! Как их отличать? ...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru