Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 28.02.2012, 22:38   #1
Kamilius
Пользователь
 
Регистрация: 28.02.2012
Сообщений: 23
Восклицание Привязка функций к кнопкам на клавиатуре

Доброго времени суток. Пишу игру по типу "лабиринт" в С++ и впервые появилась нужда в привязке функций к клавиатуре, а именно ходу соответственно вверх, влево, вниз и вправо.
Задание задали сегодня, а на паре не был, поскольку болею.
1. Какая библиотека нужна для использования клавиатуры (а именно стрелочек в частности).
2. Как привязывать к кнопкам клавиатуры функции?

пользуюсь Microsoft Visual Studio 2008.

Заранее благодарен.

P.s.: пробовал искать в интернете или пользоваться поиском по форуму, но, судя по всему - не знаю как правильно спросить именно об этом гуглу либо всё тот же форум.
Kamilius вне форума Ответить с цитированием
Старый 28.02.2012, 22:58   #2
EUGY
Форумчанин
 
Аватар для EUGY
 
Регистрация: 11.07.2010
Сообщений: 914
По умолчанию

Если у Вас windows-приложение, то события клавиатуры ловятся в процедуре окна.
EUGY вне форума Ответить с цитированием
Старый 28.02.2012, 23:04   #3
Kamilius
Пользователь
 
Регистрация: 28.02.2012
Сообщений: 23
По умолчанию

Цитата:
Сообщение от EUGY Посмотреть сообщение
Если у Вас windows-приложение, то события клавиатуры ловятся в процедуре окна.
Забыл указать, что приложение консольное.
Kamilius вне форума Ответить с цитированием
Старый 28.02.2012, 23:10   #4
EUGY
Форумчанин
 
Аватар для EUGY
 
Регистрация: 11.07.2010
Сообщений: 914
По умолчанию

Тогда _kbhit() в <conio.h>
EUGY вне форума Ответить с цитированием
Старый 28.02.2012, 23:15   #5
Kamilius
Пользователь
 
Регистрация: 28.02.2012
Сообщений: 23
По умолчанию

Цитата:
Сообщение от EUGY Посмотреть сообщение
Тогда _kbhit() в <conio.h>
Если можно - на примере...
Название функции "движение вправо" - move_right()
Значит как должна выглядеть команда привязке к правой стрелочке?

#include <conio.h>
_kbhit(right_arrow)=move_right() // ?

+ как дать запрос на нажатие клавиши?..
На буквенный \числовой ввод - cin >> ....
Как дать на ожидание нажатия клавиши?
Kamilius вне форума Ответить с цитированием
Старый 28.02.2012, 23:33   #6
EUGY
Форумчанин
 
Аватар для EUGY
 
Регистрация: 11.07.2010
Сообщений: 914
По умолчанию

sorry, сразу не въехал.
Надо в цикле
Код:
while(1)
{
	int cod = _getch();
	switch( cod)
	{
	case 77:
		move_right();
		break;
	}
	
}
EUGY вне форума Ответить с цитированием
Старый 28.02.2012, 23:58   #7
Kamilius
Пользователь
 
Регистрация: 28.02.2012
Сообщений: 23
По умолчанию

Цитата:
Сообщение от EUGY Посмотреть сообщение
sorry, сразу не въехал.
Надо в цикле
Код:
while(1)
{
	int cod = _getch();
	switch( cod)
	{
	case 77:
		move_right();
		break;
	}
	
}
Несколько вопросов:
- почему у while параметр 1?
- что значит команда _getch()?
- почему case - 77? Номер стрелочки по ASCII?.. Если так, то где просмотреть полный список? Если ASCII, то номер правой стрелочки, вроде бы 39?

P.s.: игру дописал полностью минут 15 назад и привязал движение к вводу с клавиатуры букв u, d, l, r. Осталось заменить этот ввод - стрелочками.

Последний раз редактировалось Kamilius; 29.02.2012 в 00:08.
Kamilius вне форума Ответить с цитированием
Старый 29.02.2012, 00:27   #8
Kamilius
Пользователь
 
Регистрация: 28.02.2012
Сообщений: 23
По умолчанию

Во всем разобрался, спасибо
Kamilius вне форума Ответить с цитированием
Старый 29.02.2012, 00:33   #9
EUGY
Форумчанин
 
Аватар для EUGY
 
Регистрация: 11.07.2010
Сообщений: 914
По умолчанию

Цитата:
почему case - 77? Номер стрелочки по ASCII?..
В буфер при нажатии стрелок идет запись двух значений:
1) 0xE0
2) hardware scancode
EUGY вне форума Ответить с цитированием
Старый 29.02.2012, 17:59   #10
Kamilius
Пользователь
 
Регистрация: 28.02.2012
Сообщений: 23
По умолчанию

Спасибо, в моем случае это выглядело так:
Код:
for (;current_poss!=3;)
{
	cout << endl << endl; // двойной отступ от верхнего края экрана
	draw_map(); // прорисовка карты заготовленной ранее карты
	int move= _getch(); //привязка "move" к нажатию определенной далее кнопки
	if (move==72) // <- индекс обозначающий стрелочку "вверх"
		move_up(); //функция движения вверх
	else if (move==77)
		move_right(); //функция движения вправо
	else if (move==80)
		move_down(); //функция движения вниз
	else if (move==75)
		move_left(); //функция движения влево
}
Kamilius вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Delphi: аппроксимация функций методом базиса из финитных функций Denna Помощь студентам 1 12.03.2012 19:23
Delphi. Посимвольное раскидывание string'а по кнопкам. Риндера Помощь студентам 13 08.11.2010 17:30
Вопрос по кнопкам... Han_Nik Помощь студентам 4 19.05.2010 20:41
переключение раскладки клавиатуры по кнопкам Alt и Shift Slash3 Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 4 10.03.2009 13:08
пара вопросов по кнопкам grey Помощь студентам 4 11.11.2007 19:09