home *** CD-ROM | disk | FTP | other *** search
/ RBBS in a Box Volume 1 #3.1 / RBBSIABOX31.cdr / dosc / dominoes.bas (.txt) < prev    next >
Encoding:
GW-BASIC  |  1984-10-22  |  9.7 KB  |  401 lines

  1. 10  COMMON MENU$
  2. 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)
  3. 25  GOSUB 9000
  4. 30  SCREEN 0,1,0 : WIDTH 40
  5. 40  COLOR 6,0
  6. 50  KEY OFF
  7. 60  CLS
  8. 70  LOCATE 10,14
  9. 72  GOSUB 9500
  10. 75  PRINT "DOMINO CHAIN"
  11. 76  LOCATE 16,10 : PRINT "instructions (Y/N) ? ";
  12. 77  COLOR 22,0 : PRINT CHR$(95);
  13. 78  GOSUB 8300
  14. 79  LOCATE 16,31,0 : PRINT X$;
  15. 80  IF X$="N" OR X$="n" THEN 86
  16. 81  IF X$="Y" OR X$="y" THEN GOSUB 8500 : GOTO 86
  17. 82  BEEP : GOTO 70
  18. 86  GOSUB 9700
  19. 87  CLS : GOSUB 9500
  20. 88  LOCATE 20,5
  21. 89  PRINT "Level of difficulty (1,2,3) ";
  22. 90  INPUT D0%
  23. 95  IF D0%<1 OR D0%>3 THEN BEEP : GOTO 60
  24. 96  IF D0%=1 THEN M7$="MF" : M8$="16"
  25. 97  IF D0%=2 THEN M7$="MF" : M8$="64"
  26. 98  IF D0%=3 THEN M7$="MB" : M8$="64"
  27. 100  SH$(1)="BR4BU1U5R1D5"
  28. 110  SH$(2)="BU3BR1R7U1L7"
  29. 120  SH$(3)="BE2E4R1G5R1E4"
  30. 130  SH$(4)="BR6BU1H4U1F5U1H4"
  31. 135  SH$(5)="U7R1D7"
  32. 140  SH$(6)="R9U1L9"
  33. 145  SH$(7)="BR8U7R1D7"
  34. 150  SH$(8)="BU6R9U1L9"
  35. 155  SH$(9)="BR7R2U1L6BU2BL1L2D1R6"
  36. 160  SH$(10)="R2BR4BU1L6BU1BR3R6U1L2"
  37. 165  SH$(11)="BR9U2BL1BD2U4G1U4L1D2"
  38. 170  SH$(12)="BR6U2BR1BD2U4F1U4R1D2"
  39. 200  Z$(1)="2"    'player 2 moves down
  40. 210  Z$(3)="1"    'player 2 moves left
  41. 220  Z$(5)="3"    'player 2 moves right
  42. 230  Z$(7)="4"    'player 2 moves up
  43. 240  Z$(16)="1"   'player 1 moves left
  44. 250  Z$(34)="3"   'player 1 moves right
  45. 260  Z$(38)="4"   'player 1 moves up
  46. 270  Z$(41)="2"   'player 1 moves down
  47. 300  FIG%(1)=1   'upright domino
  48. 310  FIG%(3)=4   'leaning left domino
  49. 320  FIG%(5)=3   'leaning right domino
  50. 330  FIG%(6)=2   'sideways domino
  51. 340  FIG%(7)=4   'leaning left domino
  52. 350  FIG%(9)=3   'leaning right domino
  53. 360  FIG%(11)=1  'upright domino
  54. 370  FIG%(13)=3  'leaning right domino
  55. 380  FIG%(15)=4  'leaning left domino
  56. 390  FIG%(16)=2  'sideways domino
  57. 400  FIG%(17)=3  'leaning right domino
  58. 410  FIG%(19)=4  'lenaing left domino
  59. 420  FOR T=1 TO 32
  60. 430  FOR T1=1 TO 25
  61. 440  IF T=1 OR T=32 THEN A%(T,T1)=3
  62. 450  IF T1=1 OR T1=25 THEN A%(T,T1)=3
  63. 460  NEXT T1
  64. 470  NEXT T
  65. 500  REM
  66. 510  REM SET UP ARRAYS
  67. 520  REM
  68. 525  PLAY "MF"
  69. 530  FOR T=2 TO TURN%
  70. 540  A%(MOVES%(1,T,1),MOVES%(1,T,2))=0
  71. 550  A%(MOVES%(2,T,1),MOVES%(2,T,2))=0
  72. 555  IF T=1 OR T=32 THEN A%(T,T1)=3
  73. 557  IF T1=1 OR T1=25 THEN A%(T,T1)=3
  74. 560  NEXT T
  75. 620  TURN%=1
  76. 630  MOVES%(1,1,1)=7
  77. 640  MOVES%(1,1,2)=13
  78. 650  MOVES%(2,1,1)=26
  79. 660  MOVES%(2,1,2)=13
  80. 662  A%(7,13)=1 : A%(26,13)=2
  81. 670  REM
  82. 680  REM direcs: 1=left
  83. 690  REM         2=down
  84. 700  REM         3=right
  85. 710  REM         4=up
  86. 720  REM
  87. 730  DIRMOV%(1,1)=-1 : DIRMOV%(1,2)=0
  88. 740  DIRMOV%(2,1)=0  : DIRMOV%(2,2)=1
  89. 750  DIRMOV%(3,1)=1  : DIRMOV%(3,2)=0
  90. 760  DIRMOV%(4,1)=0  : DIRMOV%(4,2)=-1
  91. 770  DIREC%(1)=3
  92. 780  DIREC%(2)=1
  93. 790  P$(1)=""
  94. 800  P$(2)=""
  95. 810  LEGAL%(1)=0
  96. 820  LEGAL%(2)=0
  97. 900  REM
  98. 910  REM PROMPT PLAYERS THAT GAME                IS READY
  99. 920  REM
  100. 930  SCREEN 0,1,0
  101. 940  COLOR 7,0
  102. 950  CLS
  103. 960  LOCATE 20,8
  104. 965  GOSUB 9500
  105. 970  PRINT "press <SPACE> bar to start ";
  106. 980  IF INKEY$=" " THEN 1000
  107. 990  GOTO 980
  108. 1000  REM
  109. 1010  REM SET UP PLAYING AREA
  110. 1020  REM
  111. 1030  KEY OFF
  112. 1040  CLS
  113. 1050  SCREEN 1,0
  114. 1060  LINE (9,7)-(310,192),3,B
  115. 1070  PAINT (5,5),3,3
  116. 1080  A$="BM"+STR$(MOVES%(1,1,1)*10-10)+          ","+STR$(MOVES%(1,1,2)*8-1)
  117. 1090  DRAW "C1"+A$+SH$(1)
  118. 1100  A$="BM"+STR$(MOVES%(2,1,1)*10-10)+          ","+STR$(MOVES%(2,1,2)*8-1)
  119. 1110  DRAW "C2"+A$+SH$(1)
  120. 1200  REM
  121. 1210  REM DELAY BEFORE GAME STARTS
  122. 1220  REM
  123. 1230  FOR T=1 TO 2000
  124. 1240  NEXT T
  125. 1250  PLAY "O5C"
  126. 2000  REM
  127. 2010  REM LOAD KEYBOARD INTO PENDING              MOVES ARRAY - P$()
  128. 2020  REM
  129. 2030  TEMP$=INKEY$
  130. 2040  IF TEMP$="" THEN 3000
  131. 2050  TEMP%=ASC(TEMP$)
  132. 2060  IF TEMP%=52 OR TEMP%=50 OR TEMP%=54     OR TEMP%=56 THEN 2100
  133. 2070  IF TEMP%=65 OR TEMP%=90 OR TEMP%=83     OR TEMP%=87 THEN 2200
  134. 2080  GOTO 2030
  135. 2100  REM
  136. 2110  REM player 2
  137. 2120  REM
  138. 2130  P$(2)=P$(2)+Z$(TEMP%-49)
  139. 2140  GOTO 2030
  140. 2200  REM
  141. 2210  REM player 1
  142. 2220  REM
  143. 2230  P$(1)=P$(1)+Z$(TEMP%-49)
  144. 2240  GOTO 2030
  145. 3000  REM
  146. 3010  REM CHECK MOVES FOR LEGAL
  147. 3020  REM
  148. 3030  FOR T=1 TO 2
  149. 3035  IF LEN(P$(T))<1 THEN MOVE%(T)=0 :       GOTO 3100
  150. 3040  MOVE%(T)=VAL(LEFT$(P$(T),1))
  151. 3050  T1%=ABS(DIREC%(T)-MOVE%(T))
  152. 3060  IF T1%=1 OR T1%=3 THEN 3100
  153. 3065  REM **** SWALLOW BAD KEY HITS ****
  154. 3066  MOVE%(T)=0 : P$(T)=RIGHT$(P$(T),LEN(P$(T))-1) : GOTO 3100
  155. 3067  REM ******************************
  156. 3070  LEGAL%(T)=1
  157. 3080  GOTO 3200
  158. 3100  IF A%(MOVES%(T,TURN%,1)+DIRMOV%(        DIREC%(T),1),MOVES%(T,TURN%,2)+         DIRMOV%(DIREC%(T),2))=0 THEN 3200
  159. 3110  LEGAL%(T)=1
  160. 3200  NEXT T
  161. 3300  IF LEGAL%(1)=1 OR LEGAL%(2)=1           THEN 6000
  162. 4000  REM
  163. 4010  REM PLACE MOVES ON SCREEN
  164. 4020  REM
  165. 4030  FOR T=1 TO 2
  166. 4040  T1%=DIREC%(T)*5+MOVE%(T)-4
  167. 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)
  168. 4055  C9$="C"+STR$(T)
  169. 4060  DRAW C9$+X$+SH$(FIG%(T1%))
  170. 4070  PLAY M7$+"O"+STR$(T+1)+"C"+M8$
  171. 4080  NEXT T
  172. 5000  REM
  173. 5010  REM SET UP ARRAYS FOR NEXT MOVE
  174. 5020  REM
  175. 5030  TURN%=TURN%+1
  176. 5040  FOR T=1 TO 2
  177. 5050  MOVES%(T,TURN%,1)=MOVES%(T,TURN%-1,     1)+DIRMOV%(DIREC%(T),1)
  178. 5060  MOVES%(T,TURN%,2)=MOVES%(T,TURN%-1,     2)+DIRMOV%(DIREC%(T),2)
  179. 5070  A%(MOVES%(T,TURN%,1),MOVES%(T,TURN%     ,2))=T
  180. 5075  IF MOVE%(T)=0 THEN 5090
  181. 5080  DIREC%(T)=MOVE%(T)
  182. 5081  IF LEN(P$(T))=1 THEN P$(T)="" :         GOTO 5090
  183. 5082  IF LEN(P$(T))>0 THEN P$(T)=             RIGHT$(P$(T),LEN(P$(T))-1)
  184. 5090  NEXT T
  185. 5100  GOTO 2000
  186. 6000  REM
  187. 6010  REM SOMEONE LOST
  188. 6020  REM
  189. 6023  BLANK$="C0U7R9D7L8U6R7D5L6U4R5D3L4U2R3D1L2"
  190. 6025  LAST%(1)=1 : LAST%(2)=1
  191. 6030  FOR T=TURN% TO 1 STEP -1
  192. 6040  FOR T1=1 TO 2
  193. 6045  C9$="C"+STR$(T1)
  194. 6050  IF LEGAL%(T1)=0 THEN 6900
  195. 6060  Q$="BM"+STR$(MOVES%(T1,T,1)*10-10)      +","+STR$(MOVES%(T1,T,2)*8-1)
  196. 6070  IF T<TURN% THEN 6200
  197. 6080  X=(MOVES%(T1,T,1)-MOVES%(T1,T-1,1))     *2+(MOVES%(T1,T,2)-MOVES%(T1,T-1,2)     )+3
  198. 6090  IF X=1 THEN Q%=10
  199. 6100  IF X=2 THEN Q%=12
  200. 6110  IF X=4 THEN Q%=11
  201. 6120  IF X=5 THEN Q%=9
  202. 6130  GOTO 6700
  203. 6200  IF T=1 THEN 6600
  204. 6210  X1=MOVES%(T1,T+1,1)-MOVES%(T1,T-1,1     )
  205. 6220  Y1=MOVES%(T1,T+1,2)-MOVES%(T1,T-1,2     )
  206. 6230  IF X1=0 THEN 6500
  207. 6240  IF Y1=0 THEN 6550
  208. 6250  X2=MOVES%(T1,T,1)-MOVES%(T1,T-1,1)
  209. 6260  Y2=MOVES%(T1,T,2)-MOVES%(T1,T-1,2)
  210. 6270  IF X2=1 THEN Q%=5 : GOTO 6700
  211. 6280  IF X2=-1 THEN Q%=7 : GOTO 6700
  212. 6290  IF Y2=1 THEN Q%=8 : GOTO 6700
  213. 6300  Q%=6 : GOTO 6700
  214. 6500  IF Y1<0 THEN Q%=12 : GOTO 6700
  215. 6510  Q%=11 : GOTO 6700
  216. 6550  IF X1<0 THEN Q%=10 : GOTO 6700
  217. 6560  Q%=9 : GOTO 6700
  218. 6600  IF T1=1 THEN Q%=9
  219. 6610  IF T1=2 THEN Q%=10
  220. 6700  DRAW Q$+BLANK$+Q$+C9$+SH$(Q%)
  221. 6710  PLAY "MBO0C32"
  222. 6900  NEXT T1
  223. 6910  NEXT T
  224. 7000  REM
  225. 7010  REM SHOW SCORES AND ASK                     FOR NEW GAME
  226. 7020  REM
  227. 7030  FOR T=1 TO 5000
  228. 7040  NEXT T
  229. 7045  IF INKEY$<>"" THEN 7045
  230. 7050  SCREEN 0,1,0
  231. 7060  COLOR 7,0
  232. 7070  CLS
  233. 7080  IF LEGAL%(1)=1 THEN SCORE%(2)=          SCORE%(2)+1
  234. 7090  IF LEGAL%(2)=1 THEN SCORE%(1)=          SCORE%(1)+1
  235. 7100  LOCATE 5,10
  236. 7110  PRINT "PLAYER 1  = ";SCORE%(1)
  237. 7120  LOCATE 7,10
  238. 7130  PRINT "PLAYER 2  = ";SCORE%(2)
  239. 7140  LOCATE 20,10
  240. 7150  INPUT "Play Again ";W$
  241. 7160  IF LEFT$(W$,1)="Y" THEN 500
  242. 8000  REM
  243. 8010  REM GO BACK TO MENU
  244. 8020  REM
  245. 8030  SCREEN 0,1,0
  246. 8040  COLOR 7,0
  247. 8050  CLS
  248. 8100  IF MENU$="Y" THEN CHAIN "MENU"
  249. 8110  GOTO 9999
  250. 8300  FLAG%=1
  251. 8307  GOSUB 9110
  252. 8310  RETURN
  253. 8500  FOR T=1 TO 35
  254. 8510  MID$(A$,T,1)=CHR$(42)
  255. 8520  MID$(B$,T,1)=CHR$(42)
  256. 8530  NEXT T
  257. 8535  FLAG%=0 : C$="" : D$=""
  258. 8540  E$="PRESS <space> BAR     "
  259. 8550  F$="     PRESS <space> BAR"
  260. 8560  MID$(E$,7,1)=CHR$(220)
  261. 8570  MID$(E$,13,1)=CHR$(223)
  262. 8580  MID$(F$,12,1)=CHR$(220)
  263. 8590  MID$(F$,18,1)=CHR$(223)
  264. 8600  GOSUB 9050
  265. 8610  FOR T5=1 TO 3
  266. 8620  FOR T6=1 TO 18
  267. 8630  READ A0$
  268. 8640  LOCATE T6+3,7,0
  269. 8650  PRINT A0$;
  270. 8660  NEXT T6
  271. 8670  GOSUB 9110
  272. 8680  IF X$<>" " THEN BEEP : GOTO 8670
  273. 8690  NEXT T5
  274. 8700  DATA "  Domino chain is an exciting"
  275. 8710  DATA "two player game,  where  each"
  276. 8720  DATA "player  tries  to  block  the"
  277. 8730  DATA "other player's chain, causing"
  278. 8740  DATA "it to fall down."
  279. 8741  DATA " "
  280. 8742  DATA "                        "
  281. 8743  DATA "  The direction of the chains"
  282. 8744  DATA "are controlled by the use  of"
  283. 8745  DATA "the keyboard. These keys are:"
  284. 8746  DATA " "
  285. 8747  DATA " "
  286. 8748  DATA "    PLAYER 1       PLAYER 2  "
  287. 8749  DATA " "
  288. 8750  DATA " "
  289. 8751  DATA "       W              8"
  290. 8752  DATA "     A   S          4   6"
  291. 8753  DATA "       Z              2"
  292. 8754  DATA "  A  player  loses  when  his"
  293. 8755  DATA "chain is  knocked  down.  The"
  294. 8756  DATA "following events will cause a"
  295. 8757  DATA "player's chain to be  knocked"
  296. 8758  DATA "down:                        "
  297. 8759  DATA " "
  298. 8760  DATA "  *  chain moves into wall   "
  299. 8770  DATA "                             "
  300. 8780  DATA "  *  chain moves into domino "
  301. 8790  DATA "                             "
  302. 8800  DATA "                          "
  303. 8810  DATA " "
  304. 8820  DATA "                             "
  305. 8870  DATA " "
  306. 8880  DATA " "
  307. 8890  DATA "  Invalid inputs are ignored."
  308. 8891  DATA "                             "
  309. 8892  DATA "                             "
  310. 8894  DATA "  There  are three  levels of"
  311. 8895  DATA "difficulty.  These being:    "
  312. 8896  DATA "                             "
  313. 8898  DATA "  1  =  SLOW SPEED           "
  314. 8899  DATA "        (for beginners)"
  315. 8900  DATA "                             "
  316. 8901  DATA "  2  =  NORMAL SPEED         "
  317. 8902  DATA "                             "
  318. 8903  DATA "  3  =  FAST SPEED           "
  319. 8904  DATA "        (for quick thinkers)"
  320. 8905  DATA "                             "
  321. 8906  DATA " "
  322. 8907  DATA "  Before the game  may start,"
  323. 8908  DATA "the  <Caps Lock> & <Num Lock>"
  324. 8909  DATA "keys must have been  pressed."
  325. 8910  DATA "You   will  be  prompted   to"
  326. 8911  DATA "verify that these keys are in"
  327. 8912  DATA "the proper mode of operation."
  328. 9000  REM
  329. 9010  A$="IBM PC            IBM PC           "
  330. 9020  E$="**********************"
  331. 9030  F$="**********************"
  332. 9040  B$="IBM PC            IBM PC           "
  333. 9050  FOR T=1 TO 22:IF MID$(E$,T,1)="." THEN MID$(E$,T,1)=CHR$(177):MID$(F$,T,1)=CHR$(177)
  334. 9060  NEXT T
  335. 9070  FOR T=1 TO 22
  336. 9080  D$=D$+MID$(F$,T,1)+CHR$(31)+CHR$(29)
  337. 9090  C$=C$+MID$(E$,T,1)+CHR$(31)+CHR$(29)
  338. 9100  NEXT T
  339. 9105  RETURN
  340. 9110  COLOR 0,9
  341. 9120  LOCATE 1,3 : PRINT "*";
  342. 9130  LOCATE 1,39 : PRINT "*";
  343. 9140  LOCATE 24,39 : PRINT "*";
  344. 9150  LOCATE 24,3 : PRINT "*";
  345. 9160  LOCATE 2,1 : G1$=CHR$(28)+CHR$(28) : PRINT G1$+LEFT$(D$,64);
  346. 9170  LOCATE 3,1 : G$=CHR$(29)+CHR$(29) :     PRINT G$+LEFT$(C$,64);
  347. 9180  X$=INKEY$
  348. 9190  IF FLAG%=1 THEN COLOR 0,9 ELSE COLOR 0,9
  349. 9200  IF X$<>"" THEN 9360
  350. 9210  A$=RIGHT$(A$,1)+LEFT$(A$,34)
  351. 9220  LOCATE 1,4,0
  352. 9230  PRINT A$;
  353. 9240  B$=RIGHT$(B$,34)+LEFT$(B$,1)
  354. 9250  LOCATE 24,4,0
  355. 9260  PRINT B$;
  356. 9270  C$=RIGHT$(C$,3)+LEFT$(C$,63)
  357. 9280  LOCATE 3,1,0
  358. 9290  G$=CHR$(29)+CHR$(29)
  359. 9300  IF FLAG%=1 THEN COLOR 0,9 ELSE COLOR 0,9
  360. 9310  PRINT G$+LEFT$(C$,64);
  361. 9320  D$=RIGHT$(D$,63)+LEFT$(D$,3)
  362. 9330  LOCATE 2,1,0
  363. 9340  PRINT G1$+LEFT$(D$,64);
  364. 9350  GOTO 9180
  365. 9360  COLOR 6,0
  366. 9370  RETURN
  367. 9500  REM clear input buffer
  368. 9510  IF INKEY$<>"" THEN 9500
  369. 9520  RETURN
  370. 9700  REM check that caps lock and num        lock are set
  371. 9705  GOSUB 9500
  372. 9710  CLS : LOCATE 10,5,0
  373. 9720  PRINT "<Caps Lock> and <Num Lock> check"
  374. 9730  PRINT
  375. 9740  PRINT
  376. 9750  PRINT "HIT THE LETTER Z"
  377. 9760  X$=INKEY$
  378. 9770  IF X$="" THEN 9760
  379. 9780  IF X$="Z" THEN 9800
  380. 9783  IF X$="z" THEN 9790
  381. 9785  BEEP : PRINT "wrong key"
  382. 9786  GOTO 9750
  383. 9790  BEEP : PRINT "letter is lowercase"
  384. 9792  PRINT "hit <Caps Lock> key and try again"
  385. 9794  GOTO 9750
  386. 9800  PRINT : PRINT "OK" : PRINT
  387. 9810  PRINT "HIT THE NUMBER 2 ON THE NUMERIC KEYPAD"
  388. 9812  X$=INKEY$
  389. 9813  IF X$="" THEN 9812
  390. 9814  IF X$="2" THEN 9950
  391. 9816  IF ASC(X$)=0 THEN 9900
  392. 9818  BEEP : PRINT "wrong key"
  393. 9819  GOTO 9810
  394. 9900  BEEP : PRINT "invalid character"
  395. 9905  PRINT "hit <Num Lock> key and try again"
  396. 9910  GOTO 9810
  397. 9950  PRINT : PRINT "OK" : PRINT
  398. 9960  FOR T=1 TO 1000 : NEXT T
  399. 9970  RETURN
  400. 9999  END
  401.