JOYSTICK TEST PROGRAM for QBasic

If you have questions about any aspect of QBasic programming, or would like to help fellow programmers solve their problems, check out this board!

Moderators: Pete, Mods

Post Reply
User avatar
Kiyotewolf
Veteran
Posts: 96
Joined: Tue Apr 01, 2008 11:38 pm

JOYSTICK TEST PROGRAM for QBasic

Post by Kiyotewolf »

[joystick]
# joysticktype -- Type of joystick to emulate: auto (default), none,
# 2axis (supports two joysticks,
# 4axis (supports one joystick, first joystick used),
# 4axis_2 (supports one joystick, second joystick used),
# fcs (Thrustmaster), ch (CH Flightstick).
# none disables joystick emulation.
# auto chooses emulation depending on real joystick(s).
# timed -- enable timed intervals for axis. (false is old style behaviour).
# autofire -- continuously fires as long as you keep the button pressed.
# swap34 -- swap the 3rd and the 4th axis. can be useful for certain joysticks
# buttonwrap -- enable button wrapping at the number of emulated buttons.

joysticktype=2axis
timed=true
autofire=false
swap34=false
buttonwrap=true

Code: Select all

DIM JoyX(8)
DIM JoyY(8)
DIM JoyOldX(2)
DIM JoyOldY(2)
DIM Bttn(7)

SCREEN 0
WIDTH 80, 50
COLOR 7, 0
CLS

JoyX(4) = 160
JoyY(4) = 100
JoyX(5) = 160
JoyY(5) = 100

DO
  COLOR 15, 7
  LOCATE 49, INT((80 - LEN("JOYSTICK TEST")) / 2)
  PRINT "JOYSTICK TEST";
 
  JoyX(0) = STICK(0)
  JoyY(0) = STICK(1)
  JoyX(1) = STICK(2)
  JoyY(1) = STICK(3)
  FOR z = 0 TO 7
    Bttn(z) = STRIG(z)
  NEXT z
  'range 1 to 200
  JoyX(2) = JoyX(0) - 100
  JoyY(2) = JoyY(0) - 100
  IF JoyX(2) <1> 200 THEN JoyX(2) = 200
  IF JoyY(2) <1> 200 THEN JoyY(2) = 200
  JoyX(3) = JoyX(1) - 100
  JoyY(3) = JoyY(1) - 100
  IF JoyX(3) <1> 200 THEN JoyX(3) = 200
  IF JoyY(3) <1> 200 THEN JoyY(3) = 200
'do our centering now.
'() JOYSTICK DEMO PROGRAM
'[] measure joysticks normally.
'[] use centering algo.
ScaleX = 40
ScaleY = 40



TempX = INT((JoyX(2) - 100) * (ScaleX / 100))
TempY = INT((JoyY(2) - 100) * (ScaleY / 100))
JoyX(4) = JoyX(4) + TempX
JoyY(4) = JoyY(4) + TempY

TempX = INT((JoyX(3) - 100) * (ScaleX / 100))
TempY = INT((JoyY(3) - 100) * (ScaleY / 100))
JoyX(5) = JoyX(5) + TempX
JoyY(5) = JoyY(5) + TempY

'JoyX(2), JoyY(2), JoyX(3), JoyY(3) = absolute coordinates
'JoyX(4), JoyY(4), JoyX(5), JoyY(5) = relative centering coordinates
 
  IF JoyX(4) <0> 320 THEN JoyX(4) = 320
  IF JoyY(4) <0> 200 THEN JoyY(4) = 200
 
  IF JoyX(5) <1> 320 THEN JoyX(5) = 320
  IF JoyY(5) <1> 200 THEN JoyY(5) = 200



'[] display graphics
'{} loop until done.
  LOCATE 5, 1
  FOR z = 0 TO 7
    IF Bttn(z) THEN
      COLOR 14, 8
        ELSE
      COLOR 0, 8
    END IF
    PRINT "#:"; LTRIM$(STR$(z)); " ";
  NEXT z
  LOCATE INT(JoyY(4) / 200 * 50) MOD 50 + 1, INT(JoyX(4) / 320 * 80) MOD 80 + 1
  COLOR 9, 0
  PRINT "*";
  LOCATE INT(JoyY(5) / 200 * 50) MOD 50 + 1, INT(JoyX(5) / 320 * 80) MOD 80 + 1
  COLOR 10, 0
  PRINT "*";
  LOCATE INT(JoyY(2) / 200 * 50) MOD 50 + 1, INT(JoyX(2) / 200 * 80) MOD 80 + 1
  COLOR 11, 0
  PRINT "*";
  LOCATE INT(JoyY(3) / 200 * 50) MOD 50 + 1, INT(JoyX(3) / 200 * 80) MOD 80 + 1
  COLOR 12, 0
  PRINT "*";

  n = n + 1
  n = n MOD 50
  IF n = 0 THEN CLS
  JoyOldX(0) = JoyX(2)
  JoyOldY(0) = JoyY(2)
  JoyOldX(1) = JoyX(3)
  JoyOldY(1) = JoyY(3)
  WHILE TIMER - t < .1: WEND
LOOP UNTIL INKEY$ = CHR$(27)

    

First part is what you need to add to your *.conf file in DOSBOX to handle USB joysticks.

Second, the source.



~Kiyote!

Let me know what you think.
Banana phone! We need more lemon pledge. * exploding fist of iced tea! * I see your psycho cat and counter with a duck that has a broken leg, in a cast.
Post Reply