Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
Need a help please!
#1
I can't understand why this keyboard handler doesn't work when DEFINT A-Z is called at the begining of the program...

Code:
'===========================================================================
' Subject: MULTIPLE KEYS                      Date: 03-08-97 (13:07)        
'  Author: Joe Huber, Jr.                     Code: QB, QBasic, PDS        
'  Origin: huberjjr@nicom.com               Packet: KEYBOARD.ABC
'===========================================================================
DECLARE FUNCTION MULTIKEY (KEYNUM)

'MUTIKEY FUNCTION - LETS YOU TRAP SEVERAL KEYS AT ONCE (BETTER THAN INKEY$!!)
'
'USAGE:
'  riable=MULTIKEY(KEYNUM)
'WHERE KEYNUM IS THE KEY YOU WANT TO TRAP
'  riable = 1 IF KEY IS DEPRESSED, 0 IF IT ISN'T
'
'EMAIL ME AT: huberjjr@nicom.com
'
'HAVE FUN!!!


DIM SHARED KEYS(255), SC(255), DU(255)  'ALWAYS NEED THIS!!!

CLS

X = 10: Y = 10
XX = X: YY = Y

DO

'FOR I = 1 TO 255                    '\
' TEST = MULTIKEY(I)                 ' |-TEST LOOP
' LOCATE 1, 1: PRINT TEST; I         ' |
' WHILE INKEY$ = "": WEND            ' | PRESS KEY IN QUESTION UNTIL
'  IF TEST = 1 THEN END              ' | LOOP ENDS. THE SECOND NUMBER IS THE
'NEXT I                              '/  SCAN CODE FOR MULTIKEY

RIGHT = MULTIKEY(75)    ' GET SOME KEYS' STATUSES
LEFT = MULTIKEY(77)
UP = MULTIKEY(72)
DOWN = MULTIKEY(80)
SPACE = MULTIKEY(57)
ESC = MULTIKEY(1)

IF ESC = 1 THEN END    'TEMINATE WHEN ESCAPE IS PRESSED

IF TIMELOOP = 100 THEN             'THIS MOVES YOU AROUND
IF RIGHT = 1 THEN X = X - 1
IF LEFT = 1 THEN X = X + 1        'THE TIMELOOP   RIABLE DELAYS
IF UP = 1 THEN Y = Y - 1          'MOVEMENT WITHOUT SLOWING DOWN
IF DOWN = 1 THEN Y = Y + 1        'INPUT (WITHOUT IT YOU WOULD GO
TIMELOOP = 0                      'WAAAAYYY TOO FAST)
END IF

IF X >= 80 THEN X = 80        'KEEPS YOU FROM GOING OFF THE SCREEN AND
IF X <= 0 THEN X = 1          'MAKING AN ERROR
IF Y >= 23 THEN Y = 23
IF Y <= 0 THEN Y = 1


IF SPACE = 1 THEN                    'CHANGES YOUTR SHAPE WHEN
LOCATE Y, X: PRINT CHR$(94)         'YOU HIT SPACE
ELSE
LOCATE Y, X: PRINT CHR$(127)
END IF

IF XX <> X OR YY <> Y THEN           'UPDATES YOUR POSITION
LOCATE YY, XX: PRINT " "
LOCATE Y, X: PRINT CHR$(127)
END IF


XX = X: YY = Y                     'TELLS ME WHERE I WAS LAST

TIMELOOP = TIMELOOP + 1

LOOP                 'LOOP (DUH...) :)

'THANX TO Eric Carr FOR FIGURING OUT HOW TO TRAP SEVERAL KEYS AT ONCE
'EVERYTHING ELSE WRITTEN BY ME,              

FUNCTION MULTIKEY (KEYNUM)

STATIC FIRSTIME

IF FIRSTIME = 0 THEN
  FOR E = 0 TO 127              '\
  SC(E) = E: DU(E) = 1          '|
  NEXT                          '|-ERIC CARR'S CODE--------------------\
  FOR E = 128 TO 255            '|                                     |
  SC(E) = E - 128: DU(E) = 0    '|                                     |
  NEXT                          '/                                     |
  FIRSTIME = -1                 '                                      |
END IF                         '                                      |
                                '                                      |
I$ = INKEY$       ' So the keyb buffer don't get full     \routine/ \ |
I = INP(&H60)     ' Get keyboard scan code from port 60h   \lines/  |-/
OUT &H61, INP(&H61) OR &H82: OUT &H20, &H20       '         \!!!/   |
KEYS(SC(I)) = DU(I) ' This says what keys are pressed        \!/    /

MULTIKEY = KEYS(KEYNUM)


END FUNCTION
EEL THE BEAT OF EURODANCE!!! Smile
Reply
#2
Works ok for me. If you are using the QB IDE, make sure that the function MULTIKEY has DEFINT A-Z above it also.
Reply
#3
DEFINT A-Z, makes all non-specified variables in your current window thing an integer.

Mabey 1 variable that's not specified (ie. var%, var!, var&, var$) must be another type of variable than an integer to make it work....

...just a thought but I'm no where as experianced as Plasma so you should try his advice first.....of course I wasn't much help I guess....
i]"But...it was so beautifully done"[/i]
Reply
#4
I figured what's wrong, DEFINT A-Z must be before the FUNCTION declaration, at the begining of the program... Smile
EEL THE BEAT OF EURODANCE!!! Smile
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)