home *** CD-ROM | disk | FTP | other *** search
/ CP/M / CPM_CDROM.iso / enterprs / c64 / games / bingo.c64 (.txt) < prev    next >
Encoding:
Commodore BASIC  |  1993-04-06  |  8.5 KB  |  266 lines

  1. 150 POKE53281,1:POKE53280,1
  2. 160 SS=54272:V=53248:D0=56323:D1=56320:D2=56321:POKEV+21,0
  3. 170 PRINTCHR$(147),CHR$(17),CHR$(17)
  4. 180 PRINTSPC(14);CHR$(18);CHR$(31);"MODES OF PLAY":PRINT
  5. 190 PRINTSPC(14);CHR$(28);"*************":PRINT
  6. 200 PRINTSPC(4);CHR$(144);"1- AUTO BALL FEED   - AUTO COVER"
  7. 210 PRINTSPC(4);"2- MANUAL BALL FEED - AUTO COVER"
  8. 220 PRINTSPC(4);"3- MANUAL BALL FEED - MANUAL COVER"
  9. 230 PRINTSPC(4);"4- AUTO BALL FEED   - MANUAL COVER"
  10. 235 PRINTSPC(4);"Q- QUIT!!!"
  11. 240 PRINT:PRINT"     ENTER MODE SELECTED:"
  12. 250 GET A$:IFA$=""THEN250
  13. 255 IFA$="Q"THEN59999
  14. 260 AU=VAL(A$)-1:IFAU<0ORAU>3THEN170
  15. 270 M1$="-CHIME RINGS FOR NUMBER ON CARD"
  16. 280 M2$="-GONG RINGS FOR NUMBER ON NO CARD"
  17. 290 M3$="-HIT ANY KEY FOR BALL FEED"
  18. 300 M4$="-USE JOYSTICK (PORT 2)-FIRE TO COVER"
  19. 310 PRINTCHR$(147),CHR$(17),CHR$(17)
  20. 320 PRINTSPC(2);M1$:PRINTSPC(2);M2$
  21. 330 IFAU=1ORAU=2THENPRINTSPC(2);M3$
  22. 340 IFAU=2ORAU=3THENPRINTSPC(2);M4$
  23. 350 PRINT:PRINTSPC(10);"HIT ANY KEY TO START"
  24. 360 GET A$:IFA$=""THEN360
  25. 370 PRINTCHR$(147)
  26. 380 REM *** READ THE ML CODE TO SET A BLOCK OF MEMORY ***
  27. 390 FORI=0TO11:READ X%:POKE28672+I,X%:NEXTI
  28. 400 REM *** SET THE COLOR MEMORY TO BLACK ***
  29. 410 FORI=0TO3:HB=216+I
  30. 420 POKE251,0:POKE252,HB:POKE253,0:POKE254,0:SYS 28672:NEXT
  31. 430 DIMSD(4,62),CO(5),X(5),Y(5),FL(21),FH(21),DU(21),C(3,4,4),N(4,14)
  32. 440 CO(0)=0:CO(1)=14:CO(2)=4:CO(3)=2:CO(4)=7:CO(5)=0
  33. 450 L(0)=130:L(1)=137:L(2)=142:L(3)=135:L(4)=143
  34. 460 S(0)=1104:S(1)=1127:S(2)=1624:S(3)=1647
  35. 470 F(0)=1271+SS:F(1)=1294+SS:F(2)=1791+SS:F(3)=1814+SS
  36. 480 GOSUB640:REM *** MAKE THE BOX ***
  37. 490 GOSUB1470:REM *** MAKE BINGO SPRITES ***
  38. 500 REM *** BLANK OUT THE FREE-BOXES ***
  39. 510 FORI=0TO3:POKEF(I),1:POKEF(I)+1,1:NEXT
  40. 520 GOSUB840:REM *** CHOOSE THE NUMBERS FOR THE CARDS ***
  41. 530 REM *** PUT RED COVER-TOKEN ON FREE-BOXES ***
  42. 540 FORI=0TO3:POKEF(I)-SS,160:POKEF(I)+1-SS,160:POKEF(I),8:POKEF(I)+1,8:NEXT
  43. 550 FORCD=0TO3:C(CD,2,2)=0:NEXT:REM SET CENTER BOX TO ILLEGAL VALUE (FREE BOX)
  44. 560 REM *** DRAW THE PASS LINE ***
  45. 570 FORLI=0TO6:POKE(1520+LI),64:NEXTLI
  46. 580 REM *** START OF PLAY ***
  47. 590 GOSUB1100:REM *** GET THE NEXT NUMBER ***
  48. 600 GOSUB1170:REM *** CHECK THE CARDS FOR A MATCH ***
  49. 610 IFAU=0ORAU=3THEN590:REM *** CHECK FOR AUTO BALL-FEED ***
  50. 620 GETA$:IFA$=""THEN620:REM *** WAIT FOR NEXT BALL ***
  51. 630 GOTO590
  52. 640 REM *** BOX MAKER ***
  53. 650 T0$=" B  I  N  Gá O "
  54. 660 A1=176:A2=96:A3=178:A4=174:GOSUB710:T1$=A$
  55. 670 A1=98:A2=32:A3=98:A4=98:GOSUB710:T2$=A$
  56. 680 A1=171:A2=96:A3=123:A4=179:GOSUB710:T3$=A$
  57. 690 A1=173:A2=96:A3=177:A4=189:GOSUB710:T4$=A$
  58. 700 GOTO750
  59. 710 A$=CHR$(A2)+CHR$(A3)+CHR$(A2)
  60. 720 A$=CHR$(A1)+CHR$(A2)+A$+A$+A$+A$+CHR$(A2)+CHR$(A4)
  61. 730 A$=A$+"       "+A$
  62. 740 RETURN
  63. 750 PRINTCHR$(18)CHR$(31)T0$CHR$(146)SPC(8)CHR$(18)CHR$(31)T0$CHR$(146)
  64. 760 PRINTCHR$(144);T1$
  65. 770 FORI=1TO4:PRINTT2$:PRINTT3$:NEXT
  66. 780 PRINTT2$:PRINTT4$:PRINT
  67. 790 PRINTCHR$(18)CHR$(31)T0$CHR$(146)SPC(8)CHR$(18)CHR$(31)T0$CHR$(146)
  68. 800 PRINTCHR$(144);T1$
  69. 810 FORI=1TO4:PRINTT2$:PRINTT3$:NEXT
  70. 820 PRINTT2$:PRINTT4$;
  71. 830 RETURN
  72. 840 REM *** CHOOSE THE CARD NUMBERS ***
  73. 850 REM *** FIRST ZERO THE CALLED NUMBER ARRAY ***
  74. 860 FORCL=0TO4:FORNN=0TO14:N(CL,NN)=0:NEXT:NEXT
  75. 870 CD=0:REM *** CARD LOOP ***
  76. 880 CL=0:REM *** COLUMN LOOP ***
  77. 890 FORI=0TO4:C(CD,CL,I)=0:NEXT:REM *** ZERO COL OF NUMBERS ON CARD ***
  78. 900 RN=0:REM *** ROW LOOP ***
  79. 910 Z=INT(RND(0)*15)+1+15*CL
  80. 920 REM *** TEST FOR THE NUMBER IN USE ***
  81. 930 J=0
  82. 940 IFC(CD,CL,J)=ZTHEN910:REM *** NUMBER HAS BEEN USED ***
  83. 950 IFJ<RNTHENJ=J+1:GOTO940
  84. 960 C(CD,CL,RN)=Z
  85. 970 REM *** PRINT NUMBER IN THE BOX ***
  86. 980 N$=STR$(Z)
  87. 990 LN=LEN(N$)
  88. 1000 FORQ=1TOLN-1
  89. 1010 SN=S(CD)+CL*3+RN*80+Q+(3-LN)
  90. 1020 PN=ASC(MID$(N$,Q+1,1))
  91. 1030 POKESN,PN
  92. 1040 NEXTQ
  93. 1050 IFRN<4THENRN=RN+1:GOTO910
  94. 1060 IFCL<4THENCL=CL+1:GOTO890
  95. 1070 IFCD<3THENCD=CD+1:GOTO880
  96. 1080 RETURN
  97. 1090 REM *** SELECT THE NEXT BALL NUMBER ***
  98. 1100 GOSUB1730:REM *** FIRST CHOOSE THE LETTER ***
  99. 1110 REM *** NEXT THE NUMBER ***
  100. 1120 NU=INT(RND(0)*15):NM=NU+1+NC*15
  101. 1130 REM *** HAS IT ALREADY BEEN USED? ***
  102. 1140 IFN(NC,NU)=1THEN1110:REM *** YES-GET ANOTHER ***
  103. 1150 N(NC,NU)=1
  104. 1160 RETURN
  105. 1170 REM *** PRINT THE NUMBER ON THE BIG BALL ***
  106. 1180 N1=INT(NM/10):N2=NM-N1*10
  107. 1190 IFN1=0THENN1=-16
  108. 1200 POKE1282,L(NC):POKE1283,N1+176:POKE1284,N2+176
  109. 1210 POKEV+44,CO(NC)
  110. 1220 REM *** CHECK FOR NUMBER ON THE CARDS ***
  111. 1230 NN=0
  112. 1240 BO=0
  113. 1250 CD=0:REM *** CARD LOOP ***
  114. 1260 CR=0:REM *** ROW LOOP ***
  115. 1270 IFC(CD,NC,CR)<>NMTHEN1390
  116. 1280 IFAU>1THEN2270
  117. 1290 NN=1:REM *** FOUND A MATCH ***
  118. 1300 REM *** PUT THE RED COVER-TOKEN ON THE NUMBER ***
  119. 1310 P1=S(CD)+CR*80+NC*3+1
  120. 1320 POKEP1+SS,8
  121. 1330 POKEP1+1+SS,8
  122. 1340 POKEP1+1,N2+176
  123. 1350 POKEP1,N1+176
  124. 1360 GOSUB1890:REM *** RING THE CHIME ***
  125. 1370 GOSUB2000:REM *** CHECK FOR A WINNER ***
  126. 1380 GOTO1400
  127. 1390 IFCR<4THENCR=CR+1:GOTO1270
  128. 1400 IFCD<3THENCD=CD+1:GOTO1260
  129. 1410 IFNN=0THENGOSUB1950:REM *** NO MATCH-SOUND THE GONG ***
  130. 1420 Y(NC)=230
  131. 1430 POKEV+1+NC*2,Y(NC):REM *** SET INITIAL Y ***
  132. 1440 IFBO=0THENRETURN:REM *** NO WINNER-GET NEXT BALL ***
  133. 1450 GETA$:IFA$=""THEN1450:REM *** WINNER-WAIT FOR A RESTART ***
  134. 1460 POKEV+21,0:RESTORE:CLR:GOTO150
  135. 1470 REM *** MAKE THE BINGO SPRITES ***
  136. 1480 REM *** ZERO THE SPRITES MEMORY ***
  137. 1490 FORI=0TO3
  138. 1500 POKE251,I*64:POKE252,57:POKE253,63:POKE254,00:SYS28672:NEXTI
  139. 1510 POKE251,00:POKE252,58:POKE253,63:POKE254,00:SYS28672
  140. 1520 REM *** SET UP TO ZERO SOUND ***
  141. 1530 POKE251,00:POKE252,212:POKE253,24:POKE254,00
  142. 1540 REM *** READ IN THE BIG BALL SPRITE ***
  143. 1550 FORI=0TO4:FORJ=22TO46:READSD
  144. 1560 POKE(14592+I*64+J),SD:NEXT:NEXT
  145. 1570 FORI=0TO63:READSD:POKE14912+I,SD:NEXT
  146. 1580 POKEV+21,63:REM *** ENABLE THE SPRITES ***
  147. 1590 FORI=0TO5
  148. 1600 POKE2040+I,228+I
  149. 1610 REM *** SET UP THE SPRITES ***
  150. 1620 POKEV+39+I,CO(I):REM *** SET THE SPRITE COLOR ***
  151. 1630 X(I)=145+I*12
  152. 1640 Y(I)=230
  153. 1650 X(5)=156:Y(5)=83:REM *** LARGE SPRITE LOCATION ***
  154. 1660 POKEV+I*2,X(I):REM *** SET INITIAL X-POSITION ***
  155. 1670 POKEV+1+I*2,Y(I):REM *** SET INITIAL Y ***
  156. 1680 NEXTI
  157. 1690 POKEV+23,32:POKEV+29,32
  158. 1700 REM *** READ IN THE BINGO SONG ***
  159. 1710 FORI=0TO21:READFL(I),FH(I),DU(I):NEXT
  160. 1720 RETURN
  161. 1730 NC=INT(RND(1)*5):REM *** SELECT THE BALL LETTER ***
  162. 1740 YM=INT(RND(0)*13):IFYM<5THENYM=5:REM *** GET THE MAXIMUM HEIGHT ***
  163. 1750 J=0
  164. 1760 Y=J^2-2*YM*J+230
  165. 1770 POKE(V+NC*2),X(NC):POKE(V+1+NC*2),INT(Y)
  166. 1780 IFY<=132THENRETURN:REM *** BALL WENT OVER PASS LINE ***
  167. 1790 IFJ<2*YMTHENJ=J+1:GOTO1760
  168. 1800 GOSUB1830:REM *** MAKE THE BALL PLOP SOUND ***
  169. 1810 GOTO1730:REM *** GET NEXT BALL ***
  170. 1820 REM *** SOUND OF THE BALL PLOP ***
  171. 1830 SYS28672
  172. 1840 POKESS,255:POKESS+1,93:POKESS+5,2
  173. 1850 POKESS+22,104:POKESS+23,1:POKESS+24,79:POKESS+4,129
  174. 1860 POKESS+24,0
  175. 1870 RETURN
  176. 1880 REM *** CHIME SOUND ***
  177. 1890 SYS28672
  178. 1900 POKESS+1,255:POKESS+5,9:POKESS+15,225:POKESS+24,15
  179. 1910 POKESS+4,21
  180. 1920 FORTT=1TO300:NEXT:POKESS+4,20
  181. 1930 RETURN
  182. 1940 REM *** SOUR BONG SOUND ***
  183. 1950 SYS28672
  184. 1960 POKESS+1,55:POKESS+5,9:POKESS+15,25:POKESS+24,15
  185. 1970 POKESS+4,21
  186. 1980 FORTT=1TO300:NEXT:POKESS+4,20:POKESS+24,0
  187. 1990 RETURN
  188. 2000 REM *** ROUTINE TO LOOK FOR A WINNER ***
  189. 2010 A1=3:A2=80:A3=0:A4=0
  190. 2020 WI=NC:GOSUB2120:REM *** CHECK ROWS ***
  191. 2030 A1=80:A2=3:A3=0:A4=0
  192. 2040 WI=CR:GOSUB2120:REM *** CHECK COLS ***
  193. 2050 IFNC<>CRTHEN2080:REM *** IS # ON MAJOR DIAGONAL? ***
  194. 2060 A1=0:A2=3:A3=0:A4=80
  195. 2070 GOSUB2120
  196. 2080 IFNC<>CR(4-CR)THENRETURN:REM *** IS # ON MINOR DIAGONAL? ***
  197. 2090 A1=0:A2=3:A3=0:A4=80
  198. 2100 GOSUB2120
  199. 2110 RETURN
  200. 2120 WJ=0
  201. 2130 WM=S(CD)+WI*A1+WJ*A2+WJ*A3+(4-WJ)*A4+1
  202. 2140 WP=PEEK(WM)
  203. 2150 IFWP<128THENRETURN
  204. 2160 W(WJ)=WM+SS
  205. 2170 WJ=WJ+1:IFWJ<=4THEN2130
  206. 2180 REM *** CHANGE WINNERS COLOR ***
  207. 2190 FORWJ=0TO4:FORQ=0TO1:POKEW(WJ)+Q,7:NEXT:NEXT:BO=1
  208. 2200 REM *** PLAY THE BINGO SONG ***
  209. 2210 POKE54296,15:POKE54277,10:POKE54278,10:REM *** SET VOL,ATT/DEC,SUS/REL ***
  210. 2220 FORI=0TO21:POKE54272,FL(I):POKE54273,FH(I):POKE54276,33
  211. 2230 FORT=0TODU(I)*4:NEXT:POKE54276,0:NEXT
  212. 2240 REM *** CHANGE WINNERS COLOR ***
  213. 2250 FORWJ=0TO4:FORQ=0TO1:POKEW(WJ)+Q,6:NEXT:NEXT:BO=1
  214. 2260 RETURN
  215. 2270 REM *** JOYSTICK TOKEN ROUTINE ***
  216. 2280 CM=F(CD)
  217. 2290 OC=PEEK(CM):REM *** OC=OLD COLOR ***
  218. 2300 POKECM,5:POKECM+1,5:REM *** COLOR IT GREEN ***
  219. 2310 KB=PEEK(D0):REM *** READ THE KEYBOARD CONTROL REG ***
  220. 2320 POKED0,255:PD=PEEK(D1)
  221. 2330 J0=-((PDAND8)=0)
  222. 2340 J1=-((PDAND2)=0)
  223. 2350 J2=-((PDAND4)=0)
  224. 2360 J3=-((PDAND1)=0)
  225. 2370 FB=-((PDAND16)=0)
  226. 2380 POKED0,KB:REM *** RESTORE KEYBOARD ***
  227. 2390 IF(J0+J1+J2+J3+FB)=0THEN2560
  228. 2400 IFFB=1THEN2490
  229. 2410 CC=CM+(J0-J2)*3+(J1-J3)*80:REM *** COMPUTE NEW POSITION ***
  230. 2420 FR=INT((CC-S(CD)-SS)/40)
  231. 2430 X0=S(CD)+SS+FR*40:X1=X0+14:REM *** COMPUTE NEW POSITION ***
  232. 2440 IFCC>X1ORCC<X0ORFR>8ORFR<0THEN2560:REM *** TEST IF OUTSIDE BOX ***
  233. 2450 REM *** VALID NEW POSITION-MOVE THE CURSOR ***
  234. 2460 POKECM,OC:POKECM+1,OC
  235. 2470 CM=CC:REM *** MOVE THE CURSOR ***
  236. 2480 GOTO2290
  237. 2490 REM *** ACT ON FIREBUTTON-WE MUST CHECK IF THE CURSOR IS WITHIN A BOX AND
  238. 2500 REM IF IT IS, IS NUMBER THE COREECT ONE ***
  239. 2510 B0=PEEK(CM-SS)-48:B1=PEEK(CM-SS+1)-48
  240. 2520 IFB0=N1ANDB1=N2ORB0=N1+128ANDB1=N1+128THENGOTO1290
  241. 2530 REM *** FIRE BUTTON PRESSED WHEN NOT ON BOX ***
  242. 2540 POKECM,OC:POKECM+1,OC:GOSUB1950:REM *** SOUR GONG SOUND ***
  243. 2550 NN=1:GOTO1390:REM *** GET NEXT CARD ***
  244. 2560 REM *** LOOP TILL JOYSTICK IS ACTIVE ***
  245. 2570 FORI=0TO20:NEXT
  246. 2580 POKECM,OC:POKECM+1,OC
  247. 2590 FORI=0TO20:NEXT
  248. 2600 GOTO2300
  249. 2610 DATA 160,00,165,254,145,251,200,196,253,208,249,96,252,0,3,255
  250. 2620 DATA 0,3,3,128,7,57,128,7,35,128,7,57,128,3,3,128,3,255,0,0,252,252,0
  251. 2630 DATA3,255,0,3,3,128,7,207,128,7,207,128,7,207,128,3,3,128,3,255,0,0,252
  252. 2640 DATA252,0,3,255,0,3,25,128,7,25,128,7,41,128,7,49,128,3,57,128,3,255,0
  253. 2650 DATA0,252,252,0,1,131,0,3,49,128,6,121,128,6,127,128,6,113,128,3,57
  254. 2660 DATA128,3,131,0,0,252
  255. 2670 DATA252,0,1,131,0,3,57,128,6,124,128,6,124,128,6,124,128,3,57,128,3,131
  256. 2680 DATA0,0,252
  257. 2690 DATA0,126,0,1,255,128,7,255,224,31,255,248,63,255,252,63,255,252,127,255
  258. 2700 DATA254,120,0,30,248,0,31,248,0,31,248,0,31,120,0,30,127,255,254,63,255
  259. 2710 DATA252,63,255,252,31,255,248,7,255,224,1,255,128,0,126,0,0,0,0,0,0,0,0
  260. 2720 DATA38,43,39,38,43,39,183,45,39,183,45,44,183,45,64,113,38,46,113,38,42
  261. 2730 DATA38,43,32,38,43,36,38,43,47,64,34,50,64,34,54,113,38,37,113,38,39
  262. 2740 DATA113,38,51,64,34,57,83,32,53,168,25,72,204,28,54,83,32,51,64,34,62
  263. 2750 DATA64,34,75
  264. 59999 END
  265. 60000 OPEN15,8,15,"S0:BINGO":CLOSE15:SAVE"0:BINGO",8
  266.