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%)A2% THEN 2210 2140 LET K5%=K5%+K% : L5%=L5%+L% 2150 IF FNB%(K5%,L5%) THEN 2210 2160 IF A1%(K5%,L5%)=A2% THEN C%=C%+1% : GOTO 2140 2170 IF A1%(K5%,L5%)<>A1% THEN 2210 2180 LET S0%=S0%+C% : FOR A%=0% TO C% 2190 LET K5%=K5%-K% : L5%=L5%-L% 2200 LET A1%(K5%,L5%)=A1% : NEXT A% 2210 NEXT L% : NEXT K% : RETURN 2220 REM Prova 2230 FOR M4%=0% TO 7% : FOR N4%=0% TO 7% 2240 IF B4%(M4%,N4%)=0% THEN 2250 ELSE D0%=-1% : RETURN 2250 NEXT N4% : NEXT M4% : D0%=0% : RETURN 2260 REM R{kna 2270 LET S1%=0% : S2%=0% 2280 FOR K%=0% TO 7% : FOR L%=0% TO 7% 2290 IF A%(K%,L%)=A1% THEN S1%=S1%+1% 2300 IF A%(K%,L%)=A2% THEN S2%=S2%+1% 2310 NEXT L% : NEXT K% : RETURN 2320 REM DIN TUR 2330 A1%=2% : A2%=1% 2340 GOSUB 2960 : GOSUB 1630 2350 IF M1% THEN PRINT "Du kan inte" : GOTO 1090 2360 O1%=O1%+1% 2370 IF O1%>4% THEN 2810 2380 IF A0%<6% AND O1%=1% THEN O1%=2% : ; : ; "Ange Ditt drag med RK (R=rad, K=kolumn)" : ; 2390 PRINT "DIN TUR (Sv}righetsgrad"U9%")" 2400 LET G5%=FNA%-3000% 2410 GOSUB 3000 : D1$=I$ : IF Z1% THEN 2700 ELSE IF I$=CHR$(8%) THEN 2410 2420 PRINT I$; : IF I$=CHR$(13%) THEN 2810 2430 GOSUB 3000 : IF Z1% THEN 2700 ELSE ; I$; 2440 IF I$=CHR$(8%) THEN ; " "I$; : GOTO 2410 2450 IF I$=CHR$(13%) THEN 2810 2460 GOSUB 3000 : IF Z1% THEN 2700 ELSE ; I$; 2470 IF I$=CHR$(8%) THEN ; " "I$; : D1$=LEFT$(D1$,1%) : GOTO 2430 2480 IF I$=CHR$(13%) THEN ; : GOTO 2550 2490 GOSUB 3000 : IF Z1% THEN 2700 ELSE ; I$; 2500 IF I$=CHR$(8%) THEN ; " "I$; : D1$=LEFT$(D1$,2%) : GOTO 2460 2510 IF I$=CHR$(13%) THEN 2530 2520 PRINT CHR$(7%) : ; "SK[RPNING svara ordentligt" : GOTO 2600 2530 IF MID$(D1$,2%,1%)<>"," THEN 2520 2540 PRINT : D1$=LEFT$(D1$,1%)+RIGHT$(D1$,3%) 2550 I%=ASC(D1$)-49% 2560 J%=ASC(RIGHT$(D1$,2%))-49% 2570 W0=I%-3.5 : W1=J%-3.5 2580 IF ABS(W0)<4 AND ABS(W1)<4 THEN 2610 2590 PRINT "P] BR[DET !?!" 2600 PRINT 'F\RS\K IGEN' : GOTO 2360 2610 IF A%(I%,J%)<>0% THEN PRINT "UPPTAGET" : GOTO 2360 2620 IF B1%(I%,J%)=0% THEN PRINT "OTILL]TET" : GOTO 2360 2630 LET A0%=A0%+1% 2640 LET O1%=0% : GOTO 1090 2650 GET A0$ : ; A0$ : IF A0$="j" THEN A0$="J" 2660 IF A0$="n" THEN A0$="N" 2670 IF A0$="J" OR A0$="N" THEN RETURN 2680 PRINT 'Svara "J" eller "N" '; 2690 GOTO 2650 2700 PRINT CHR$(7%) : GOSUB 2790 2710 PRINT "T[NK SNABBARE" : GOTO 2810 2720 REM RUTV[RDERING 2730 IF A0%>61% THEN T1%=0% : RETURN 2740 LET A4=A0% : T1%=T*EXP(-A4/T0) 2750 IF A0%=61% AND T2%>0% THEN T1%=T1%/T2% 2760 RETURN 2770 REM 2780 IF Z1% THEN Z1%=0% : RETURN 2790 PRINT CHR$(12%) : RETURN 2800 REM 2810 GOSUB 1430 2820 PRINT 'DINA ALTERNATIV [R:' : O0%=0% 2830 FOR M%=0% TO 7% : FOR N%=0% TO 7% 2840 IF B1%(M%,N%)=0% THEN 2870 2850 PRINT CHR$(M%+49%);CHR$(N%+49%)" "; 2860 O0%=O0%+1% : IF O0%>10% THEN O0%=0% : ; 2870 NEXT N% : NEXT M% : ; : O1%=0% : GOTO 2360 2880 PRINT CUR(I0%+4%,20%); 2890 PRINT I0%+1%; 2900 FOR J0%=0% TO 7% 2910 ON A%(I0%,J0%)+1% GOSUB 2930,2940,2950 2920 NEXT J0% : PRINT : RETURN 2930 PRINT " ."; : RETURN 2940 PRINT " X"; : RETURN 2950 PRINT " O"; : RETURN 2960 FOR G%=0% TO 7% : FOR G1%=0% TO 7% : B1%(G%,G1%)=0% 2970 LET A1%(G%,G1%)=A%(G%,G1%) : NEXT G1% : NEXT G% : RETURN 2980 FOR G%=0% TO 7% : FOR G1%=0% TO 7% : A1%(G%,G1%)=A%(G%,G1%) : NEXT G1% : NEXT G% : RETURN 2990 FOR G%=0% TO 7% : FOR G1%=0% TO 7% : A%(G%,G1%)=A1%(G%,G1%) : NEXT G1% : NEXT G% : RETURN 3000 IF PEEK(65013%)<>0% THEN GET I$ : D1$=D1$+I$ : Z1%=0% : RETURN 3010 IF G5%<>FNA% THEN 3000 ELSE Z1%=-1% : RETURN 3020 DEFFNA%=SWAP%(PEEK(65009%))+PEEK(65008%) 3030 DEFFNB%(K%,L%)=K%<0% OR K%>7% OR L%<0% OR L%>7% 3040 DEFFNC%(K%,L%)=K%=0% OR K%=7% OR L%=0% OR L%=7% 3050 ; CHR$(12%)CUR(10%,10%)"TACK OCH ADJ\!" 3060 CHAIN "START"