Same idea. but I added a positional mouse driver

by Pete

DECLARE SUB BOARDMAP (X%, Y%)
DECLARE SUB KEYBOARD (B$)
DECLARE SUB MDRIVER (EX%, B$)
TYPE RegType
AX AS INTEGER
BX AS INTEGER
CX AS INTEGER
DX AS INTEGER
BP AS INTEGER
SI AS INTEGER
DI AS INTEGER
FLAGS AS INTEGER
DS AS INTEGER
ES AS INTEGER
END TYPE

DIM SHARED MOUSE$
DIM SHARED Registers AS RegType
DIM SHARED LB%, RB%, MB%, DX%, CY%
DIM SHARED LM%, TM%

COLOR 7, 1: CLS
LM% = 3: TM% = 3: LEVEL% = 1
LOCATE TM%, LM%
FOR H = 1 TO 8
FOR J = 1 TO 2
FOR I = 1 TO 8
IF H / 2 = H \ 2 THEN
IF I / 2 = I \ 2 THEN COLOR 0, 7 ELSE COLOR 7, 0
ELSE
IF I / 2 = I \ 2 THEN COLOR 7, 0 ELSE COLOR 0, 7
END IF
PRINT " ";
NEXT I
IF H = 8 AND J = 2 THEN ELSE PRINT : LOCATE , LM%
NEXT J
NEXT H
FOR J = 1 TO 2
IF J = 1 THEN COLOR 7, 1 ELSE COLOR 0, 6: LEVEL% = 15

RESTORE SETUP
X = 1
FOR I = 1 TO 8
READ A$
LOCATE TM% + LEVEL%, X + LM%: PRINT " " + A$ + " ";
X = X + 5
NEXT I
X = 1
FOR I = 1 TO 8
IF J = 1 THEN LOCATE TM% + LEVEL% + 2, X + LM% ELSE LOCATE TM% + LEVEL% - 2, X + LM%
PRINT " P ";
X = X + 5
NEXT I
NEXT J

REM OPTIONAL BORDER
'COLOR 7, 4: REM RED (A BIT TOO MUCH?)
COLOR 7, 0
LOCATE TM% - 1, LM% - 1
PRINT CHR$(218); STRING$(40, 196); CHR$(191)
LOCATE , LM% - 1
FOR I = 1 TO 17
PRINT CHR$(179)
LOCATE , LM% - 1
NEXT I
LOCATE TM%, LM% - 1
FOR I = 1 TO 17
LOCATE , 40 + LM%
PRINT CHR$(179)
NEXT I
LOCATE TM% - 2 + 18, LM% - 1
PRINT CHR$(192); STRING$(40, 196); CHR$(217)

REM NUMBERING
LOCATE TM% + 17: COLOR 7, 1
LOCATE , LM% + 2
FOR I = 1 TO 8
PRINT LCASE$(CHR$(64 + I)) + SPACE$(4);
NEXT I

LOCATE TM% + 1, 40 + LM% + 2
FOR I = 1 TO 8
PRINT CHR$(57 - I);
LOCATE CSRLIN + 2, 40 + LM% + 2
NEXT I

LOCATE 25, 1: PRINT "Press Esc to end";

DO
CALL KEYBOARD(B$)
IF B$ = CHR$(27) THEN EXIT DO
LOOP

SYSTEM

SETUP:
DATA R,N,B,K,Q,B,N,R

SUB BOARDMAP (X%, Y%)
XX = CSRLIN: YY = POS(1)
LOCATE 25, 55: PRINT "Mouse Position: "; : PRINT SPACE$(80 - POS(1));
REM MAP FORMULA

IF (X% - TM%) >= 0 AND (X% - TM%) < 16 AND Y% >= LM% AND Y% - LM% < 40 THEN
NUMBERY$ = LTRIM$(STR$(8 - INT((X% - TM% + 1) / 2.1)))
ALPHAX$ = LCASE$(CHR$(65 + INT((Y% - LM% + 1) / 5.1)))
END IF

LOCATE 25, 72: PRINT ALPHAX$; " "; NUMBERY$;
LOCATE XX, YY
END SUB

SUB KEYBOARD (B$)
EX% = 1: CALL MDRIVER(EX%, B$)
DO
B$ = INKEY$
EX% = 2: CALL MDRIVER(EX%, B$)
LOOP UNTIL B$ <> ""
EX% = -1: CALL MDRIVER(EX%, B$)
END SUB

SUB MDRIVER (EX%, B$)
STATIC MOUSEACT%, X%, Y%
OLDX% = X%: OLDY% = Y%

REM INITIATE MOUSE
IF MOUSEACT% = 0 THEN
Registers.AX = 0: GOSUB CALLI
MOUSEACT% = 1
END IF

IF EX% = -1 THEN
REM HIDES MOUSE IF A KEY WAS PRESSED FOR NEXT MOUSE LOOP
LB1 = 0
Registers.AX = 2: GOSUB CALLI
EX% = 2
EXIT SUB
END IF

IF EX% = 1 THEN Registers.AX = 1: GOSUB CALLI

Registers.AX = 3: GOSUB CALLI

REM MOUSE LOCATION (USES X% AND Y% TO CONVERT TO 25 * 80 SCREEN SIZE)
DX% = Registers.DX%
CX% = Registers.CX%
X% = DX% \ 8 + 1: Y% = CX% \ 8 + 1

IF X% <> OLDX% OR Y% <> OLDY% THEN CALL BOARDMAP(X%, Y%)

REM MOUSE BUTTONS
LB% = Registers.BX% AND 1
RB% = (Registers.BX% AND 2) \ 2
MB% = (Registers.BX% AND 4) \ 4

IF LB% <> 0 THEN
SOUND 1000, 1: REM LEFT MOUSE CLICK
REM PLACE OTHER MOUSE FEATURES HERE SUCH AS...
REM END PROGRAM IF TEXT AREA IS TOUCHED.
IF SCREEN(X%, Y%, 0) <> 32 THEN B$ = CHR$(27)
END IF

REM DELAY TO SMOOTH THINGS OUT.
IF LB1 <> -1 AND LB% <> 0 THEN
DO
REGISTER.AX% = 3: GOSUB CALLI
LB% = Registers.BX% AND 1
RB% = (Registers.BX% AND 2) \ 2
MB% = (Registers.BX% AND 4) \ 4
IF LB% = 0 THEN EXIT DO
LOOP
END IF

EXIT SUB

CALLI:
CALL INTERRUPT(&H33, Registers, Registers)
RETURN

END SUB

Posted on Dec 19, 2005, 2:34 PM
from IP address 68.6.85.9

Respond to this message   

Return to Index


Response TitleAuthor and Date
Pawns do legal moves - Mouse driver. Includes En Passant.Pete on Dec 19
 Needed to exchange white/black pieces. I posted a finished phase 1 here URL:Pete on Dec 20