Hi, How can I find out which key the user pressed?
I'm writing the game SNAKE in C++ as one of my first games in C++ and need to know how I can get the key pressed by the user.
Thanks In Advance!!!
Printable View
Hi, How can I find out which key the user pressed?
I'm writing the game SNAKE in C++ as one of my first games in C++ and need to know how I can get the key pressed by the user.
Thanks In Advance!!!
Windows or Console?
If you are making a CONSOLE APP you can use the getch function. It returns the character read.
Code:Example
/* GETCH.C: This program reads characters from
* the keyboard until it receives a 'Y' or 'y'.
*/
#include <conio.h>
#include <ctype.h>
void main( void )
{
int ch;
_cputs( "Type 'Y' when finished typing keys: " );
do
{
ch = _getch();
ch = toupper( ch );
} while( ch != 'Y' );
_putch( ch );
_putch( '\r' ); /* Carriage return */
_putch( '\n' ); /* Line feed */
}
Output
Type 'Y' when finished typing keys: Y
You can also use the GetAsyncKeyState API in a windows app
Quote:
GetAsyncKeyState
The GetAsyncKeyState function determines whether a key is up or down at the time the function is called, and whether the key was pressed after a previous call to GetAsyncKeyState.
SHORT GetAsyncKeyState(
int vKey // virtual-key code
);
Parameters
vKey
Specifies one of 256 possible virtual-key codes. For more information, see Virtual-Key Codes.
Windows NT: You can use left- and right-distinguishing constants to specify certain keys. See the Remarks section for further information.
Return Values
If the function succeeds, the return value specifies whether the key was pressed since the last call to GetAsyncKeyState, and whether the key is currently up or down. If the most significant bit is set, the key is down, and if the least significant bit is set, the key was pressed after the previous call to GetAsyncKeyState. The return value is zero if a window in another thread or process currently has the keyboard focus.
Windows 95: Windows 95 does not support the left- and right-distinguishing constants. If you call GetAsyncKeyState with these constants, the return value is zero.
Remarks
The GetAsyncKeyState function works with mouse buttons. However, it checks on the state of the physical mouse buttons, not on the logical mouse buttons that the physical buttons are mapped to. For example, the call GetAsyncKeyState(VK_LBUTTON) always returns the state of the left physical mouse button, regardless of whether it is mapped to the left or right logical mouse button. You can determine the system's current mapping of physical mouse buttons to logical mouse buttons by calling
GetSystemMetrics(SM_SWAPBUTTON)
which returns TRUE if the mouse buttons have been swapped.
You can use the virtual-key code constants VK_SHIFT, VK_CONTROL, and VK_MENU as values for the vKey parameter. This gives the state of the shift, ctrl, or alt keys without distinguishing between left and right.
Windows NT: You can use the following virtual-key code constants as values for vKey to distinguish between the left and right instances of those keys.
Code Meaning
VK_LSHIFT VK_RSHIFT
VK_LCONTROL VK_RCONTROL
VK_LMENU VK_RMENU
These left- and right-distinguishing constants are only available when you call the GetKeyboardState, SetKeyboardState, GetAsyncKeyState, GetKeyState, and MapVirtualKey functions.
Windows CE: The GetAsyncKeyState function supports the left and right virtual key constants, so you can determine whether the left key or the right key was pressed. These constants are VK_LCONTROL, VK_RCONTROL, VK_LMENU, VK_RMENU, VK_LSHIFT, and VK_RSHIFT.
The least significant bit of the return value is not valid in Windows CE, and should be ignored.
GetAsyncKeyState will return the current key state even if a window in another thread or process currently has the keyboard focus.
You can also use the VK_LBUTTON virtual-key code constant to determine the state of the stylus tip, (up/down), on the touch-screen.
Console at this stage, as I've just recently started C++. I just need to be able to find out if one of the arrow keys are pressed in order to turn the snake into the appropriate direction.
Thanks!!!