1 ! !========================================================================& ! PROGRAM NAME: HQ || REVISED & ! WRITTEN BY: || AUTHORIZED BY: & ! DATE: || DATE: & ! || & ! DEBUGGED BY: || REVISED BY: & ! DATE: || DATE: & ! || & ! CERTIFIED BY: || CERTIFIED BY: & ! DATE: || DATE: & ! || & ! REVISION: # 001 || REVISION: & !======================================================================== ! *************** LABELS ROUTINE **************************** BNK$ = ESC+"[5m" !BLINK C$ = "'"+STRING$(78,67) !CENTERING STRING FOR PRINT USING C2$ = "'"+STRING$(39,67) !STATEMENTS CLL$ = ESC+"[K" !CLEAR FROM CURSOR TO EOL CLS$ = ESC+"[H"+ESC+"[J" !CLEAR FROM TOP DOWN CLS2$ = ESC+"[2H"+ESC+"[J" !CLEAR FROM LINE 2 DOWN CLS3$ = ESC+"[3H"+ESC+"[J" !CLEAR FROM LINE 3 DOWN CLS5$ = ESC+"[5H"+ESC+"[J" !CLEAR FROM LINE 5 DOWN CR$ = CHR$(13) !CARRAGE RETURN CRLF$ = CHR$(13)+CHR$(10) !CARRAGE RETURN & LINE FEED GON$ = ESC+"(0" !TURN GRAPHICS ON GOFF$ = ESC+"(B" !TURN GRAPHICS OFF INV$ = ESC+"[7m" !INVERSE VIDEO L2$=ESC+"[2H" !POSITION CURSOR ON LINE 2 L3$ = ESC+"[3H" !POSITION CURSOR ON LINE 3 L5$ = ESC+"[5H" !POSITION CURSOR ON LINE 5 L8$ = ESC+"[8H" !POSITION CURSOR ON LINE 8 L23$ = ESC+"[23H" !POSITION CURSOR ON LINE 23 LRG$ = ESC+"#6" !PRINT IN DOUBLE WIDTH CHAR'S. NRM$ = ESC+"[m" !NORMAL VIDEO RS$ = ESC+"8" !RESTORE CURSOR POSITION SV$ = ESC+"7" !SAVE CURSOR POSITION LTOP$ = ESC+"#3" !PRINT DOUBLE HEIGHT TEXT TOP LBOT$ = ESC+"#4" !PRINT DOUBLE HEIGHT TEXT BOTTOM DIM B(70),T(9,9) ! if a password to run program is disired then remove the ! ! PRINT CLS$;L5$; ! PRINT "ENTER THE PASSWORD "; ! Y% = NOECHO(0) ! LINPUT PASWRD$ ! Y% = ECHO(0) ! IF EDIT$(PASWRD$,32) <> "NONO" THEN ! GOTO 2000 ! END IF ! ***************** PROGRAM BANNER ROUTINE ***************************** PRINT CLS$;L5$; PRINT INV$;LTOP$; " HIGH IQ ";NRM$ PRINT INV$;LBOT$; " HIGH IQ ";NRM$ PRINT GOFF$;NRM$ PRINT PRINT SLEEP 4 160 GOSUB 1000 240 ! *** SET UP BOARD 250 FOR R=1 TO 9 260 FOR C=1 TO 9 270 IF (R-4)*(R-5)*(R-6)=0 THEN GOTO 310 280 IF (C-4)*(C-5)*(C-6)=0 THEN GOTO 310 290 T(R,C)=-5 300 GOTO 330 310 IF (R-1)*(C-1)*(R-9)*(C-9)=0 THEN GOTO 290 320 T(R,C)=5 330 NEXT C 340 NEXT R 350 T(5,5)=0\ GOSUB 800 360 ! *** INPUT MOVE AND CHECK ON LEGALITY 370 FOR W=1 TO 33 380 READ M 390 DATA 13,14,15,22,23,24,29,30,31,32,33,34,35,38,39,40,41 400 DATA 42,43,44,47,48,49,50,51,52,53,58,59,60,67,68,69 410 B(M)=-7\ NEXT W 420 B(41)=-3 430 PRINT L23$;CLL$;"MOVE WHICH PIECE "; \ GOSUB 600 440 IF B(Z)=-7 THEN GOTO 460 450 PRINT L23$;CLL$;"ILLEGAL MOVE, TRY AGAIN..."\ GOTO 430 460 PRINT L23$;CLL$;"TO WHERE "; \ GOSUB 700 470 IF B(P)=0 THEN GOTO 450 480 IF B(P)=-7 THEN GOTO 450 490 IF Z=P THEN GOTO 430 500 IF ((Z+P)/2)=INT((Z+P)/2) THEN GOTO 520 510 GOTO 450 520 IF (ABS(Z-P)-2)*(ABS(Z-P)-18)<>0 THEN GOTO 450 530 GOSUB 1100 540 GOSUB 800 550 GOSUB 1500 560 GOTO 430 600 PRINT SV$; 605 Z1$ = INKEY$(0%,WAIT) \ IF Z1$ = "" THEN GOTO 605 607 IF Z1$ < "0" OR Z1$ > "9" THEN GOTO 605 610 PRINT RS$;Z1$;SV$; 615 Z2$ = INKEY$(0%,WAIT) \ IF Z2$ = "" THEN GOTO 605 617 IF Z2$ < "0" OR Z2$ > "9" THEN GOTO 615 620 PRINT RS$;Z2$; 625 Z$ = Z1$ + Z2$ 630 Z = VAL%(Z$) 635 RETURN 700 PRINT SV$; 705 P1$ = INKEY$(0%,WAIT) \ IF P1$ = "" THEN GOTO 705 707 IF P1$ < "0" OR P1$ > "9" THEN GOTO 705 710 PRINT RS$;P1$;SV$; 715 P2$ = INKEY$(0%,WAIT) \ IF P2$ = "" THEN GOTO 705 717 IF P2$ < "0" OR P2$ > "9" THEN GOTO 715 720 PRINT RS$;P2$; 725 P$ = P1$ + P2$ 730 P = VAL%(P$) 735 RETURN 800 ! *** PRINT PEGS 805 FOR X=1 TO 9 810 FOR Y=1 TO 9 815 ROW$ = STR$(X*2+2) 820 COL$ = STR$(Y*4+14) 825 IF (X-1)*(X-9)*(Y-1)*(Y-9)=0 THEN GOTO 840 830 IF (X-4)*(X-5)*(X-6)=0 THEN GOTO 845 835 IF (Y-4)*(Y-5)*(Y-6)=0 THEN GOTO 845 840 GOTO 865 845 IF T(X,Y)<>5 THEN GOTO 860 850 P$ = "*" \ GOSUB 1950 855 GOTO 865 860 P$ = " " \ GOSUB 1950 865 NEXT Y 870 NEXT X 875 RETURN 1000 ! *** PRINT BOARD 1005 PRINT CLS$;L5$;GON$; 1010 PRINT " l13qw14qw15qk" 1015 PRINT " x x x x" 1020 PRINT " t22qn23qn24qu" 1025 PRINT " x x x x" 1030 PRINT " l29qw30qn31qn32qn33qn34qw35qk" 1035 PRINT " x x x x x x x x" 1040 PRINT " t38qn39qn40qn41qn42qn43qn44qu" 1045 PRINT " x x x x x x x x" 1050 PRINT " t47qn48qn49qn50qn51qn52qn53qu" 1055 PRINT " x x x x x x x x" 1060 PRINT " mqqqvqqqn58qn59qn60qnqqqvqqqj" 1065 PRINT " x x x x" 1070 PRINT " t67qn68qn69qu" 1075 PRINT " x x x x" 1080 PRINT " mqqqvqqqvqqqj" 1085 PRINT GOFF$; \ RETURN 1100 ! *** UPDATE BOARD 1110 C=1\FOR X=1 TO 9 1120 FOR Y=1 TO 9 1130 IF C<>Z THEN GOTO 1320 1140 IF C+2<>P THEN GOTO 1190 1150 IF T(X,Y+1)=0 THEN GOTO 450 1160 T(X,Y+2)=5 1170 T(X,Y+1)=0\ B(C+1)=-3 1180 GOTO 1300 1190 IF C+18<>P THEN GOTO 1230 1200 IF T(X+1,Y)=0 THEN GOTO 450 1210 T(X+2,Y)=5\ T(X+1,Y)=0\ B(C+9)=-3 1220 GOTO 1300 1230 IF C-2<>P THEN GOTO 1270 1240 IF T(X,Y-1)=0 THEN GOTO 450 1250 T(X,Y-2)=5\ T(X,Y-1)=0\ B(C-1)=-3 1260 GOTO 1300 1270 IF C-18<>P THEN GOTO 1320 1280 IF T(X-1,Y)=0 THEN GOTO 450 1290 T(X-2,Y)=5\ T(X-1,Y)=0\ B(C-9)=-3 1300 B(Z)=-3\ B(P)=-7 1310 T(X,Y)=0\ GOTO 1350 1320 C=C+1 1330 NEXT Y 1340 NEXT X 1350 RETURN 1500 ! *** CHECK IF IT IS OVER 1510 F=0 1520 FOR R=2 TO 8 1530 FOR C=2 TO 8 1540 IF T(R,C)<>5 THEN GOTO 1720 1550 F=F+1 1560 FOR A=R-1 TO R+1 1570 T=0 1580 FOR B=C-1 TO C+1 1590 T=T+T(A,B) 1600 NEXT B 1610 IF T<>10 THEN GOTO 1630 1620 IF T(A,C)<>0 THEN GOTO 1900 1630 NEXT A 1640 FOR X=C-1 TO C+1 1650 T=0 1660 FOR Y=R-1 TO R+1 1670 T=T+T(Y,X) 1680 NEXT Y 1690 IF T<>10 THEN GOTO 1710 1700 IF T(R,X)<>0 THEN GOTO 1900 1710 NEXT X 1720 NEXT C 1730 NEXT R 1800 ! *** IT IS OVER PRINT CLS$;L5$;"THE PROG IS OVER." PRINT "YOU HAD";F;"PIECES REMAINING." IF F = 1 THEN PRINT "BRAVO!! YOU MADE A PERFECT SCORE!!" END IF PRINT INPUT "PLAY AGAIN ([YES]/NO)";A$ IF EDIT$(A$,32) = "NO" THEN GOTO 1910 END IF 1880 RESTORE GOTO 160 1890 STOP 1900 RETURN 1910 PRINT PRINT "SO LONG FOR NOW." PRINT 1915 GOTO 2000 1950 ! *** PRINT PEG 1960 PRINT SV$;ESC;"[";ROW$;";";COL$;"H";NRM$;P$;RS$; 1970 RETURN 2000 ! ***** END PROG ***** END