home *** CD-ROM | disk | FTP | other *** search
/ Loadstar 198 / 198.d81 / chomp / chomp.080d / chomp.a7ae (.txt)
Encoding:
Commodore BASIC  |  2000-01-01  |  35.3 KB  |  370 lines

  1. 1 rem "chomp basic" 2000.10.27
  2. 2 poke55,192:poke56,55:clr
  3. 3 gosub3002
  4. 4 gosub12:onq%goto4002
  5. 5 q%=3:gosub102
  6. 6 gosub12:onq%goto4002,5
  7. 7 onp%(p%,1)gosub142
  8. 8 gosub180:onq%goto4002,5,5,5,4
  9. 10 :
  10. 12 : rem input
  11. 14 :
  12. 16 pokevl+39,1
  13. 18 sysml+9:i%=cr%:on1+(i%=0)goto22:sysml+60,"pehq":on1+(i%=0)goto22
  14. 20 onp%(p%,1)+1goto18,24
  15. 22 oni%gosub502,516,566,582,160:ifq%>2thenonp%(p%,1)goto24:ifb%=-1then18
  16. 24 ifq%=5then18
  17. 26 pokevl+39,7
  18. 28 return
  19. 100 :
  20. 102 : rem next player
  21. 104 :
  22. 106 b%=-1
  23. 108 rem --- player
  24. 110 f%=0:gosub120:p%=1-p%:f%=-1:gosub120
  25. 112 rem --- move #
  26. 114 m%=m%+1:cy%=sy%+13:a$="[205]ove"+right$(" "+str$(m%),3):gosub132
  27. 116 return
  28. 118 :
  29. 120 : rem player pointer
  30. 122 :
  31. 124 poke646,c%(1):iff%thenpoke646,c%(3)
  32. 126 cy%=sy%+6+p%*3:sysml+12,sx%,cy%,"\":sysml+12,sx%+16,cy%,"_":poke646,c%(2)
  33. 128 return
  34. 130 :
  35. 132 : rem update status block
  36. 134 :
  37. 136 l%=17:sysml+30,sx%,sx%+l%-1,cy%,cy%,160,c%(1):sysml+12,fnxc(sx%),cy%,a$
  38. 138 return
  39. 140 :
  40. 142 : rem computer move
  41. 144 :
  42. 146 rem --- square
  43. 148 rem sysgl:b%=peek(gv+66):gosub184
  44. 150 sysgl:b%=peek(681):gosub172
  45. 152 rem --- pointer
  46. 154 sysml+24,o%(2,0):sysml+21,fnx(0),fny(0):sysml+24,o%(2,0)
  47. 156 return
  48. 158 :
  49. 160 : rem human move
  50. 162 :
  51. 164 b%=(int((cy%-by%)/2))*10+int((cx%-bx%)/2):gosub172
  52. 166 ifbr%>=peek(gv+bc%)orb%=peek(gv+66)or(m%=1andb%=0)thenb%=-1
  53. 168 return
  54. 170 :
  55. 172 : rem square's row & column
  56. 174 :
  57. 176 br%=b%/10:bc%=b%-br%*10:return
  58. 178 :
  59. 180 : rem move results
  60. 182 :
  61. 184 rem --- block
  62. 186 ifm%=1thencx%=fnx(0):cy%=fny(0):gosub648:pokegv+66,b%:goto202
  63. 188 rem --- game over
  64. 190 ifb%=0thenq%=5:gosub206:goto202
  65. 192 rem --- chomp
  66. 194 sysml+30,fnx(0),bx%+19,fny(0),by%+21,97,c%(0)
  67. 196 rem --- board
  68. 198 c%=br%:i%=bc%:forj=0to1:fori=i%to10:x=gv+j*11+i:ifpeek(x)>c%thenpokex,c%
  69. 200 next:c%=bc%:i%=br%:next
  70. 202 return
  71. 204 :
  72. 206 : rem win
  73. 208 :
  74. 210 poke646,c%(6):a$=n$(1-p%)+" wins":l%=20:sysml+12,fnxc(xb%+1),by%+6,a$
  75. 212 f%=0:gosub120
  76. 214 return
  77. 500 :
  78. 502 : rem play new game
  79. 504 :
  80. 506 q%=2:m%=0:sysml+48,bx%,bx%+19,by%,by%+21,a(0):sysml+129,a(1),a(1)+22,gv
  81. 508 pokegv+66,255:sysml+30,sx%,sx%+16,sy%+13,sy%+14,160,c%(1):f%=0:gosub120:p%=1
  82. 510 :
  83. 512 return
  84. 514 :
  85. 516 : rem edit setup
  86. 518 :
  87. 520 gosub656
  88. 522 sysml+42,hs%:pokemv,ls%:pokemv+2,14
  89. 524 n%=0
  90. 526 sysml+9:ifcr%=0thensysml+60,"q":oni%+1goto526,558
  91. 528 ifcr%=14then558
  92. 530 ifcr%<12then542
  93. 532 i=cr%-12
  94. 534 w$=n$(i):sysml+156,p%(i,3)+128,p%(i,4),c%(1),c%(1),p%(i,2),0,"[145]",n$(i)
  95. 536 ifn$(i)=w$then526
  96. 538 n%=n%ord%(i+3)
  97. 540 n$(i)=w$:goto526
  98. 542 forj=0to2:i=2-j:f%=(cr%>=o%(i,1)):j=j+(j-2)*f%:next
  99. 544 ifo%(i,2)=cr%then526
  100. 546 n%=n%ord%(i)
  101. 548 i%=o%(i,2):gosub3540:i%=cr%:gosub3552:f%=cr%-o%(i,1):o%(i,2)=cr%
  102. 550 onigoto554,556
  103. 552 o%(i,0)=f%:goto526
  104. 554 o%(i,0)=f%:goto526
  105. 556 o%(i,0)=(d%(f%)-1)*30:goto526
  106. 558 sysml+39,hs%:gosub664
  107. 560 ifn%>0thengosub600
  108. 562 return
  109. 564 :
  110. 566 : rem help
  111. 568 :
  112. 570 gosub656
  113. 572 sysml+42,hh%:pokemv,lh%:pokemv+2,6
  114. 574 sysml+210,1+128,38,3,18,c%(2),0,c%(4),c%(5),0,"",""
  115. 576 gosub664
  116. 578 return
  117. 580 :
  118. 582 : rem quit
  119. 584 :
  120. 586 gosub656
  121. 588 sysml+42,hq%:pokemv,lq%:pokemv+2,2
  122. 590 sysml+9:i%=cr%:ifi%=0thensysml+60,"ny":ifi%=0then590
  123. 592 ifi%=2thenq%=1:goto596
  124. 594 gosub664
  125. 596 return
  126. 598 :
  127. 600 : rem new setup
  128. 602 :
  129. 604 rem --- human
  130. 606 if(n%andd%(0))=0then616
  131. 608 fori=0to1
  132. 610 p%(i,1)=1+((o%(0,0)andd%(i))<>0)
  133. 612 cy%=sy%+7+3*i:a$=t$(p%(i,1)):gosub132
  134. 614 next
  135. 616 rem --- name(s)
  136. 618 fori=0to1:if(n%andd%(i+3))=0then622
  137. 620 poke646,c%(6):cy%=sy%+6+3*i:a$=n$(i):gosub132:poke646,c%(2)
  138. 622 next
  139. 624 rem --- board
  140. 626 if(n%andd%(1))=0then644
  141. 628 sysml+30,bx%,bx%+19,by%,by%+21,97,c%(0)
  142. 630 c%=14+6:f%=14:i%=10+2*(o%(1,0)<>0):n%=9-o%(1,0)
  143. 632 fori=0toi%:cy%=by%+i*2:forj=0ton%:cx%=bx%+j*2:f%=c%-f%
  144. 634 sysml+30,cx%,cx%+1,cy%,cy%+1,160,f%:next:f%=f%+(f%-c%+f%)*(o%(1,0)<>1):next
  145. 636 m%=0:cx%=bx%:cy%=by%:gosub648:sysml+45,bx%,bx%+19,by%,by%+21,a(0)
  146. 638 forj=0to1:fori=0to10:pokea(1)+j*11+i,0:next:next:c%=i%+n%+2:f%=c%/2
  147. 640 forj=0to1:f%=c%-f%:fori=0toc%-f%-1:pokea(1)+j*11+i,f%:next:next
  148. 642 gosub502:q%=5:rem new game req'd
  149. 644 return
  150. 646 :
  151. 648 : rem poison & block square
  152. 650 :
  153. 652 sysml+30,cx%,cx%+1,cy%,cy%+1,160,c%(6+(m%=1)):return
  154. 654 :
  155. 656 : rem stash game screen
  156. 658 :
  157. 660 sysml+39,hg%:return
  158. 662 :
  159. 664 : rem restore game screen
  160. 666 :
  161. 668 sysml+42,hg%:pokemv,lg%:pokemv+2,5:return
  162. 3000 :
  163. 3002 : rem initialize
  164. 3004 :
  165. 3006 rem --- dim
  166. 3008 dim b%,bc%,br%,bx%,by%,cc%,c%,cr%,cx%,cy%,f%,h%,hg%,hh%,hs%,hq%,i%
  167. 3010 dim l%,l1%,l2%,lg%,lh%,ls%,lq%,m%,n%,p%,pp%,px%,py%,q%
  168. 3012 dim r1%,r2%,rg%,s%,sc%,sl%,sx%,sy%
  169. 3014 dim cl,gl,gv,i,j,ml,mm,mv,vl,x,a$,f$,w$
  170. 3016 dim c%(6),d%(5),o%(2,2),p%(1,4),a(1),n$(1),t$(1)
  171. 3018 rem --- deffn
  172. 3020 deffnx(x)=bx%+bc%*2
  173. 3022 deffny(x)=by%+br%*2
  174. 3024 deffnxc(x)=x+(l%-len(a$))/2
  175. 3026 rem --- constants
  176. 3028 s%=256:vl=53248
  177. 3030 rem --- font
  178. 3032 readf%,a$,h%,l%:iff%thengosub3502
  179. 3034 rem --- mouse
  180. 3036 readf%,a$,h%,l%:iff%thengosub3502
  181. 3038 ml=l%+h%*s%:mv=ml+309
  182. 3040 pokemv+1,97
  183. 3042 lg%=0:lh%=lg%+5*4:ls%=lh%+6*4:lq%=ls%+14*4:rem region low bytes
  184. 3044 hg%=224:hh%=232:hs%=240:hq%=248:rem stash pages
  185. 3046 n%=98:fori=42to49:n%=n%+1:pokemv+i,n%:next
  186. 3048 rem --- mouse mate
  187. 3050 readf%,a$,h%,l%:iff%thengosub3502
  188. 3052 mm=l%+h%*s%
  189. 3054 pokemm+9,0:rem disable stop
  190. 3056 rem --- curtain
  191. 3058 readf%,a$,h%,l%:iff%thengosub3502
  192. 3060 cl=l%+h%*s%
  193. 3062 rem --- random
  194. 3064 readf%,a$,h%,l%:iff%thengosub3502
  195. 3066 poke176,l%:poke177,h%
  196. 3068 rem --- data
  197. 3070 readf%,a$,h%,l%:iff%thengosub3502
  198. 3072 rem --- ml
  199. 3074 readf%,a$,h%,l%:iff%thengosub3502
  200. 3076 gl=l%+h%*s%:gv=131*s%
  201. 3078 rem --- help text
  202. 3080 readf%,a$,h%,l%
  203. 3082 i=l%+h%*s%
  204. 3084 iff%thensysml+201,a$,8,i
  205. 3086 sysml+204,i
  206. 3088 rem --- memory locations
  207. 3090 a(0)=gv+67:a(1)=a(0)+880
  208. 3092 rem ---
  209. 3094 t$(0)="([200]uman)":t$(1)="([195]omputer)"
  210. 3096 fori=0to5:readd%(i):next
  211. 3098 fori=0to6:readc%(i):next
  212. 3100 rem --- screen off
  213. 3102 pokevl+17,11
  214. 3104 rem --- font
  215. 3106 pokevl+24,31
  216. 3108 rem --- setup screen
  217. 3110 pokemv,ls%:pokevl+32,c%(2):pokevl+33,c%(4)
  218. 3112 sysml+126,0,39,0,24,93,95,c%(2),c%(0):sysml+30,5,34,2,19,160,c%(0)
  219. 3114 poke646,c%(0):poke199,1
  220. 3116 fori=1to4:readcx%,cy%,a$:sysml+12,cx%,cy%,a$:next
  221. 3118 fori=1to11:i%=i:readcx%,cy%,l%,a$:gosub3524:next
  222. 3120 l%=16:fori=0to1:i%=12+i:readcx%,cy%,a$:gosub3524
  223. 3122 p%(i,2)=l%-1:p%(i,3)=cx%:p%(i,4)=cy%:n$(i)=a$:next
  224. 3124 l%=8:i%=14:readcx%,cy%,a$:gosub3510:gosub3540
  225. 3126 fori=0to2:reado%(i,0),o%(i,1),o%(i,2):i%=o%(i,2):gosub3548:next
  226. 3128 poke199,0
  227. 3130 sysml+39,hs%
  228. 3132 rem --- quit screen
  229. 3134 pokemv,lq%:pokevl+32,c%(2):pokevl+33,c%(4)
  230. 3136 sysml+126,0,39,0,24,93,95,c%(2),c%(0):sysml+30,10,29,6,15,160,c%(0)
  231. 3138 poke646,c%(0):poke199,1
  232. 3140 readcy%,a$:sysml+27,cy%,a$
  233. 3142 l%=7:fori=1to2:i%=i:readcx%,cy%,a$:gosub3510:gosub3540:next
  234. 3144 poke199,0
  235. 3146 sysml+39,hq%
  236. 3148 rem --- help screen
  237. 3150 pokemv,lh%:pokevl+32,c%(0):pokevl+33,c%(1)
  238. 3152 sysml+30,0,39,0,24,160,c%(0):sysml+30,0,39,2,19,160,c%(4)+16
  239. 3154 poke646,c%(0):poke199,1:readcy%,a$:sysml+27,cy%,a$:poke199,0
  240. 3156 sysml+228,1024+40*cy%+22,1024+40*cy%+30,0
  241. 3158 poke646,c%(3):l%=8:fori=1to4:i%=i:readcx%,cy%,a$:gosub3510:next
  242. 3160 sysml+39,hh%
  243. 3162 rem --- game screen
  244. 3164 pokemv,lg%:pokevl+32,c%(0):pokevl+33,c%(1)
  245. 3166 sysml+30,0,39,0,24,160,c%(0)
  246. 3168 sx%=23:sy%=0:sysml+30,sx%,sx%+16,sy%,sy%+15,160,c%(1)
  247. 3170 poke646,c%(2)
  248. 3172 sysml+12,sx%+3,sy%+2,"[172][173][174][175][176][177][178][179][180][181]"
  249. 3174 sysml+12,sx%+3,sy%+3,"[182][183][184][185][186][187][188][189][190][191]"
  250. 3176 poke646,c%(3):l%=8:fori=1to4:i%=i:readcx%,cy%,a$:gosub3510:next
  251. 3178 bx%=1:by%=1
  252. 3179 pokemv+42,237:pokemv+43,237:pokemv+44,236:pokemv+45,236
  253. 3180 n%=237:fori=46to49:n%=n%+1:pokemv+i,n%:next
  254. 3181 sysml+30,bx%-1,bx%+20,by%-1,by%+22,160,c%(2)+16
  255. 3182 sysml+15,5,bx%,bx%+19,by%,by%+21
  256. 3184 poke646,c%(2):n%=31:gosub600
  257. 3186 sysml+39,hg%
  258. 3188 rem --- title screen
  259. 3190 pokevl+32,c%(0):pokevl+33,c%(1)
  260. 3192 sysml+126,0,39,0,24,98,98,c%(0),c%(2)
  261. 3193 n%=98:fori=42to49:n%=n%+1:pokemv+i,n%:next
  262. 3194 sysml+30,3,35,5,13,160,c%(4)+16
  263. 3196 poke646,c%(3)
  264. 3198 sysml+27,6,"[172][173][174][175][176][177][178][179][180][181]"
  265. 3200 sysml+27,7,"[182][183][184][185][186][187][188][189][190][191]"
  266. 3202 poke646,c%(4)
  267. 3204 sysml+27,9,"by [204]ance [195]. [212]homas"
  268. 3206 sysml+27,11,"(c) 2000 [202][160]& [198] [208]ublishing, [201]nc."
  269. 3208 rem ---
  270. 3210 syscl
  271. 3212 pokevl+17,27
  272. 3214 gosub3556
  273. 3216 syscl+6
  274. 3218 poke198,0:wait198,15:poke198,0
  275. 3220 syscl+9
  276. 3222 pokevl+17,11:sysml+42,hg%:pokevl+17,27
  277. 3224 gosub3556
  278. 3226 syscl+6
  279. 3228 syscl+3
  280. 3230 sysmm
  281. 3232 sysml
  282. 3234 sysml+6,192+55*s%
  283. 3236 sysml+18,1,37,1,22
  284. 3238 poke646,c%(2)
  285. 3240 return
  286. 3242 :
  287. 3502 : rem bload file
  288. 3504 :
  289. 3506 sys57812a$,8,0:poke780,0:poke781,l%:poke782,h%:sys65493:return
  290. 3508 :
  291. 3510 : rem command button
  292. 3512 :
  293. 3514 sysml+15,i%,cx%,cx%+l%-1,cy%,cy%+2
  294. 3516 sysml+30,cx%,cx%+l%-1,cy%,cy%+2,160,c%(1)
  295. 3518 sysml+12,fnxc(cx%),cy%+1,a$
  296. 3520 return
  297. 3522 :
  298. 3524 : rem setup region
  299. 3526 :
  300. 3528 sysml+15,i%,cx%,cx%+l%-1,cy%,cy%
  301. 3530 ifi%<12thensysml+12,fnxc(cx%),cy%,a$:goto3534
  302. 3532 sysml+12,cx%,cy%,a$
  303. 3534 gosub3540
  304. 3536 return
  305. 3538 :
  306. 3540 : rem region highlight off
  307. 3542 :
  308. 3544 sysml+36,i%,255,c%(1):return
  309. 3546 :
  310. 3548 : rem region highlight on
  311. 3550 :
  312. 3552 sysml+36,i%,255,c%(5):return
  313. 3554 :
  314. 3556 : rem pause
  315. 3558 :
  316. 3560 i=ti
  317. 3562 ifti>ithenifti-i<20then3562
  318. 3564 return
  319. 4000 :
  320. 4002 : rem *** exit
  321. 4004 :
  322. 4006 sysml+3:pokevl+21,0:sysmm+3:goto40000
  323. 9000 :
  324. 9002 : *** data
  325. 9004 :
  326. 9006 data 00,"f.chomp",56,0
  327. 9008 data 00,"mouse2.1 7k 4000",64,0
  328. 9010 data 00,"mouse mate 6000",96,0
  329. 9012 data 00,"curtain 5c00",92,0
  330. 9014 data 00,"random 2-254",98,0
  331. 9016 data 00,"chomp 6300",99,0
  332. 9018 data 00,"chomp 7600",118,0
  333. 9020 data 00,"t.chomp hlp",135,0
  334. 9022 rem ---
  335. 9024 data 1,2,4,8,16,32
  336. 9026 rem ---
  337. 9028 data 12,15,11,6,0,2,0:rem c%()
  338. 9030 rem --- setup
  339. 9032 data 14,4,"[195]homp [211]etup"
  340. 9034 data 9,7,"[200]uman      [194]oard   [208]ause"
  341. 9036 data 7,13,"[206]ame  ([208]layer 1)"
  342. 9038 data 7,16,"[206]ame  ([208]layer 2)"
  343. 9040 data 7,8,10,"[206]one",7,9,10,"[208]layer 1",7,10,10,"[208]layer 2",7,11,10,"[194]oth"
  344. 9042 data 20,8,5,"10x11",20,9,5,"9x9",20,10,5,"8x9"
  345. 9044 data 28,8,5,"0",28,9,5,"1",28,10,5,"2",28,11,5,"4"
  346. 9046 data 7,14,"[205]aster [216]",7,17,"[203]nees [195]alhoon"
  347. 9048 data 25,15,"[[209]]uit"
  348. 9050 data 1,1,2, 0,5,5, 1,8,9
  349. 9052 rem --- quit
  350. 9054 data 8,"[209]uit [195]homp?"
  351. 9056 data 12,11,"[[206]]o ",21,11,"[[217]]es"
  352. 9058 rem --- help
  353. 9060 data 0,"[195]homp [200]elp [204]ine #### of ####"
  354. 9062 data 1,21,"[[200][207][205][197]]",11,21,"[[213][208]]",21,21,"[[196][207][215][206]]",31,21,"[[209]]uit"
  355. 9064 rem --- game
  356. 9066 data 23,17,"[[208]]lay",32,17,"[[197]]dit",23,21,"[[200]]elp",32,21,"[[209]]uit"
  357. 9068 :
  358. 10000 a$="chomp basic"
  359. 10010 d%=peek(186):open15,d%,15,"s0:"+a$:close15:savea$,d%:end
  360. 40000 fori=8to29:poke820+i,i:next:ifd%>8andd%<30thenpoke828,d%:poke820+d%,8
  361. 40010 a$="presenter":gosub40030:a$="hello connect":gosub40030
  362. 40020 print"[147]":poke53272,23:poke186,8:poke2048,0:poke44,8:poke43,1:end
  363. 40030 forj=8to29:i=peek(820+j):ifi=14thennext
  364. 40040 close2:open2,i,2:close2:ifstthen40060
  365. 40050 close15:open15,i,15,"r0:"+a$+"="+a$:input#15,er:close15:ifer=63then40070
  366. 40060 next:return
  367. 40070 a$="hello connect":q$=chr$(34):poke646,peek(53281):print"[147]":poke53272,23
  368. 40080 print"[147]p[207]2048,0:p[207]44,8:p[207]43,1:p[207]56,160:p[207]55,0:clr:l[207]"q$a$q$","i
  369. 40090 print"run:":poke631,13:poke632,13:poke198,2:end
  370.