10REM      EZmatch (c) AUGust 1989 by The SoftWORKS FACTORY
20REM      program by Solomon Swift
50REM      Do NOT remove these first five program lines.
100LOMEM :32000:POKE 17059, 244:POKE 17115, 244
105TEXT:POKE 16953, 32
110DIM pc(8, 5), rp(40), co%(20), cb(8, 5)
120DATA      15,15,7,9,11,9,7,5,15,15,7,15,7,2,15,3,10,15,3,13
130FOR x=1 TO 20:READ co%(x):NEXT
140POKE 18728, 121:POKE 18729, 0:POKE 18730, 0
150POKE 16149, 255:POKE 16150, 255:POKE 16134, 3
200REM      error buzz
210DATA      62,226,211,224,62,240,211,224,17,0,80,27,122,179,32,251
220DATA      62,255,211,224,201
230FOR x=29400 TO 29420:READ mc:POKE x, mc:NEXT
240REM      input sound
250DATA      62,128,211,224,62,9,211,224,62,162,211,224,62,9,211,224
260DATA      6,16,17,0,2,27,122,179,32,251,62,160,144,211,224
270DATA      62,192,144,211,224,62,224,144,211,224,16,231,201
280FOR x=29500 TO 29543:READ mc:POKE x, mc:NEXT
290REM      initialize sprite routine
300REM      initialize sprite routine
310DATA      62,200,17,128,0,33,0,31,205,38,253,1,62,5,205,32,253,1,7,6
320DATA      205,32,253,33,172,113,17,0,56,1,32,0,205,26,253
330DATA      1,194,1,205,32,253,201
340FOR x=29200 TO 29241:READ mc:POKE x, mc:NEXT
350REM      move sprite routine
360DATA      33,0,0,17,1,15
370DATA      34,0,212,237,83,2,212,123,61,135,135,50,2,212
380DATA      79,6,0,33,0,31,9,93,84,33,0,212,1,4,0,205,26,253,201
390FOR x=29300 TO 29338:READ mc:POKE x, mc:NEXT
400REM      color background routine
410DATA      62,17,33,40,0,17,176,0,205,38,253,201
420FOR x=29000 TO 29011:READ mc:POKE x, mc:NEXT
430REM      sprite marker bit image data
440DATA      255,255,224,208,200,196,194,193,193,194,196,200,208,224,255,255
450DATA      255,255,7,11,19,35,67,131,131,67,35,19,11,7,255,255
460FOR x=29100 TO 29131:READ mc:POKE x, mc:NEXT
480IF PEEK(27600)=23 AND PEEK(27700)=207 AND PEEK(27800)=36 GOTO 2000
490REM      shape table data
500DATA      23,16,48,0,70,0,92,0,127,0,181,0,233,0,31,1,86
510DATA      1,182,1,222,1,10,2,86,2,122,2,179,2,227,2,3,3
520DATA      54,3,104,3,134,3,178,3,245,3,118,4,154,4,18,18,10
530DATA      9,30,23,14,14,207,200,40,45,45,45,45,53,42,32,37,59
540DATA      32,0,9,9,9,17,62,23,13,205,40,50,27,54,54,54,54
550DATA      31,14,14,44,205,32,0,10,9,9,41,45,45,17,50,207,32
560DATA       63,63,63,62,46,30,55,53,55,53,55,53,46,44,18,55,41
570DATA      44,46,44,46,32,37,204,0,10,9,45,45,45,45,17,59,63
580DATA      63,63,55,53,55,53,55,45,45,45,37,204,200,40,53,55,53
590DATA      51,26,63,63,63,55,53,55,53,55,53,47,33,53,37,53,37
600DATA      53,205,32,39,200,40,46,62,14,5,0,18,18,10,9,37,37
610DATA      37,37,53,53,53,53,53,54,54,54,54,39,36,36,36,60,60
620DATA       56,56,30,30,62,55,54,54,54,54,8,37,39,37,39,37,39            
630DATA      44,46,46,44,46,36,49,54,54,54,14,0,10,9,45,45,45
640DATA      45,53,63,63,63,63,63,10,45,45,45,45,53,63,63,63,63
650DATA      55,45,45,45,45,45,26,59,63,63,63,46,45,45,45,30,63
660DATA       63,55,9,53,55,53,55,45,9,58,63,63,63,31,0,18,18
670DATA      9,45,45,45,45,45,45,58,63,63,63,63,63,63,46,45,45
680DATA      45,45,45,45,62,46,62,63,39,60,63,63,46,45,53,63,63
690DATA      63,39,60,54,54,37,53,37,53,41,45,205,40,46,45,60,63
700DATA      3,0,10,45,45,45,45,45,45,53,63,63,63,63,63,63,55
710DATA      45,45,45,45,45,45,53,59,63,63,63,63,63,55,45,45,45
720DATA      45,45,45,53,54,54,54,54,39,36,36,36,60,54,54,54,54
730DATA      39,36,36,36,60,55,49,54,54,54,30,32,36,36,23,63,60
740DATA      36,44,28,19,63,55,45,53,63,55,45,53,63,55,45,45,44
750DATA      50,63,63,55,45,45,45,17,63,63,63,39,0,9,9,9,9
760DATA      50,46,54,49,45,45,30,30,30,46,50,21,62,28,28,28,28
770DATA       30,30,30,30,39,205,32,205,32,28,207,56,40,45,37,205,32 
780DATA      7,0,10,45,45,45,45,21,21,21,21,21,54,54,54,54,63 
790DATA       63,63,63,60,207,56,56,56,32,36,36,36,45,42,42,42,9
800DATA      9,9,17,63,63,63,55,54,54,46,1,0,10,45,45,45,45
810DATA      45,45,53,54,54,54,54,54,54,63,63,63,63,63,63,39,36
820DATA      36,36,36,36,44,10,45,45,45,45,53,63,63,63,63,55,45
830DATA       45,45,45,53,63,63,63,63,63,10,45,45,45,45,53,63,63
840DATA      63,63,55,45,45,45,45,53,63,63,63,63,55,42,41,41,41
850DATA      41,13,0,9,9,9,9,9,58,23,54,9,45,42,21,51,49
860DATA      54,30,62,62,30,63,63,63,56,60,60,32,36,12,44,12,53
870DATA      41,44,42,13,0,9,9,9,9,50,21,63,46,45,42,45,53
880DATA      59,63,39,63,63,63,55,41,45,45,46,45,53,59,63,39,63
890DATA      55,41,46,45,45,58,63,63,55,45,13,45,21,63,14,45,58
900DATA      31,27,27,27,39,41,205,56,63,3,0,9,9,9,42,45,30
910DATA      55,45,58,63,23,45,45,45,58,63,63,63,46,45,45,45,30
920DATA      63,63,55,41,45,21,59,63,23,45,45,45,58,63,63,63,46
930DATA       45,45,45,30,63,63,63,0,10,45,45,45,54,54,30,54,54            
940DATA      33,21,14,45,45,42,50,63,63,63,63,63,63,39,44,32,36
950DATA      36,207,32,36,204,0,9,9,9,9,42,58,55,45,21,63,63
960DATA      46,45,45,58,63,63,55,45,45,45,21,63,63,63,63,46,45
970DATA      45,45,45,58,63,63,63,63,55,45,45,45,45,45,21,63,63
980DATA      63,63,63,63,7,0,9,9,9,9,9,9,58,58,59,63,42
990DATA      13,45,42,58,203,24,63,55,41,21,63,55,45,45,62,63,63
1000DATA      31,51,41,45,45,45,45,26,59,63,63,55,45,45,53,59,63
1010DATA      14,49,45,13,0,10,9,9,45,45,45,42,46,46,50,54,54
1020DATA      30,62,62,30,63,63,63,56,60,36,35,36,36,205,32,37,45
1030DATA      0,9,42,45,58,27,55,46,46,45,45,45,37,37,37,22,53
1040DATA      53,59,60,54,46,42,50,59,32,39,39,37,63,63,63,55,41 
1050DATA      45,53,27,50,21,31,59,32,44,45,0,18,9,9,41,13,41
1060DATA      21,63,63,63,55,45,45,45,53,63,63,63,55,45,45,45,53
1070DATA      63,63,63,55,45,45,45,53,63,63,63,55,45,45,45,53,63
1080DATA      63,63,63,27,42,13,45,45,45,45,41,62,63,63,63,63,63
1090DATA      63,23,9,45,45,45,45,45,45,0,45,45,45,45,45,45,45
1100DATA      53,63,63,63,63,63,63,63,55,45,45,45,45,45,45,45,53
1110DATA      63,63,63,63,63,63,63,55,45,45,45,45,45,45,45,53,63
1120DATA      63,63,63,63,63,63,55,45,45,45,45,45,45,45,53,63,63
1130DATA      63,63,63,63,63,55,45,45,45,45,45,45,45,53,63,63,63
1140DATA      63,63,63,63,55,45,45,45,45,45,45,45,53,63,63,63,63
1150DATA      63,63,63,55,45,45,45,45,45,45,45,53,63,63,63,63,63
1160DATA      63,63,55,45,45,45,45,45,45,45,53,63,63,63,63,63,63
1170DATA      63,39,0,18,18,10,45,9,9,45,9,9,45,58,63,31,59
1180DATA      63,31,59,63,46,45,45,45,45,45,45,45,62,63,63,63,63
1190DATA      63,63,63,4,0,41,45,45,45,45,45,45,21,54,54,54,54
1200DATA      54,54,54,59,63,63,63,63,63,63,207,32,36,36,36,36,36
1210DATA      36,53,49,49,41,45,45,45,12,12,12,23,19,19,50,54,54
1220DATA      46,42,42,58,24,24,24,63,63,63,30,30,30,12,8,8,32
1230DATA      36,36,45,45,45,54,54,62,63,63,36,36,45,45,54,62,63
1240DATA      36,45,62,7,0,-1
1300 st=27600: tt=0
1310READ mc:IF mc=-1 GOTO 1330
1320POKE st, mc: tt=tt+mc: st=st+1:GOTO 1310
1330ON st=28863 AND tt=60805 GOTO 2000
1340HOME:? "DATA entry error!!":END
2000GOSUB 10000:HOME:?:HTAB 8:? "1 = ONE PLAYER"
2010HTAB 8:? "2 = TWO PLAYERS": mt=0: sc(0)=0: sc(1)=0
2020GOSUB 12000: np%=0:ON pd GOTO 3000, 4000:CALL 29400:GOTO 2020
2030 np%=1:GOTO 4000
3000 np%=1:GOTO 4000
3010HOME:GOSUB 13000:GOTO 4005
3100HOME:GOSUB 13000
3105HOME:VTAB 22:HTAB 8:? "COMPUTER'S TURN"
3110GOSUB 11000:GOSUB 20000: nx=15:GOSUB 16000: vt%=vb%: ht%=hb%
3120GOSUB 11000:GOSUB 14500: pa=pc(ht%, vt%): va=vt%: ha=ht%
3125 cb(ht%, vt%)=pa
3130 nx=15:GOSUB 16000: vt%=vc%: ht%=hc%
3140GOSUB 11000:GOSUB 14500
3145CALL 29200:ON pa=pc(ht%, vt%) GOTO 3200:VTAB 23:?
3150VTAB 23:HTAB 7:? "SORRY -- NO MATCH!!":GOSUB 14600
3155 cb(ht%, vt%)=pc(ht%, vt%)
3160VTAB 23:?
3170GOSUB 14700: vt%=va: ht%=ha:GOSUB 14700
3180 ht%=1: vt%=1:GOTO 3010
3200VTAB 23:?: pc(ht%, vt%)=0: pc(ha, va)=0
3201 cb(ht%, vt%)=-1: cb(ha, va)=-1
3202XDRAW 21 AT (ht%-1)*20+50, (vt%-1)*20+8
3204XDRAW 21 AT (ha-1)*20+50, (va-1)*20+8
3210VTAB 23:HTAB 7:? "CONGRATULATIONS!!!":GOSUB 14800:GOSUB 14600
3220VTAB 23:?: mt=mt+1: sc(1)=sc(1)+1
3225HCOLOR =15:DRAW 22 AT 224, 152-sc(1)*7
3230ON mt=20 GOTO 5000:GOTO 3105
4000CALL 29500:GOSUB 14000:HOME:GOSUB 13000
4005VTAB 22:HTAB 11:? "PLAYER ONE"
4010GOSUB 11000:GOSUB 13100:IF pc(ht%, vt%)=0 THEN CALL 29400:GOTO 4010
4020GOSUB 14500: pa=pc(ht%, vt%): va=vt%: ha=ht%
4025 cb(ht%, vt%)=pa
4030GOSUB 13100:IF pc(ht%, vt%)=0 THEN CALL 29400:GOTO 4030
4040GOSUB 14500:IF ht%=ha AND vt%=va THEN CALL 29400:GOTO 4030
4045CALL 29200:ON pa=pc(ht%, vt%) GOTO 4100:VTAB 23:?
4050VTAB 23:HTAB 7:? "SORRY -- NO MATCH!!":GOSUB 14600
4055 cb(ht%, vt%)=pc(ht%, vt%)
4060VTAB 23:?
4070GOSUB 14700: vt%=va: ht%=ha:GOSUB 14700
4080 ht%=1: vt%=1:ON np% GOTO 3100:GOTO 4500
4100VTAB 23:?: pc(ht%, vt%)=0: pc(ha, va)=0
4101 cb(ht%, vt%)=-1: cb(ha, va)=-1
4102XDRAW 21 AT (ht%-1)*20+50, (vt%-1)*20+8
4104XDRAW 21 AT (ha-1)*20+50, (va-1)*20+8
4110VTAB 23:HTAB 7:? "CONGRATULATIONS!!!":GOSUB 14800:GOSUB 14600
4120VTAB 23:?: mt=mt+1: sc(0)=sc(0)+1
4125HCOLOR =15:DRAW 22 AT 16, 152-sc(0)*7
4130ON mt=20 GOTO 5000:GOTO 4005
4500HOME:GOSUB 13000
4505VTAB 22:HTAB 11:? "PLAYER TWO"
4510GOSUB 11000:GOSUB 13100:IF pc(ht%, vt%)=0 THEN CALL 29400:GOTO 4510
4520GOSUB 14500: pa=pc(ht%, vt%): va=vt%: ha=ht%
4530GOSUB 13100:IF pc(ht%, vt%)=0 THEN CALL 29400:GOTO 4530
4540GOSUB 14500:IF ht%=ha AND vt%=va THEN CALL 29400:GOTO 4530
4545CALL 29200:ON pa=pc(ht%, vt%) GOTO 4600:VTAB 23:?
4550VTAB 23:HTAB 7:? "SORRY -- NO MATCH!!":GOSUB 14600
4560VTAB 23:?
4570GOSUB 14700: vt%=va: ht%=ha:GOSUB 14700
4580 ht%=1: vt%=1:GOTO 4005
4600VTAB 23:?: pc(ht%, vt%)=0: pc(ha, va)=0
4602XDRAW 21 AT (ht%-1)*20+50, (vt%-1)*20+8
4604XDRAW 21 AT (ha-1)*20+50, (va-1)*20+8
4610VTAB 23:HTAB 7:? "CONGRATULATIONS!!!":GOSUB 14800:GOSUB 14600
4620VTAB 23:?: mt=mt+1: sc(1)=sc(1)+1
4625HCOLOR =15:DRAW 22 AT 224, 152-sc(1)*7
4630ON mt=20 GOTO 5000:GOTO 4505
5000HOME:VTAB 22:HTAB 6:? "PLAYER ONE: "; 
5001IF sc(0)<10 THEN ? " "; 
5002? sc(0)
5004VTAB 24:HTAB 6:IF  NOT (np%) GOTO 5006
5005? "COMPUTER:   "; :GOTO 5007
5006? "PLAYER TWO: "; 
5007IF sc(1)<10 THEN ? " "; 
5008? sc(1); :GOSUB 14600
5009HOME:IF sc(0)<>sc(1) GOTO 5100
5010VTAB 22:HTAB 4:? "TIED GAME!!!":GOTO 5300
5100IF sc(0)<sc(1) GOTO 5200
5110VTAB 22:HTAB 4:? "PLAYER ONE WINS!!!":GOTO 5300
5200VTAB 22:HTAB 4:IF  NOT (np%) GOTO 5220
5210? "COMPUTER WINS!!":GOTO 5300
5220? "PLAYER TWO WINS!!"
5300VTAB 24:HTAB 4:? "TAP ANY KEY TO RESTART..."; 
5310POKE 64885, 0
5320IF PEEK(64885) THEN RUN
5330IF PDL(8)+PDL(9)>0 OR PDL(6)+PDL(7)>0 THEN RUN
5340IF PDL(4)+PDL(5)>0 THEN RUN
5350IF PDL(10)+PDL(11)>0 THEN RUN
5360GOTO 5320
10000POKE 25431, 51:POKE 25471, 51:POKE 25568, 252:HGR:CALL 29200
10002POKE 16958, 16:VTAB 16:HTAB 11:? " EZ-MATCH "; 
10004VTAB 19:HTAB 7:? " (c) 1989 by TSF"; 
10010POKE 16766, 208:POKE 16767, 107:SCALE =1:ROT =0
10020FOR x=0 TO 13:POKE 29004, x:CALL 29000:NEXT
10030HCOLOR =14:FOR x=0 TO 7:FOR y=0 TO 4
10040DRAW 23 AT x*20+50, y*20+8:NEXT:NEXT
10050HCOLOR =15:HPLOT 40, 0 TO 215, 0:HPLOT 40, 1 TO 215, 1
10060HPLOT 215, 0 TO 215, 111:HPLOT 214, 0 TO 214, 111
10070HPLOT 215, 111 TO 40, 111:HPLOT 215, 110 TO 40, 110
10080HPLOT 40, 111 TO 40, 0:HPLOT 41, 111 TO 41, 0
10100HPLOT 11, 12 TO 36, 12:HPLOT 36, 12 TO 36, 158
10110HPLOT 36, 158 TO 11, 158:HPLOT 11, 158 TO 11, 12
10200HPLOT 219, 12 TO 244, 12:HPLOT 244, 12 TO 244, 158
10210HPLOT 244, 158 TO 219, 158:HPLOT 219, 158 TO 219, 12
10300HCOLOR =1:HPLOT 23, 0 TO 23, 8:HPLOT 21, 8 TO 26, 8
10310HPLOT 23, 0 TO 21, 2:HPLOT 229, 0 TO 234, 0:HPLOT 234, 0 TO 234, 4
10320HPLOT 234, 4 TO 229, 4:HPLOT 229, 4 TO 229, 8
10330HPLOT 229, 8 TO 235, 8:RETURN
11000POKE 29302, (ht%-1)*20+50:POKE 29301, (vt%-1)*20+7:CALL 29300:RETURN
12000 se=0
12010 pd=PDL(13)+PDL(12)
12020 se=se+1:IF pd=30 GOTO 12010
12030 se=RND(-se): pd=pd-15:RETURN
13000 ht%=1: vt%=1:GOTO 11000
13100POKE 64885, 0
13105 js=PDL(5)+PDL(4): ff=PDL(7)+PDL(6): rr=PDL(9)+PDL(8)
13106 kb=PEEK(64885)
13110IF js+ff+rr+kb=0 GOTO 13105
13120IF ff=1 THEN RETURN
13125IF kb=27 THEN TEXT:? "END":POKE 16953, 95:END
13130IF rr=1 THEN RETURN
13140IF js=1 THEN  vt%=vt%-1
13150IF js=2 THEN  ht%=ht%+1
13160IF js=3 THEN  ht%=ht%+1: vt%=vt%-1
13170IF js=4 THEN  vt%=vt%+1
13180IF js=6 THEN  ht%=ht%+1: vt%=vt%+1
13190IF js=8 THEN  ht%=ht%-1
13200IF js=9 THEN  ht%=ht%-1: vt%=vt%-1
13210IF js=12 THEN  ht%=ht%-1: vt%=vt%+1
13220IF ht%>8 THEN  ht%=1
13230IF ht%<1 THEN  ht%=8
13240IF vt%>5 THEN  vt%=1
13250IF vt%<1 THEN  vt%=5
13260CALL 29500:GOSUB 11000:GOTO 13100
14000HOME:?:HTAB 6:? "one moment please..."
14002FOR x=1 TO 8:FOR y=1 TO 5: pc(x, y)=0:NEXT
14004FOR x=1 TO 40: rp(x)=0:NEXT
14010FOR x=1 TO 8:FOR y=1 TO 5
14012 rr=INT(RND(1)*40)+1:IF rp(rr)<>0 GOTO 14012
14014 rp(rr)=rr
14020IF rr>20 THEN  rr=rr-20
14030IF pc(x, y)=0 THEN  pc(x, y)=rr
14040NEXT:NEXT: nx=25:GOTO 16000
14500XDRAW 21 AT (ht%-1)*20+50, (vt%-1)*20+8
14510HCOLOR =co%(pc(ht%, vt%))
14520DRAW pc(ht%, vt%) AT (ht%-1)*20+50, (vt%-1)*20+8:RETURN
14600FOR de=1 TO 2500:NEXT:RETURN
14700XDRAW 21 AT (ht%-1)*20+50, (vt%-1)*20+8
14710HCOLOR =14
14720DRAW 23 AT (ht%-1)*20+50, (vt%-1)*20+8:RETURN
14800FOR x=1 TO 5:CALL 29500:NEXT:RETURN
16000FOR x=1 TO nx: ht%=RND(1)*8+1: vt%=RND(1)*5+1
16010GOSUB 11000:CALL 29500:NEXT:RETURN
20000FOR x=1 TO 8:FOR y=1 TO 5:FOR v=1 TO 8:FOR w=1 TO 5
20010IF cb(x, y)<>cb(v, w) GOTO 20020
20012IF pc(x, y)=0 GOTO 20020
20014IF x=v AND y=w GOTO 20020
20016GOTO 20100
20020NEXT:NEXT:NEXT:NEXT
20030 vb%=RND(1)*5+1: hb%=RND(1)*8+1
20040IF pc(hb%, vb%)=0 GOTO 20030
20050 vc%=RND(1)*5+1: hc%=RND(1)*8+1
20060IF hb%=hc% AND vb%=vc% GOTO 20050
20070IF pc(hc%, vc%)=0 GOTO 20050
20080RETURN
20100 hb%=x: vb%=y: hc%=v: vc%=w:RETURN
