home *** CD-ROM | disk | FTP | other *** search
GW-BASIC | 1984-10-22 | 9.7 KB | 401 lines |
- 10 COMMON MENU$
- 20 DIM A%(32,25),MOVES%(2,346,2), DIREC%(2),SCORE%(2),DIRMOV%(4,2), SH$(12),P$(2),Z$(41),LEGAL%(2), MOVE%(2),FIG%(19)
- 25 GOSUB 9000
- 30 SCREEN 0,1,0 : WIDTH 40
- 40 COLOR 6,0
- 50 KEY OFF
- 60 CLS
- 70 LOCATE 10,14
- 72 GOSUB 9500
- 75 PRINT "DOMINO CHAIN"
- 76 LOCATE 16,10 : PRINT "instructions (Y/N) ? ";
- 77 COLOR 22,0 : PRINT CHR$(95);
- 78 GOSUB 8300
- 79 LOCATE 16,31,0 : PRINT X$;
- 80 IF X$="N" OR X$="n" THEN 86
- 81 IF X$="Y" OR X$="y" THEN GOSUB 8500 : GOTO 86
- 82 BEEP : GOTO 70
- 86 GOSUB 9700
- 87 CLS : GOSUB 9500
- 88 LOCATE 20,5
- 89 PRINT "Level of difficulty (1,2,3) ";
- 90 INPUT D0%
- 95 IF D0%<1 OR D0%>3 THEN BEEP : GOTO 60
- 96 IF D0%=1 THEN M7$="MF" : M8$="16"
- 97 IF D0%=2 THEN M7$="MF" : M8$="64"
- 98 IF D0%=3 THEN M7$="MB" : M8$="64"
- 100 SH$(1)="BR4BU1U5R1D5"
- 110 SH$(2)="BU3BR1R7U1L7"
- 120 SH$(3)="BE2E4R1G5R1E4"
- 130 SH$(4)="BR6BU1H4U1F5U1H4"
- 135 SH$(5)="U7R1D7"
- 140 SH$(6)="R9U1L9"
- 145 SH$(7)="BR8U7R1D7"
- 150 SH$(8)="BU6R9U1L9"
- 155 SH$(9)="BR7R2U1L6BU2BL1L2D1R6"
- 160 SH$(10)="R2BR4BU1L6BU1BR3R6U1L2"
- 165 SH$(11)="BR9U2BL1BD2U4G1U4L1D2"
- 170 SH$(12)="BR6U2BR1BD2U4F1U4R1D2"
- 200 Z$(1)="2" 'player 2 moves down
- 210 Z$(3)="1" 'player 2 moves left
- 220 Z$(5)="3" 'player 2 moves right
- 230 Z$(7)="4" 'player 2 moves up
- 240 Z$(16)="1" 'player 1 moves left
- 250 Z$(34)="3" 'player 1 moves right
- 260 Z$(38)="4" 'player 1 moves up
- 270 Z$(41)="2" 'player 1 moves down
- 300 FIG%(1)=1 'upright domino
- 310 FIG%(3)=4 'leaning left domino
- 320 FIG%(5)=3 'leaning right domino
- 330 FIG%(6)=2 'sideways domino
- 340 FIG%(7)=4 'leaning left domino
- 350 FIG%(9)=3 'leaning right domino
- 360 FIG%(11)=1 'upright domino
- 370 FIG%(13)=3 'leaning right domino
- 380 FIG%(15)=4 'leaning left domino
- 390 FIG%(16)=2 'sideways domino
- 400 FIG%(17)=3 'leaning right domino
- 410 FIG%(19)=4 'lenaing left domino
- 420 FOR T=1 TO 32
- 430 FOR T1=1 TO 25
- 440 IF T=1 OR T=32 THEN A%(T,T1)=3
- 450 IF T1=1 OR T1=25 THEN A%(T,T1)=3
- 460 NEXT T1
- 470 NEXT T
- 500 REM
- 510 REM SET UP ARRAYS
- 520 REM
- 525 PLAY "MF"
- 530 FOR T=2 TO TURN%
- 540 A%(MOVES%(1,T,1),MOVES%(1,T,2))=0
- 550 A%(MOVES%(2,T,1),MOVES%(2,T,2))=0
- 555 IF T=1 OR T=32 THEN A%(T,T1)=3
- 557 IF T1=1 OR T1=25 THEN A%(T,T1)=3
- 560 NEXT T
- 620 TURN%=1
- 630 MOVES%(1,1,1)=7
- 640 MOVES%(1,1,2)=13
- 650 MOVES%(2,1,1)=26
- 660 MOVES%(2,1,2)=13
- 662 A%(7,13)=1 : A%(26,13)=2
- 670 REM
- 680 REM direcs: 1=left
- 690 REM 2=down
- 700 REM 3=right
- 710 REM 4=up
- 720 REM
- 730 DIRMOV%(1,1)=-1 : DIRMOV%(1,2)=0
- 740 DIRMOV%(2,1)=0 : DIRMOV%(2,2)=1
- 750 DIRMOV%(3,1)=1 : DIRMOV%(3,2)=0
- 760 DIRMOV%(4,1)=0 : DIRMOV%(4,2)=-1
- 770 DIREC%(1)=3
- 780 DIREC%(2)=1
- 790 P$(1)=""
- 800 P$(2)=""
- 810 LEGAL%(1)=0
- 820 LEGAL%(2)=0
- 900 REM
- 910 REM PROMPT PLAYERS THAT GAME IS READY
- 920 REM
- 930 SCREEN 0,1,0
- 940 COLOR 7,0
- 950 CLS
- 960 LOCATE 20,8
- 965 GOSUB 9500
- 970 PRINT "press <SPACE> bar to start ";
- 980 IF INKEY$=" " THEN 1000
- 990 GOTO 980
- 1000 REM
- 1010 REM SET UP PLAYING AREA
- 1020 REM
- 1030 KEY OFF
- 1040 CLS
- 1050 SCREEN 1,0
- 1060 LINE (9,7)-(310,192),3,B
- 1070 PAINT (5,5),3,3
- 1080 A$="BM"+STR$(MOVES%(1,1,1)*10-10)+ ","+STR$(MOVES%(1,1,2)*8-1)
- 1090 DRAW "C1"+A$+SH$(1)
- 1100 A$="BM"+STR$(MOVES%(2,1,1)*10-10)+ ","+STR$(MOVES%(2,1,2)*8-1)
- 1110 DRAW "C2"+A$+SH$(1)
- 1200 REM
- 1210 REM DELAY BEFORE GAME STARTS
- 1220 REM
- 1230 FOR T=1 TO 2000
- 1240 NEXT T
- 1250 PLAY "O5C"
- 2000 REM
- 2010 REM LOAD KEYBOARD INTO PENDING MOVES ARRAY - P$()
- 2020 REM
- 2030 TEMP$=INKEY$
- 2040 IF TEMP$="" THEN 3000
- 2050 TEMP%=ASC(TEMP$)
- 2060 IF TEMP%=52 OR TEMP%=50 OR TEMP%=54 OR TEMP%=56 THEN 2100
- 2070 IF TEMP%=65 OR TEMP%=90 OR TEMP%=83 OR TEMP%=87 THEN 2200
- 2080 GOTO 2030
- 2100 REM
- 2110 REM player 2
- 2120 REM
- 2130 P$(2)=P$(2)+Z$(TEMP%-49)
- 2140 GOTO 2030
- 2200 REM
- 2210 REM player 1
- 2220 REM
- 2230 P$(1)=P$(1)+Z$(TEMP%-49)
- 2240 GOTO 2030
- 3000 REM
- 3010 REM CHECK MOVES FOR LEGAL
- 3020 REM
- 3030 FOR T=1 TO 2
- 3035 IF LEN(P$(T))<1 THEN MOVE%(T)=0 : GOTO 3100
- 3040 MOVE%(T)=VAL(LEFT$(P$(T),1))
- 3050 T1%=ABS(DIREC%(T)-MOVE%(T))
- 3060 IF T1%=1 OR T1%=3 THEN 3100
- 3065 REM **** SWALLOW BAD KEY HITS ****
- 3066 MOVE%(T)=0 : P$(T)=RIGHT$(P$(T),LEN(P$(T))-1) : GOTO 3100
- 3067 REM ******************************
- 3070 LEGAL%(T)=1
- 3080 GOTO 3200
- 3100 IF A%(MOVES%(T,TURN%,1)+DIRMOV%( DIREC%(T),1),MOVES%(T,TURN%,2)+ DIRMOV%(DIREC%(T),2))=0 THEN 3200
- 3110 LEGAL%(T)=1
- 3200 NEXT T
- 3300 IF LEGAL%(1)=1 OR LEGAL%(2)=1 THEN 6000
- 4000 REM
- 4010 REM PLACE MOVES ON SCREEN
- 4020 REM
- 4030 FOR T=1 TO 2
- 4040 T1%=DIREC%(T)*5+MOVE%(T)-4
- 4050 X$="BM"+STR$((MOVES%(T,TURN%,1)+ DIRMOV%(DIREC%(T),1))*10-10)+","+ STR$((MOVES%(T,TURN%,2)+DIRMOV%( DIREC%(T),2))*8-1)
- 4055 C9$="C"+STR$(T)
- 4060 DRAW C9$+X$+SH$(FIG%(T1%))
- 4070 PLAY M7$+"O"+STR$(T+1)+"C"+M8$
- 4080 NEXT T
- 5000 REM
- 5010 REM SET UP ARRAYS FOR NEXT MOVE
- 5020 REM
- 5030 TURN%=TURN%+1
- 5040 FOR T=1 TO 2
- 5050 MOVES%(T,TURN%,1)=MOVES%(T,TURN%-1, 1)+DIRMOV%(DIREC%(T),1)
- 5060 MOVES%(T,TURN%,2)=MOVES%(T,TURN%-1, 2)+DIRMOV%(DIREC%(T),2)
- 5070 A%(MOVES%(T,TURN%,1),MOVES%(T,TURN% ,2))=T
- 5075 IF MOVE%(T)=0 THEN 5090
- 5080 DIREC%(T)=MOVE%(T)
- 5081 IF LEN(P$(T))=1 THEN P$(T)="" : GOTO 5090
- 5082 IF LEN(P$(T))>0 THEN P$(T)= RIGHT$(P$(T),LEN(P$(T))-1)
- 5090 NEXT T
- 5100 GOTO 2000
- 6000 REM
- 6010 REM SOMEONE LOST
- 6020 REM
- 6023 BLANK$="C0U7R9D7L8U6R7D5L6U4R5D3L4U2R3D1L2"
- 6025 LAST%(1)=1 : LAST%(2)=1
- 6030 FOR T=TURN% TO 1 STEP -1
- 6040 FOR T1=1 TO 2
- 6045 C9$="C"+STR$(T1)
- 6050 IF LEGAL%(T1)=0 THEN 6900
- 6060 Q$="BM"+STR$(MOVES%(T1,T,1)*10-10) +","+STR$(MOVES%(T1,T,2)*8-1)
- 6070 IF T<TURN% THEN 6200
- 6080 X=(MOVES%(T1,T,1)-MOVES%(T1,T-1,1)) *2+(MOVES%(T1,T,2)-MOVES%(T1,T-1,2) )+3
- 6090 IF X=1 THEN Q%=10
- 6100 IF X=2 THEN Q%=12
- 6110 IF X=4 THEN Q%=11
- 6120 IF X=5 THEN Q%=9
- 6130 GOTO 6700
- 6200 IF T=1 THEN 6600
- 6210 X1=MOVES%(T1,T+1,1)-MOVES%(T1,T-1,1 )
- 6220 Y1=MOVES%(T1,T+1,2)-MOVES%(T1,T-1,2 )
- 6230 IF X1=0 THEN 6500
- 6240 IF Y1=0 THEN 6550
- 6250 X2=MOVES%(T1,T,1)-MOVES%(T1,T-1,1)
- 6260 Y2=MOVES%(T1,T,2)-MOVES%(T1,T-1,2)
- 6270 IF X2=1 THEN Q%=5 : GOTO 6700
- 6280 IF X2=-1 THEN Q%=7 : GOTO 6700
- 6290 IF Y2=1 THEN Q%=8 : GOTO 6700
- 6300 Q%=6 : GOTO 6700
- 6500 IF Y1<0 THEN Q%=12 : GOTO 6700
- 6510 Q%=11 : GOTO 6700
- 6550 IF X1<0 THEN Q%=10 : GOTO 6700
- 6560 Q%=9 : GOTO 6700
- 6600 IF T1=1 THEN Q%=9
- 6610 IF T1=2 THEN Q%=10
- 6700 DRAW Q$+BLANK$+Q$+C9$+SH$(Q%)
- 6710 PLAY "MBO0C32"
- 6900 NEXT T1
- 6910 NEXT T
- 7000 REM
- 7010 REM SHOW SCORES AND ASK FOR NEW GAME
- 7020 REM
- 7030 FOR T=1 TO 5000
- 7040 NEXT T
- 7045 IF INKEY$<>"" THEN 7045
- 7050 SCREEN 0,1,0
- 7060 COLOR 7,0
- 7070 CLS
- 7080 IF LEGAL%(1)=1 THEN SCORE%(2)= SCORE%(2)+1
- 7090 IF LEGAL%(2)=1 THEN SCORE%(1)= SCORE%(1)+1
- 7100 LOCATE 5,10
- 7110 PRINT "PLAYER 1 = ";SCORE%(1)
- 7120 LOCATE 7,10
- 7130 PRINT "PLAYER 2 = ";SCORE%(2)
- 7140 LOCATE 20,10
- 7150 INPUT "Play Again ";W$
- 7160 IF LEFT$(W$,1)="Y" THEN 500
- 8000 REM
- 8010 REM GO BACK TO MENU
- 8020 REM
- 8030 SCREEN 0,1,0
- 8040 COLOR 7,0
- 8050 CLS
- 8100 IF MENU$="Y" THEN CHAIN "MENU"
- 8110 GOTO 9999
- 8300 FLAG%=1
- 8307 GOSUB 9110
- 8310 RETURN
- 8500 FOR T=1 TO 35
- 8510 MID$(A$,T,1)=CHR$(42)
- 8520 MID$(B$,T,1)=CHR$(42)
- 8530 NEXT T
- 8535 FLAG%=0 : C$="" : D$=""
- 8540 E$="PRESS <space> BAR "
- 8550 F$=" PRESS <space> BAR"
- 8560 MID$(E$,7,1)=CHR$(220)
- 8570 MID$(E$,13,1)=CHR$(223)
- 8580 MID$(F$,12,1)=CHR$(220)
- 8590 MID$(F$,18,1)=CHR$(223)
- 8600 GOSUB 9050
- 8610 FOR T5=1 TO 3
- 8620 FOR T6=1 TO 18
- 8630 READ A0$
- 8640 LOCATE T6+3,7,0
- 8650 PRINT A0$;
- 8660 NEXT T6
- 8670 GOSUB 9110
- 8680 IF X$<>" " THEN BEEP : GOTO 8670
- 8690 NEXT T5
- 8700 DATA " Domino chain is an exciting"
- 8710 DATA "two player game, where each"
- 8720 DATA "player tries to block the"
- 8730 DATA "other player's chain, causing"
- 8740 DATA "it to fall down."
- 8741 DATA " "
- 8742 DATA " "
- 8743 DATA " The direction of the chains"
- 8744 DATA "are controlled by the use of"
- 8745 DATA "the keyboard. These keys are:"
- 8746 DATA " "
- 8747 DATA " "
- 8748 DATA " PLAYER 1 PLAYER 2 "
- 8749 DATA " "
- 8750 DATA " "
- 8751 DATA " W 8"
- 8752 DATA " A S 4 6"
- 8753 DATA " Z 2"
- 8754 DATA " A player loses when his"
- 8755 DATA "chain is knocked down. The"
- 8756 DATA "following events will cause a"
- 8757 DATA "player's chain to be knocked"
- 8758 DATA "down: "
- 8759 DATA " "
- 8760 DATA " * chain moves into wall "
- 8770 DATA " "
- 8780 DATA " * chain moves into domino "
- 8790 DATA " "
- 8800 DATA " "
- 8810 DATA " "
- 8820 DATA " "
- 8870 DATA " "
- 8880 DATA " "
- 8890 DATA " Invalid inputs are ignored."
- 8891 DATA " "
- 8892 DATA " "
- 8894 DATA " There are three levels of"
- 8895 DATA "difficulty. These being: "
- 8896 DATA " "
- 8898 DATA " 1 = SLOW SPEED "
- 8899 DATA " (for beginners)"
- 8900 DATA " "
- 8901 DATA " 2 = NORMAL SPEED "
- 8902 DATA " "
- 8903 DATA " 3 = FAST SPEED "
- 8904 DATA " (for quick thinkers)"
- 8905 DATA " "
- 8906 DATA " "
- 8907 DATA " Before the game may start,"
- 8908 DATA "the <Caps Lock> & <Num Lock>"
- 8909 DATA "keys must have been pressed."
- 8910 DATA "You will be prompted to"
- 8911 DATA "verify that these keys are in"
- 8912 DATA "the proper mode of operation."
- 9000 REM
- 9010 A$="IBM PC IBM PC "
- 9020 E$="**********************"
- 9030 F$="**********************"
- 9040 B$="IBM PC IBM PC "
- 9050 FOR T=1 TO 22:IF MID$(E$,T,1)="." THEN MID$(E$,T,1)=CHR$(177):MID$(F$,T,1)=CHR$(177)
- 9060 NEXT T
- 9070 FOR T=1 TO 22
- 9080 D$=D$+MID$(F$,T,1)+CHR$(31)+CHR$(29)
- 9090 C$=C$+MID$(E$,T,1)+CHR$(31)+CHR$(29)
- 9100 NEXT T
- 9105 RETURN
- 9110 COLOR 0,9
- 9120 LOCATE 1,3 : PRINT "*";
- 9130 LOCATE 1,39 : PRINT "*";
- 9140 LOCATE 24,39 : PRINT "*";
- 9150 LOCATE 24,3 : PRINT "*";
- 9160 LOCATE 2,1 : G1$=CHR$(28)+CHR$(28) : PRINT G1$+LEFT$(D$,64);
- 9170 LOCATE 3,1 : G$=CHR$(29)+CHR$(29) : PRINT G$+LEFT$(C$,64);
- 9180 X$=INKEY$
- 9190 IF FLAG%=1 THEN COLOR 0,9 ELSE COLOR 0,9
- 9200 IF X$<>"" THEN 9360
- 9210 A$=RIGHT$(A$,1)+LEFT$(A$,34)
- 9220 LOCATE 1,4,0
- 9230 PRINT A$;
- 9240 B$=RIGHT$(B$,34)+LEFT$(B$,1)
- 9250 LOCATE 24,4,0
- 9260 PRINT B$;
- 9270 C$=RIGHT$(C$,3)+LEFT$(C$,63)
- 9280 LOCATE 3,1,0
- 9290 G$=CHR$(29)+CHR$(29)
- 9300 IF FLAG%=1 THEN COLOR 0,9 ELSE COLOR 0,9
- 9310 PRINT G$+LEFT$(C$,64);
- 9320 D$=RIGHT$(D$,63)+LEFT$(D$,3)
- 9330 LOCATE 2,1,0
- 9340 PRINT G1$+LEFT$(D$,64);
- 9350 GOTO 9180
- 9360 COLOR 6,0
- 9370 RETURN
- 9500 REM clear input buffer
- 9510 IF INKEY$<>"" THEN 9500
- 9520 RETURN
- 9700 REM check that caps lock and num lock are set
- 9705 GOSUB 9500
- 9710 CLS : LOCATE 10,5,0
- 9720 PRINT "<Caps Lock> and <Num Lock> check"
- 9730 PRINT
- 9740 PRINT
- 9750 PRINT "HIT THE LETTER Z"
- 9760 X$=INKEY$
- 9770 IF X$="" THEN 9760
- 9780 IF X$="Z" THEN 9800
- 9783 IF X$="z" THEN 9790
- 9785 BEEP : PRINT "wrong key"
- 9786 GOTO 9750
- 9790 BEEP : PRINT "letter is lowercase"
- 9792 PRINT "hit <Caps Lock> key and try again"
- 9794 GOTO 9750
- 9800 PRINT : PRINT "OK" : PRINT
- 9810 PRINT "HIT THE NUMBER 2 ON THE NUMERIC KEYPAD"
- 9812 X$=INKEY$
- 9813 IF X$="" THEN 9812
- 9814 IF X$="2" THEN 9950
- 9816 IF ASC(X$)=0 THEN 9900
- 9818 BEEP : PRINT "wrong key"
- 9819 GOTO 9810
- 9900 BEEP : PRINT "invalid character"
- 9905 PRINT "hit <Num Lock> key and try again"
- 9910 GOTO 9810
- 9950 PRINT : PRINT "OK" : PRINT
- 9960 FOR T=1 TO 1000 : NEXT T
- 9970 RETURN
- 9999 END
-