home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
The Glitch Apple Disk Collection
/
2014.glitch.apple.collection.zip
/
indexed
/
OTHELLO.DSK
/
OTHELLO--HIRES.int
< prev
next >
Wrap
Text File
|
2014-09-09
|
10KB
|
329 lines
0 LOMEM:6488
1 I=J=MVI=MVJ=MI=MJ=IF=IA=JA=L=GOC
2 PRINT "<CTRL-D>BLOAD OTHELLO-X"
5 GOSUB 20000
10 DIM B(100),DIR(240)
20 DIM DRSPON$(2),IAA(8),JAA(8),MOVESI(30),MOVESJ(30),LC(30),NFLIP(30)
30 DRSPON$="YN"
35 DIM OUT(3),POUT(100)
36 DIM NCI(4),NCJ(4)
37 OUT(1)=0:OUT(2)=12:OUT(3)=15
40 IAA(1)=-1:IAA(2)=-1:IAA(3)=-1:IAA(4)=0:IAA(5)=1:IAA(6)=1:IAA(7)=1:IAA(8)=0
50 JAA(1)=-1:JAA(2)=0:JAA(3)=1:JAA(4)=1:JAA(5)=1:JAA(6)=0:JAA(7)=-1:JAA(8)=-1
60 FOR I=1 TO 10
62 FOR J=1 TO 10
64 B(J+(I-1)*10)=0:IF I=1 OR I=10 THEN B(J+(I-1)*10)=100:IF J=1 OR J=10 THEN B(J+(I-1)*10)=100
66 NEXT J
68 NEXT I
70 B(45)=1:B(46)=-1:B(55)=-1:B(56)=1
74 GOSUB 12000
75 CALL -936:VTAB 23
80 NM=0:NHD=0:GOSUB 3500
90 PRINT "WELCOME TO THE GAME OF OTHELLO.":PRINT "DO YOU WISH TO GO FIRST?":PRINT "(YOU ARE WHITE IF YOU GO FIRST.)"
100 INPUT "ENTER Y OR N:",DRSPON$
110 OC=1
120 IF DRSPON$="N" THEN 340
130 GOSUB 10000
140 NM=NHD
150 IF NM=60 THEN 620
160 GOC=-OC:GOSUB 2000:OC=-GOC
170 REM
180 IF IM=0 THEN 410
184 CALL -936:VTAB 22
185 CALL -198
190 PRINT :INPUT "YOUR MOVE (DOWN,ACROSS) ",MOVEI,MOVEJ
220 MOVEJ=MOVEJ+1
230 MOVEI=MOVEI+1
240 FOR I=1 TO IM
250 IF MOVESI(I)=MOVEI AND MOVESJ(I)=MOVEJ THEN 300
260 NEXT I
270 PRINT "MOVE INVALID. PLEASE RE-ENTER"
290 GOTO 190
300 NM=NM+1
310 IF=I:GOC=-OC:GOSUB 4000
320 GOSUB 3500
330 GOTO 440
340 OC=-1
350 GOSUB 10000
360 B(65)=1
370 B(55)=1
380 NM=NHD+1
390 GOSUB 3500
400 GOTO 150
410 PRINT "I CAN SEE NO MOVE FOR YOU,"
420 PRINT "SO I WILL MOVE IF I CAN"
440 IF NM=60 THEN 620
450 GOC=OC:GOSUB 2000:OC=GOC
452 CO=-OC
470 IF IM=0 THEN 570
480 GOSUB 4500
490 MOVEI=MOVESI(IF)-1
500 MOVEJ=MOVESJ(IF)-1
505 CALL -936:VTAB 22:CALL -198
510 PRINT "MY MOVE IS: ";MOVEI;",";MOVEJ
520 PRINT
530 GOC=OC:GOSUB 4000:OC=GOC
540 NM=NM+1
550 GOSUB 3500
560 GOTO 150
570 INPUT "DO YOU HAVE A MOVE?",DRSPON$
600 IF DRSPON$="Y" THEN 150
610 IF IM#0 THEN 440
620 GOC=OC:GNOC=NOC:GOSUB 3000:NOC=GNOC:OC=GOC
630 GOC=-OC:GNOC=NC:GOSUB 3000:OC=-GOC:NC=GNOC
640 IF NOC<=NC THEN 670
650 PRINT "CONGRATULATIONS!":PRINT "YOU PLAYED WELL AND HAVE WON."
660 GOTO 710
670 IF NOC=NC THEN 690
680 PRINT "YOU PLAYED WELL.":PRINT "HOWEVER, YOUR LUCK WAS BAD":PRINT "AND I HAVE WON."
685 GOTO 710
690 PRINT "YOU PLAYED WELL AND WE HA VE TIED.":PRINT "I WAS LUCKY."
710 INPUT "DO YOU WISH TO PLAY AGAIN?",DRSPON$
720 IF DRSPON$="Y" THEN 60
722 IF DRSPON$#"S" THEN 740
724 PRINT NOC;"-";NC:GOTO 710
740 END
2000 REM MOVEG SUBROUTINE
2040 FOR I=1 TO 30
2050 LC(I)=0
2060 NFLIP(I)=0:NEXT I
2070 IM=0
2080 FOR I=2 TO 9
2090 FOR J=2 TO 9
2100 IF B(J+(I-1)*10)#0 THEN 2340
2110 IC=0
2120 FOR L=1 TO 8
2130 IA=IAA(L)
2140 JA=JAA(L)
2150 IF B(J+JA+(I+IA-1)*10)#GOC THEN 2300
2160 IV=1
2170 IV=IV+1
2180 MVI=I+IV*IA
2190 MVJ=J+IV*JA
2200 IF B(MVJ+(MVI-1)*10)=0 THEN 2300
2210 IF B(MVJ+(MVI-1)*10)=100 THEN 2300
2220 IF B(MVJ+(MVI-1)*10)=GOC THEN 2170
2230 IF IC=1 THEN 2260
2240 IM=IM+1
2250 IC=1
2260 NFLIP(IM)=NFLIP(IM)+IV
2270 LC(IM)=LC(IM)+1
2280 LD=LC(IM)
2290 DIR(LD+(IM-1)*8)=L
2300 NEXT L
2310 IF IC=0 THEN 2340
2320 MOVESI(IM)=I
2330 MOVESJ(IM)=J
2340 NEXT J:NEXT I
2350 IF IM>0 THEN 2370
2360 IF OCA=GOC THEN PRINT "I HAVE NO MOVE AND MUST PASS."
2370 RETURN
3000 REM COUNT SUBROUTINE
3010 GNOC=0
3020 FOR I=2 TO 9
3030 FOR J=2 TO 9
3040 IF B(J+(I-1)*10)#GOC THEN 3060
3050 GNOC=GNOC+1
3060 NEXT J:NEXT I
3070 RETURN
3500 REM BOARDP SUBROUTINE
3520 NMP=NM-NHD
3530 PRINT "BOARD POSITION AFTER ";NMP;" MOVES"
3570 FOR I=1 TO 10
3580 FOR J=1 TO 10
3582 IF I#1 AND I#10 AND J#1 AND J#10 THEN 3590
3584 POUT(J+(I-1)*10)=4
3586 GOTO 3605
3590 IS=B(J+(I-1)*10)+2
3600 POUT(J+(I-1)*10)=OUT(IS)
3605 NEXT J:NEXT I
3606 V=8
3610 FOR I=2 TO 9
3640 FOR J=2 TO 9
3645 POT=POUT((I-1)*10+J):IF POT#0 AND POT#15 THEN 3670
3647 POKE 801,0: POKE 800,23+(J-2)*24: POKE 802,21+(I-2)*16:CALL 3761
3650 POKE 28,255*(POT=15)
3654 POKE 804,6333 MOD 256: POKE 805,6333/256
3660 CALL 3805
3670 NEXT J
3680 V=V+3
3690 NEXT I
3700 RETURN
4000 REM BOARDC SUBROUTINE
4010 MI=MOVESI(IF)
4020 MJ=MOVESJ(IF)
4030 B((MI-1)*10+MJ)=-GOC
4040 NDIR=LC(IF)
4050 FOR I=1 TO NDIR
4060 L=DIR((IF-1)*8+I)
4070 IA=IAA(L)
4080 JA=JAA(L)
4090 IV=0
4100 IV=IV+1
4110 MVI=MI+IV*IA
4120 MVJ=MJ+IV*JA
4130 IF B((MVI-1)*10+MVJ)=-GOC THEN 4160
4140 B((MVI-1)*10+MVJ)=-GOC
4150 GOTO 4100
4160 NEXT I
4170 RETURN
4500 REM MOVEE SUBROUTINE
4540 FOR I=1 TO IM
4560 MI=MOVESI(I)
4580 MJ=MOVESJ(I)
4600 IF MI#2 AND MI#9 THEN 5280
4620 IF MJ#2 AND MJ#9 THEN 4660
4640 NFLIP(I)=NFLIP(I)+50:GOTO 7080
4660 SR=1:SW=0:OK=0:SRP=0
4680 FOR P=MJ+1 TO 9
4700 XX=B((MI-1)*10+P)
4720 IF XX=CO THEN 4820
4740 IF XX#-CO OR SW=1 THEN 4780
4760 SR=-1:SW=1
4780 IF XX=-CO OR SW=1 THEN 4820
4800 SR=0:SW=1:SRP=P
4820 IF XX=-CO THEN OK=OK+1
4840 IF SR=-1 AND OK=P-MJ-1 AND OK>0 AND XX=CO THEN OK=10
4860 IF OK#10 THEN 4880:SR=1:SW=0
4880 NEXT P
4900 SL=1:SW=0:OK=0:SLP=0
4920 FOR P=MJ-1 TO 2 STEP -1
4940 XX=B((MI-1)*10+P)
4960 IF XX=CO THEN 5060
4980 IF XX#-CO OR SW=1 THEN 5020
5000 SL=-1:SW=1
5020 IF XX=-CO OR SW=1 THEN 5060
5040 SL=0:SW=1:SLP=P
5060 IF XX=-CO THEN OK=OK+1
5080 IF SL=-1 AND OK=MJ-P-1 AND OK>0 AND XX=CO THEN OK=10
5100 IF OK#10 THEN 5120:SL=1:SW=0
5120 NEXT P
5140 IF SL=0 AND SR=0 THEN NFLIP(I)=NFLIP(I)+30
5160 IF SL=-1 AND SR=-1 THEN NFLIP(I)=NFLIP(I)+40
5200 IF SL=1 THEN NFLIP(I)=NFLIP(I)+30
5220 IF SR=1 THEN NFLIP(I)=NFLIP(I)+30
5240 IF SL=0 AND SR=-1 OR SL=-1 AND SR=0 THEN NFLIP(I)=NFLIP(I)-30
5250 IF SL=0 AND SR=-1 AND (SLP=2 OR SLP=9) THEN NFLIP(I)=NFLIP(I)-20
5260 IF SR=0 AND SL=-1 AND (SRP=2 OR SRP=9) THEN NFLIP(I)=NFLIP(I)-20
5280 IF MJ#2 AND MJ#9 THEN 7000
5300 SD=1:SW=0:OK=0:SDP=0
5320 FOR P=MI+1 TO 9
5340 XX=B((P-1)*10+MJ)
5360 IF XX=CO THEN 5460
5380 IF XX#-CO OR SW=1 THEN 5420
5400 SD=-1:SW=1
5420 IF XX=-CO OR SW=1 THEN 5460
5440 SD=0:SW=1:SDP=P
5460 IF XX=-OC THEN OK=OK+1
5480 IF SD=-1 AND OK=P-MI-1 AND OK>0 AND XX=CO THEN OK=10
5500 IF OK#10 THEN 5520:SD=1:SW=0
5520 NEXT P
5540 SU=1:SW=0:OK=0:SUP=0
5560 FOR P=MI-1 TO 2 STEP -1
5580 XX=B((P-1)*10+MJ)
5600 IF XX=CO THEN 5700
5620 IF XX#-CO OR SW=1 THEN 5660
5640 SU=-1:SW=1
5660 IF XX=-CO OR SW=1 THEN 5700
5680 SU=0:SW=1:SUP=P
5700 IF XX=-C0 THEN OK=OK+1
5720 IF SU=-1 AND OK=MI-P-1 AND OK>0 AND XX=CO THEN OK=10
5740 IF OK#10 THEN 5760:SU=1:SW=0
5760 NEXT P
5780 IF SU=0 AND SD=0 THEN NFLIP(I)=NFLIP(I)+30
5800 IF SU=-1 AND SD=-1 THEN NFLIP(I)=NFLIP(I)+40
5820 IF SU=1 THEN NFLIP(I)=NFLIP(I)+30
5840 IF SD=1 THEN NFLIP(I)=NFLIP(I)+30
5860 IF SU=0 AND SD=-1 THEN NFLIP(I)=NFLIP(I)-30
5880 IF SU=-1 AND SD=0 THEN NFLIP(I)=NFLIP(I)-30
5890 IF SU=-1 AND SD=0 AND (SDP=2 OR SDP=9) THEN NFLIP(I)=NFLIP(I)-20
5900 IF SU=0 AND SD=-1 AND (SUP=2 OR SUP=9) THEN NFLIP(I)=NFLIP(I)-20
7000 IF MI#3 AND MI#8 THEN 7040
7020 NFLIP(I)=NFLIP(I)-23
7040 IF MJ#3 AND MJ#8 THEN 7080
7060 NFLIP(I)=NFLIP(I)-23
7080 IF MJ#2 AND MJ#9 THEN 7180
7100 IF MI=3 AND B(40+MJ)=CO AND B(30+MJ)=0 AND B(10+MJ)=0 THEN NFLIP(I)=NFLIP(I)-40
7120 IF MI=5 AND B(30+MJ)=0 AND B(20+MJ)=CO AND B(10+MJ)=0 THEN NFLIP(I)=NFLIP(I)-40
7140 IF MI=6 AND B(60+MJ)=0 AND B(70+MJ)=CO AND B(80+MJ)=0 THEN NFLIP(I)=NFLIP(I)-40
7160 IF MI=8 AND B(50+MJ)=CO AND B(60+MJ)=0 AND B(80+MJ)=0 THEN NFLIP(I)=NFLIP(I)-40
7180 IF MI#2 AND MI#9 THEN 7280
7200 IF MJ=3 AND B((MI-1)*10+2)=0 AND B((MI-1)*10+4)=0 AND B((MI-1)*10+5)=CO THEN NFLIP(I)=NFLIP(I)-40
7220 IF MJ=5 AND B((MI-1)*10+2)=0 AND B((MI-1)*10+3)=CO AND B((MI-1)*10+4)=0 THEN NFLIP(I)=NFLIP(I)-40
7240 IF MJ=6 AND B((MI-1)*10+7)=0 AND B((MI-1)*10+8)=CO AND B((MI-1)*10+9)=0 THEN NFLIP(I)=NFLIP(I)-40
7260 IF MJ=8 AND B((MI-1)*10+6)=CO AND B((MI-1)*10+7)=0 AND B((MI-1)*10+9)=0 THEN NFLIP(I)=NFLIP(I)-40
7280 NEXT I
8000 XFLIP=-200:XLC=0
8010 FOR I=1 TO IM
8020 IF NFLIP(I)<XFLIP THEN 8180
8040 IF NFLIP(I)=XFLIP THEN 8080
8060 XFLIP=NFLIP(I):IF=I:XLC=LC(I):GOTO 8180
8080 IF LC(I)<XLC THEN 8180
8100 IF LC(I)=XLC THEN 8140
8120 XFLIP=NFLIP(I):IF=I:XLC=LC(I):GOTO 8180
8140 XX= RND (2):IF XX=0 THEN 8180
8160 XFLIP=NFLIP(I):IF=I:XLC=LC(I)
8180 NEXT I
9000 RETURN
10000 REM HANDIC SUBROUTINE
10010 NHD=0
10020 INPUT "DO YOU WISH TO BE GIVEN A HANDICAP?",DRSPON$
10030 IF DRSPON$="Y" THEN 10120
10040 INPUT "DO YOU WISH TO GIVE ME A HANDICAP?",DRSPON$
10050 IF DRSPON$="N" THEN 10170
10060 NAH=-OC
10070 INPUT "HOW MANY CORNERS(1-4)",NHD
10080 IF NHD<1 OR NHD>4 THEN 10070
10090 GOSUB 11000
10100 SNM=NM:SNHD=NHD:NM=0:NHD=0:GOSUB 3500:NM=SNM:NHD=SNHD
10110 GOTO 10170
10120 NAH=OC
10130 INPUT "HOW MANY CORNERS(1-4)",NHD
10140 IF NHD<1 OR NHD>4 THEN 10130
10150 GOSUB 11000
10160 SNM=NM:SNHD=NHD:NM=0:NHD=0:GOSUB 3500:NM=SNM:NHD=SNHD
10170 RETURN
11000 REM HANDI SUBROUTINE
11010 NCI(1)=2:NCJ(1)=2:NCI(2)=9:NCJ(2)=9:NCI(3)=2:NCJ(3)=9:NCI(4)=9:NCJ(4)=2
11020 SIGN=-1
11030 IF NAH=OC THEN SIGN=1
11040 FOR I=1 TO NHD
11050 I1=NCI(I)
11060 I2=NCJ(I)
11070 B((I1-1)*10+I2)=SIGN*OC
11075 NEXT I
11080 RETURN
12000 CALL 3072:CALL -936
12010 POKE 801,0: POKE 812,170: POKE 806,1: POKE 807,0
12020 FOR I=12 TO 156
12040 POKE 800,12: POKE 802,I:CALL 3780
12060 POKE 800,224:CALL 3786
12080 NEXT I
13000 POKE 812,0
13010 FOR I=20 TO 148 STEP 16
13020 POKE 800,22: POKE 802,I:CALL 3780
13040 POKE 800,214:CALL 3786
13060 NEXT I
13100 FOR I=21 TO 213 STEP 24
13110 POKE 800,I: POKE 802,20:CALL 3780
13130 POKE 802,148:CALL 3786
13150 NEXT I
13200 FOR I=1 TO 8
13220 POKE 800,2: POKE 802,20+(I-1)*16+5
13240 CALL 3761
13250 POKE 28,255: POKE 804,(5448+I*26) MOD 256: POKE 805,(5448+I*26)/256:CALL 3805
13260 NEXT I
13300 FOR I=1 TO 8
13310 POKE 800,22+(I-1)*24+8: POKE 802,2:CALL 3761
13340 POKE 28,255: POKE 804,(5448+I*26) MOD 256: POKE 805,(5448+I*26)/256:CALL 3805
13360 NEXT I
13990 RETURN
20000 TEXT :CALL -936
20100 VTAB 2:CALL -384:TAB 8:PRINT "HIGH RESOLUTION OTHELLO":CALL -380
20200 PRINT :TAB 8:PRINT "CONCOCTED BY JIM HILGER"
20400 VTAB 15:PRINT "WARNING: THIS GAME SETS LOMEM TO A WEIRD";:PRINT "NUMBER. IF YOU VALUE YOUR SANITY, RESET";
20500 PRINT "LOMEM TO 2048 WHEN OTHELLO IS THROUGH!"
20600 VTAB 20:PRINT "UNFORTUNATELY, THIS GAME HAS SNOB APPEAL";:PRINT "-- IT REQUIRES A 48K APPLE. PLEASE"
20700 PRINT "GO BUY MORE CORE AT THIS TIME, IF YOU":PRINT "HAVE LESS THAN 48K."
20900 RETURN