Code: (Select All)
D = _DEVICES 'Find the number of devices on someone's system
'1 is the keyboard
'2 is the mouse
'3 is the joystick
'unless someone has a strange setup with multiple mice/keyboards/ect...
'In that case, you can use _DEVICE$(i) to look for "KEYBOARD", "MOUSE", "JOYSTICK", if necessary.
'I've never actually found it necessary, but I figure it's worth mentioning, just in case...
DIM Button(_LASTBUTTON(3)) ' number of buttons on the joystick
DIM Axis(_LASTAXIS(3)) 'number of axis on the joystick
DO
DO
'This following little segment of code gets the joystick status for us
'The reason this is inside a DO...LOOP structure as I've created it,
'is so that my joystick's axis won't generate any form of lag for
'my program as I scroll them around to generate positive/negative values.
IF _DEVICEINPUT = 3 THEN 'this says we only care about joystick input values
FOR i = 1 TO _LASTBUTTON(3) 'this is a loop to check all the buttons
IF _BUTTONCHANGE(i) THEN Button(i) = NOT Button(i) 'and this changes my button array to indicate if a button is up or down currently.
NEXT
FOR i = 1 TO _LASTAXIS(3) 'this loop checks all my axis
'I like to give a little "jiggle" resistance to my controls, as I have an old joystick
'which is prone to always give minute values and never really center on true 0.
'A value of 1 means my axis is pushed fully in one direction.
'A value greater than 0.1 means it's been partially pushed in a direction (such as at a 45 degree diagional angle).
'A value of less than 0.1 means we count it as being centered. (As if it was 0.)
IF ABS(_AXIS(i)) <= 1 AND ABS(_AXIS(i)) >= .1 THEN Axis(i) = _AXIS(i) ELSE Axis(i) = 0
NEXT
ELSE EXIT DO
END IF
LOOP
'And below here is just the simple display routine which displays our values.
'If this was for a game, I'd choose something like Axis(1) = -1 for a left arrow style input,
'Axis(1) = 1 for a right arrow style input, rather than just using _KEYHIT or INKEY$.
CLS
FOR i = 1 TO _LASTBUTTON(3) 'A loop for each button
PRINT "BUTTON "; i; ": "; Button(i) 'display their status to the screen
NEXT
FOR i = 1 TO _LASTAXIS(3) 'A loop for each axis
PRINT "Axis "; i; ": "; Axis(i) 'display their status to the screen
NEXT
_LIMIT 30
LOOP UNTIL _KEYHIT = 27 'ESCAPE to quit
SYSTEM 'And that's all it is to it!