1 REM Ins{nd av Lennart Einarsson <6554> 1986-06-07 02.11.17 10 REM ******************************** 20 REM * 3 - Dimensionellt luffar- * 30 REM * schack * 40 REM * taget fr}n * 50 REM * BASIC COMPUTER GAMES . * 60 REM * Modifierat och |versatt * 70 REM * till svenska f|r ABC80 och * 80 REM * dess GRAFIK av PETER STAHL * 90 REM ******************************** 100 IF PEEK(590%)<>40% ; INP(3%) 110 ; CHR$(12%,7%) 120 ; CHR$(151%)STRING$(39%,44%) 130 ; " 3-DIMENSIONELLT LUFFARSCHACK " 140 ; CHR$(151%)STRING$(39%,44%) 150 ; " (modifierat f|r ABC80 av Peter Stahl)" 160 ; 170 ; " Vill du ha instruktioner (J/N) ?"; 180 GET Q$ : ; Q$ : IF Q$='j' OR Q$='J' THEN 190 ELSE 310 190 ; CUR(7%,0%) : ; " Du spelar i en KUB med 4*4*4 rutor." 200 ; " Varje flyttning indikeras med ett 3- siffrigt nummer." 210 ; " Varje siffra {r fr}n 1 till 4." 220 ; " Siffrorna indikerar : 1/ PLAN" 230 ; " 2/ RAD" 240 ; " 3/ KOLUMN" 250 ; " i 123 d{r varje siffra kan vara" 260 ; " 1/2/3/4" 270 ; " Dina pj{ser indikeras med ett D" 280 ; ' Mina -"- -"- -"- -"- M' : ; : ; " Du kan vinna om du spelar bra, men det"; 290 ; ' {r sv}rare {n i vanlig '; 300 ; "luffarschack !" : ; : ; " Tryck return n{r du l{st f{rdigt"; : GET Q$ 310 ; CHR$(12%,7%);CUR(12%,9%)"Vill DU b|rja (J/N) ?"; : GET Q$ : IF Q$='j' OR Q$='J' THEN S=1 ELSE S=2 320 ; CHR$(12%) : IF S=2 THEN ; CUR(12%,13%)"D} b|rjar jag" : FOR I=1 TO 2500 : NEXT I ELSE P%=0% 330 RESTORE : ; CHR$(12%,7%) 340 K%=28% : L%=27% : M%=31% 350 FOR I%=1% TO 21% : ; CUR(I%,M%-1%)CHR$(151%) : NEXT I% 360 FOR I%=0% TO 22% STEP 22% : ; CUR(I%,M%+1%)"1 2 3 4" : NEXT I% 370 FOR J%=1% TO 20% STEP 5% : FOR I%=J%+1% TO J%+4% : ; CUR(I%,K%)I%-J% : NEXT I% : NEXT J% 380 FOR I%=1 TO 4% : K%=5%*(I%-1%)+1% 390 FOR J%=K% TO K%+3% : ; CUR(J%+1%,L%)I% : NEXT J% : NEXT I% 400 ; CUR(1%,M%)"<,<,<,<,4" 410 J%=2% : GOSUB 450 420 ; CUR(5%,M%)"5 5 5 5 5" 430 ; CUR(6%,M%)"=,=,=,=,5" 440 J%=7% : GOSUB 450 : GOTO 460 450 FOR I%=J% TO J%+2% : ; CUR(I%,M%)"u u u u 5" : NEXT I% : RETURN 460 ; CUR(10%,M%)"5 5 5 5 5" 470 ; CUR(11%,M%)"=,=,=,=,5" 480 J%=12% : GOSUB 450 490 ; CUR(15%,M%)"5 5 5 5 5" 500 ; CUR(16%,M%)"=,=,=,=,5" 510 J%=17% : GOSUB 450 520 ; CUR(20%,M%)"5 5 5 5 5" 530 ; CUR(21%,M%)"-,-,-,-,%" 540 ; CUR(0%,0%)" 3-Dimensionellt Luffarschack" 550 ; CHR$(151%)STRING$(28%,44%) 560 ; " M = Mina pj{ser" : ; " D = Dina pj{ser" : ; " V = Vinnande rad" : ; " Sl} in vertikalt nr#" 570 ; " + horisontalt nr# !" 580 DIM X(64%),L(76%),M(76%,4%),Y(16%) 590 FOR I%=1% TO 16% : READ Y(I%) : NEXT I% 600 FOR I%=1% TO 76% : FOR J%=1% TO 4% : READ M(I%,J%) : NEXT J% : NEXT I% 610 FOR I%=1% TO 64% : X(I%)=0 : NEXT I% 620 Z=1 : IF S=2 THEN 710 630 ; CUR(8%,1%)"Ditt drag" 640 ONERRORGOTO 640 : ; CUR(10%,0%)SPACE$(20%);CUR(8%,11%);CHR$(7%); : INPUT J1 650 ONERRORGOTO 0 : IF J1<111 THEN 640 660 Q1=J1 : GOSUB 1460 670 FOR I%=1% TO 3% : IF Q(I%)<1 OR Q(I%)>4 THEN 640 ELSE NEXT I% 680 ; CUR(13%,0%)SPACE$(26%);CUR(14%,0%)SPACE$(26%);CUR(15%,0%)SPACE$(26%) 690 GOSUB 1430 : M=16*K1+4*K2+K3-20 : IF X(M)<>0 THEN 640 700 X(M)=1 : ]$="D" : GOSUB 1450 710 ; CUR(13%,1%)"Hmm, v{nta !!." : GOSUB 1100 720 FOR J%=1% TO 3% : FOR I%=1% TO 76% : ON J% GOTO 740,770,840 730 NEXT I% : NEXT J% : GOTO 980 740 IF L(I%)<>4 THEN 730 : OUT 6,7 : ; CUR(15%,1%)"DU VINNER med f|ljande:" 750 FOR J%=1% TO 4% : Q%=1% : M=M(I%,J%) : GOSUB 1070 : NEXT J% : Q%=0% 760 FOR I%=1% TO 4% : ]$="V" : Q1=Q1%(I%) : GOSUB 1460 : GOSUB 1450 : NEXT I% : GOTO 1040 770 IF L(I%)<>15 THEN 730 780 FOR J%=1% TO 4% : M=M(I%,J%) : IF X(M)<>0 THEN 800 : X(M)=5 790 ; CUR(13%,1%)"JAG flyttar till:"; : ]$="M" : GOSUB 1070 : GOTO 810 800 NEXT J% 810 OUT 6,251 : ; CUR(15%,1%)"VINNANDE med f|ljande:" 820 FOR J%=1% TO 4% : M=M(I%,J%) : Q%=1% : GOSUB 1070 : NEXT J% : Q%=0% 830 FOR I%=1% TO 4% : ]$="V" : Q1=Q1%(I%) : GOSUB 1460 : GOSUB 1450 : NEXT I% : GOTO 1040 840 IF L(I%)<>3 THEN 730 : ; CUR(13%,1%)"Fint f|rs|k ! ";CUR(14%,1%)"JAG flyttar till:"; 850 FOR J%=1% TO 4% : M=M(I%,J%) : IF X(M)<>0 THEN 870 : X(M)=5 : ]$="M" : GOSUB 1070 860 GOTO 630 870 NEXT J% : GOTO 980 880 FOR I%=1% TO 76% : L(I%)=X(M(I%,1%))+X(M(I%,2%))+X(M(I%,3%))+X(M(I%,4%)) 890 L=L(I%) : IF L<2 OR L>=3 THEN 920 ELSE IF L>2 THEN 1330 900 FOR J%=1% TO 4% : IF X(M(I%,J%))<>0 THEN 910 : X(M(I%,J%))=1/8 910 NEXT J% : NEXT I% : GOSUB 1100 920 FOR I%=1% TO 76% 930 IF L(I%)=1/2 OR L(I%)=1+3/8 THEN 1380 : NEXT I% : GOTO 1150 940 Z=1 950 IF X(Y(Z))=0 THEN 960 : Z=Z+1 : IF Z<>17 THEN 950 ELSE 1120 960 M=Y(Z) : X(M)=5 970 ; CUR(13%,1%)"JAG flyttar till:"; : ]$="M" : GOSUB 1070 : GOTO 630 980 FOR I%=1% TO 76% : L(I%)=X(M(I%,1%))+X(M(I%,2%))+X(M(I%,3%))+X(M(I%,4%)) 990 L=L(I%) : IF L<10 OR L>=11 THEN 1020 ELSE IF L>10 THEN 1330 1000 FOR J%=1% TO 4% : IF X(M(I%,J%))<>0 THEN 1010 : X(M(I%,J%))=1/8 1010 NEXT J% 1020 NEXT I% : GOSUB 1100 1030 FOR I%=1% TO 76% : IF L(I%)=.5 OR L(I%)=5+3/8 THEN 1380 : NEXT I% : GOSUB 1430 : GOTO 880 1040 FOR I=1 TO 500 : NEXT I : OUT 6,0 1050 ; CUR(20,1)"Vill DU spela igen";CUR(21,1)"(J/N) ?";CHR$(7%); : GET Q$ 1060 IF Q$='J' OR Q$='j' THEN 310 ELSE CHAIN "" 1070 K1=FIX((M-1)/16)+1 : J2=M-16*(K1-1) : K2=FIX((J2-1)/4)+1 : K3=M-(K1-1)*16-(K2-1)*4 : M=K1*100+K2*10+K3 1080 IF Q%<>1% THEN 1090 : ; M; : Q1%(J%)=M : RETURN 1090 ]$="M" : ; M; : Q1=M : GOSUB 1460 : GOSUB 1450 : RETURN 1100 FOR S=1% TO 76% : J1=M(S,1) : J2=M(S,2) : J3=M(S,3) : J4=M(S,4) : L(S)=X(J1)+X(J2)+X(J3)+X(J4) : NEXT S 1110 RETURN 1120 FOR I%=1% TO 64% : IF X(I%)<>0 THEN 1140 : X(I%)=5 : M=I% 1130 ; CUR(13%,1%)"JAG pr|var med:"; : ]$="M" : GOSUB 1070 : ; : GOTO 630 1140 NEXT I% : ; CUR(17%,1%)"Spelet {r oavgjort!" : GOTO 1040 1150 FOR K%=1% TO 18% : P=0 : FOR I%=4*K%-3 TO 4*K% : FOR J%=1% TO 4% 1160 P=P+X(M(I%,J%)) : NEXT J% : NEXT I% 1170 IF P<4 THEN 1180 ELSE IF P<5 THEN 1190 ELSE IF P<9 THEN 1180 ELSE IF P<10 THEN 1190 1180 NEXT K% : GOSUB 1430 : GOTO 940 1190 S=1/8 1200 FOR I%=4*K%-3 TO 4*K% : GOTO 1390 1210 NEXT I% 1220 S=0 : GOTO 1200 1230 DATA 1,49,52,4,13,61,64,16,22,39,23,38,26,42,27,43,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20 1240 DATA 21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53 1250 DATA 54,55,56,57,58,59,60,61,62,63,64,1,17,33,49,5,21,37,53,9,25,41,57,13,29,45,61,2,18,34,50,6,22,38,54,10 1260 DATA 26,42,58,14,30,46,62,3,19,35,51,7,23,39,55,11,27,43,59,15,31,47,63,4,20,36,52,8,24,40,56,12,28,44,60,16,32 1270 DATA 48,64,1,5,9,13,17,21,25,29,33,37,41,45,49,53,57,61,2,6,10,14,18,22,26,30,34,38,42,46,50,54,58,62 1280 DATA 3,7,11,15,19,23,27,31,35,39,43,47,51,55,59,63,4,8,12,16,20,24,28,32,36,40,44,48,52,56,60,64 1290 DATA 1,6,11,16,17,22,27,32,33,38,43,48,49,54,59,64,13,10,7,4,29,26,23,20,45,42,39,36,61,58,55,52 1300 DATA 1,21,41,61,2,22,42,62,3,23,43,63,4,24,44,64,49,37,25,13,50,38,26,14,51,39,27,15,52,40,28,16 1310 DATA 1,18,35,52,5,22,39,56,9,26,43,60,13,30,47,64,49,34,19,4,53,38,23,8,57,42,27,12,61,46,31,16 1320 DATA 1,22,43,64,16,27,38,49,4,23,42,61,13,26,39,52 1330 FOR J%=1% TO 4% : IF X(M(I%,J%))<>1/8 THEN 1370 : X(M(I%,J%))=5 : IF L(I%)<5 THEN 1350 1340 ; CUR(13%,1%)"Vad g|r du nu:";CUR(14%,1%)"JAG flyttar till:"; : GOTO 1360 1350 ; CUR(13%,1%)"Din r{v ! ";CUR(14%,1%)"Precis i r{tt tid";CUR(15%,1%)"flyttar jag till:"; 1360 M=M(I%,J%) : ]$="M" : GOSUB 1070 : GOTO 630 1370 NEXT J% : ; CUR(19%,1%)"JAG ger mig !" : GOTO 1040 1380 S=1/8 1390 IF I%-FIX(I%/4)*4>1 THEN 1400 : A=1 : GOTO 1410 1400 A=2 1410 FOR J%=A TO 5-A STEP 5-2*A : IF X(M(I%,J%))=S THEN 1420 : NEXT J% : GOTO 1210 1420 X(M(I%,J%))=5 : M=M(I%,J%) : ; CUR(13%,1%)"JAG flyttar till:"; : GOSUB 1070 : GOTO 630 1430 FOR I%=1% TO 64% : IF X(I%)<>1/8 THEN 1440 : X(I%)=0 1440 NEXT I% : RETURN 1450 Q1=30+Q(1)*2 : Q2=(Q(3)-1)*5+1+Q(2) : ; CUR(Q2,Q1)]$ : RETURN 1460 FOR L%=1% TO 3% : Q9=Q1/10 : Q(L%)=10*(Q9-FIX(Q9)) : Q1=FIX(Q9) : NEXT L% 1470 K1=Q(3) : K2=Q(2) : K3=Q(1) : RETURN