1 REM +++++++++++++++++++++++++++++++++
2 REM ! Program .... BRAIN
5 REM ! {ndrat av Sven Wickberg
6 REM ! Minne 16 Kbytes
7 REM ! Ins{nt av Sven Wickberg <1384>
8 REM +++++++++++++++++++++++++++++++++
100 REM SAVE BRAIN2 (vers.2 80 05 25 sw)
110 REM *******************************
120 REM * "BRAIN" *
130 REM * OTHELLO mot ABC80 *
140 REM * *
150 REM * COPYRIGHT (C) 1979 *
160 REM * *
170 REM * DATAINDUSTRIER AB /\L 07-29 *
180 REM * *
190 REM *******************************
200 REM
210 DIM C$=1%,A0$=1%,D1$=5%,I$=1%
220 DIM A%(7%,7%),A1%(7%,7%)
230 DIM B1%(7%,7%),B4%(7%,7%)
240 REM
250 PRINT CHR$(12%)SPACE$(10%);
260 PRINT "O T H E L L O (BRAIN)"
270 PRINT
280 PRINT "ABC80 UTMANAR DIG !"
290 PRINT
300 PRINT "Nyb|rjare rekommenderas v{lja sv}rig-"
310 PRINT "hetsgrad 1. F|r proffs finns grad 8."
320 PRINT
330 PRINT "Bet{nketiden {r en minut."
340 PRINT "(Du f}r svar mycket fortare om Du v{ljeren sv}righetsgrad mindre {n 6.)"
350 PRINT
360 PRINT "Du har O."
370 PRINT
380 PRINT "Beh|ver Du hj{lp s} tryck p} 'RETURN'."
390 PRINT : IF A0% THEN 630
400 PRINT "Kan Du reglerna (J/N)?";
410 GOSUB 2650 : IF A0$="J" THEN 630
420 PRINT CHR$(12%)"OTHELLO spelas p} en plan med 8*8 rutor.";
430 PRINT "Vid starten finns 4 brickor, tv} X och tv} O, utplacerade p} mitten."
440 PRINT
450 PRINT "Brickan m}ste placeras s} att den till- sammans med n}gon annan av dina brickor"
460 PRINT "omsluter minst en motst}ndarbricka."
470 PRINT
480 PRINT "Ett exempel: OX.XXXO OOQOOOO"
490 PRINT SPACE$(14%)"..XXX.. ..OOX.."
500 PRINT SPACE$(14%)"..OXO.. ..OXO.."
510 PRINT SPACE$(14%)"Fig. 1 Fig. 2"
520 PRINT
530 PRINT "Fig. 1 visar st{llningen f|re Ditt drag och Fig. 2 efter."
540 PRINT "Q markerar var Du placerade Din bricka."
550 PRINT
560 PRINT "Kan Du inte ta n}gon motst}ndarbricka"
570 PRINT "tvingas Du st} |ver."
580 PRINT
590 PRINT "Vinner g|r den som, n{r spelet {r slut, tagit flest rutor."
600 PRINT
610 PRINT "Tryck p} n}gon tangent f|r att b|rja.";
620 GET A0$ : A0%=-1% : GOTO 250
630 RANDOMIZE : F9%=-1% : ; : GOTO 650
640 GOSUB 2790
650 LET A0%=4%
660 S4%=0% : S5%=0% : M3%=0%
670 PRINT "Vill Du dra f|rst? ";
680 GOSUB 2650 : C$=A0$
690 LET A1%=2*RND : IF A1%=1% THEN A2%=2% ELSE A1%=2% : A2%=1%
700 FOR G%=0% TO 7% : FOR G1%=0% TO 7% : A%(G%,G1%)=0% : NEXT G1% : NEXT G%
710 LET A%(3%,3%)=A1% : A%(3%,4%)=A2% : A%(4%,3%)=A2% : A%(4%,4%)=A1%
720 IF F9% THEN 780
730 IF U1<1 THEN U1=1
740 IF S1%>S2% THEN U1=U1-1 ELSE IF S2%>S1% THEN U1=U1+1
750 IF U1>8 THEN U1=1+INT(8*RND)
760 GOTO 820
770 PRINT "F|rs|k igen"
780 ONERRORGOTO 770
790 PRINT "Sv}righetsgrad(1,2,....,7,8)"; : GET I$
800 LET U1=VAL(I$) : ONERRORGOTO 0
810 IF ABS(U1-4.5)>4 THEN 770
820 U%=U1/3 : U9%=U1 : IF U1=1 THEN U1=0
830 IF INT(U1/3)-(U1/3)=0 THEN T2%=0%
840 IF INT((U1+2)/3)-(U1+2)/3=0 THEN T2%=1%
850 IF INT((U1+1)/3)-(U1+1)/3=0 THEN T2%=2%
860 T=T2%*10% : T0=30 : GOSUB 1430
870 IF C$="J" THEN 2320
880 GOSUB 2960
890 LET T5%=62%-A0%
900 IF A0%>62% THEN T5%=0%
910 IF A0%<57% THEN T5%=5%
920 IF U%<2% THEN T5%=0%
930 LET A1%=1% : A2%=2% : GOSUB 1630
940 IF M1% AND M2% THEN 1180 ELSE M9%=M1%
950 IF M1% THEN ; CHR$(12%)"JAG KAN EJ" : GOSUB 1450 : GOTO 1030
960 LET M2%=0% : IF U%>1% AND A0%>4% THEN 1280
970 GOSUB 2030
980 A0%=A0%+1% : S5%=0%
990 I1%=M%+1% : J1%=N%+1%
1000 GOSUB 2090 : E%=1%
1010 GOSUB 2990
1020 S5%=S0% : GOSUB 1520
1030 IF A0%=64% THEN 1180
1040 A1%=1% : A2%=2% : GOSUB 2270
1050 IF S1%=0% OR S2%=0% THEN 1180
1060 PRINT : ; "ST[LLNINGEN [R: JAG";S1%;" DU";S2% : ;
1070 PRINT : GOTO 2320
1080 REM
1090 GOSUB 2720 : M3%=0%
1100 IF M1% THEN M2%=-1% : M3%=-1% : GOTO 880
1110 M%=I% : N%=J% : A1%=2% : A2%=1%
1120 GOSUB 2980
1130 GOSUB 2090 : S4%=S0%
1140 GOSUB 2990
1150 GOSUB 2790
1160 E%=2% : IF A0%=64% THEN 1180
1170 GOSUB 1570 : GOTO 880
1180 A1%=1% : A2%=2% : GOSUB 2270
1190 IF S1%>S2% THEN PRINT : ; "JAG VANN MED"S1%"-"S2% : GOTO 1220
1200 IF S2%>S1% THEN PRINT "DU VANN MED"S2%"-"S1% : ; : GOTO 1220
1210 PRINT "OAVGJORT" : ;
1220 ; " (Sv}righetsgrad"U9%")" : IF E%=1% THEN 1250
1230 IF S5%=0% AND S4%=0% THEN 1250
1240 GOSUB 1450
1250 ; : PRINT "Vill Du spela ett parti till? "; : GOSUB 2650
1260 LET F9%=0% : IF A0$="J" THEN 640 ELSE 3050
1270 REM
1280 FOR G%=0% TO 7% : FOR G1%=0% TO 7% : B4%(G%,G1%)=B1%(G%,G1%) : NEXT G1% : NEXT G%
1290 GOSUB 2960
1300 GOSUB 2230
1310 LET M%=M4% : N%=N4%
1320 GOSUB 2090 : A1%=2% : A2%=1%
1330 GOSUB 1630 : IF M1% THEN 1370
1340 GOSUB 2030
1350 LET B4%(M4%,N4%)=B4%(M4%,N4%)-B1%(M%,N%)
1360 GOSUB 2960
1370 LET A1%=1% : A2%=2%
1380 GOSUB 2250 : IF D0% THEN 1310
1390 FOR G%=0% TO 7% : FOR G1%=0% TO 7% : B1%(G%,G1%)=B4%(G%,G1%) : NEXT G1% : NEXT G%
1400 GOSUB 2980
1410 A1%=1% : A2%=2% : GOTO 970
1420 REM
1430 GOSUB 2780 : IF A0%=4% THEN ; "Startst{llning" : GOTO 1450
1440 PRINT " MITT DRAG "; : IF M9% THEN ; " - -" ELSE ; I1%;J1% : ;
1450 GOSUB 1590
1460 PRINT : PRINT
1470 IF S4%<>0% THEN PRINT "DU TOG"S4%;
1480 IF S5%<>0% THEN PRINT " JAG TAR"S5%;
1490 PRINT
1500 S4%=0% : S5%=0%
1510 RETURN
1520 IF M3% THEN 1430
1530 PRINT CUR(1%,20%)" MITT DRAG "I1%;J1%" " : ;
1540 PRINT CUR(3%,20%)" 1 2 3 4 5 6 7 8"
1550 FOR I0%=0% TO 7%
1560 GOSUB 2880 : NEXT I0% : GOTO 1460
1570 PRINT "Ditt drag var"I%+1%;J%+1%;
1580 IF U%<2% THEN PRINT ELSE ; " T]LAMOD jag t{nker."
1590 ; : PRINT " 1 2 3 4 5 6 7 8 (Sv}righetsgrad"U9%")"
1600 FOR I0%=0% TO 7%
1610 GOSUB 2890 : NEXT I0% : RETURN
1620 REM M|jligt
1630 LET M1%=-1% : T3%=3%*T5%*A1%
1640 FOR A%=0% TO 7% : FOR B%=0% TO 7%
1650 IF A1%(A%,B%)<>A1% THEN 1810
1660 FOR K%=-1% TO 1% : FOR L%=-1% TO 1%
1670 LET T4%=0% : T9%=0% : C%=1%
1680 LET K5%=A%+K% : L5%=B%+L%
1690 IF FNB%(K5%,L5%) THEN 1800
1700 IF A1%(K5%,L5%)<>A2% THEN 1800
1710 IF FNC%(K5%,L5%) THEN T4%=T4%+T3% : IF K5%=M4% AND L5%=N4% THEN T9%=-1%
1720 LET K5%=K5%+K% : L5%=L5%+L%
1730 IF FNB%(K5%,L5%) THEN 1800
1740 IF A1%(K5%,L5%)=A2% THEN C%=C%+1% : GOTO 1710
1750 IF A1%(K5%,L5%)<>0% THEN 1800 ELSE M1%=0%
1760 IF FNC%(K5%,L5%) THEN T4%=T4%+T3% : IF T9% THEN B4%(M4%,N4%)=600%+3%*S0%
1770 IF U%=0% THEN GOSUB 1840 : GOSUB 1820 : GOTO 1800
1780 IF B1%(K5%,L5%)=0% THEN GOSUB 1840 : ON A1% GOSUB 1820,1830
1790 LET B1%(K5%,L5%)=B1%(K5%,L5%)+T4%+3%*C%
1800 NEXT L% : NEXT K%
1810 NEXT B% : NEXT A% : RETURN
1820 LET B1%(K5%,L5%)=600%+T% : RETURN
1830 LET B1%(K5%,L5%)=T% : RETURN
1840 ON K5%+1% GOTO 1850,1860,1880,1880,1880,1880,1870,1850
1850 ON L5%+1% GOTO 1890,1900,1910,1910,1910,1910,1900,1890
1860 ON L5%+1% GOTO 1900,1920,2000,2000,2000,2000,1940,1900
1870 ON L5%+1% GOTO 1900,1960,2000,2000,2000,2000,1980,1900
1880 ON L5%+1% GOTO 1910,2000,2010,2010,2010,2010,2000,1910
1890 LET T%=8%*A1%*T1% : RETURN
1900 LET T%=3%*T1% : RETURN
1910 LET T%=4%*T1% : RETURN
1920 IF A1%(0%,0%) THEN T%=2%*T1% ELSE T%=-4%*T1%
1930 RETURN
1940 IF A1%(0%,7%) THEN T%=2%*T1% ELSE T%=-4%*T1%
1950 RETURN
1960 IF A1%(7%,0%) THEN T%=2%*T1% ELSE T%=-4%*T1%
1970 RETURN
1980 IF A1%(7%,7%) THEN T%=2%*T1% ELSE T%=-4%*T1%
1990 RETURN
2000 LET T%=T1% : RETURN
2010 LET T%=2%*T1% : RETURN
2020 REM B{sta st{llet
2030 LET M%=0% : N%=0% : FOR K%=0% TO 7% : FOR L%=0% TO 7%
2040 LET H%=RND+1.5 : ON H% GOSUB 2060,2070
2050 NEXT L% : NEXT K% : RETURN
2060 IF B1%(K%,L%)<=B1%(M%,N%) THEN RETURN ELSE M%=K% : N%=L% : RETURN
2070 IF B1%(K%,L%)