1 REM Ins{nd av Thomas Andersson <3917> 1985-09-13 03.05.42 10 ! ********************************************************************** 20 ! Program LUFFAR.806 Utg}va 3.0 1985-09-12 30 ! av B M Lund, {ndrad av T Andersson 40 ! Ins{nd av samma 50 ! F|r ABC806 60 ! Testad p} ABC806 70 ! Jag har f|rs|kt att l{gga lite vackra f{rger p} programmet samt {ndrat lite 80 ! p} felhanteringen. Programmet sp}rar ur ibland och s{tter tecken utanf|r 90 ! matrisen,men det kan s{kert n}n snitsig person r{tta till. 100 ! ********************************************************************** 110 ! 120?WIDTH 40 130 Ccr=40 : True=-1 : False=0 140 Z=FNB|rjan : IF Z=True GOTO 150 ELSE IF Z=False Z=FNMessage('PROGRAMMET [R F\R 806 !! TRYCK ',24) : GOTO 140 150 SINGLE : INTEGER : EXTEND 160 ! 170 DIM O%(14%),A%(2%,8%),A$(4%),X%(14%),Z%(14%) 180 DIM C%(2%,30%),T%(28%,28%),U%(3%,2%) 190 X1%=30000% : O1%=30001% 200 H1%=14% : H2%=14% : L1%=14% : L2%=14% 210 RANDOMIZE 220 RESTORE 230 FOR I%=1% TO 14% 240 READ Z%(I%) 250 DATA 1,2,4,4,8,16,16,32,64,64,128,256,512,1024 260 NEXT I% 270 FOR I%=1% TO 14% 280 READ X%(I%) 290 DATA 4,8,16,16,32,64,64,128,1000,0,0,-1,-1,-1 300 NEXT I% 310 FOR I%=1% TO 14% 320 READ O%(I%) 330 DATA 8,16,32,32,64,128,128,256,-1,0,-1,-1,-1,-1 340 NEXT I% 350 FOR I%=1% TO 2% 360 FOR J%=1% TO 8% 370 READ A%(I%,J%) 380 DATA 0,1,1,1,0,-1,-1,-1 390 DATA -1,-1,0,1,1,1,0,-1 400 NEXT J% 410 NEXT I% 420 FOR I%=5% TO 24% : FOR J%=5% TO 24% 430 T%(I%,J%)=0% : NEXT J% : NEXT I% 440 ; CHR$(12%); 450 ; GRN "> LUFFARSCHACK f|r matris 20 x 20 <" 460 ; : ; YEL "F|r att markera ett drag skriver du" 470 ; YEL "'rad','kolumn'. Om du vill skriva om" 480 ; YEL "spelplanen skriver du 0,0 i st{llet" 490 ; YEL "ditt drag." 500 ; : ; GRN+'Tryck p} en tangent n{r du {r redo ! '; : GET \$ 510 ; CYA CUR(10%,0%); : Z%=FNFr}ga% : IF Z%=True% THEN 550 ELSE IF Z%=False% 540 520 IF LEN(A$)<>1% THEN ; CHR$(7%),FNSuddarad$; : GOTO 500 530 ; 540 A1%=14% : A2%=14% : S1$="O" : GOSUB 2020 : GOTO 1470 550 ; CHR$(12%)+YEL+"Du f}r automatisk en markering" 560 ; YEL "i position 10,10 s} att vi f}r b{st" 570 ; YEL "plats p} spelplanen." 580 ; : ; CYA "Tryck p} en tangent n{r du {r redo ! "; : GET A$ 590 GOSUB 2020 : REM ** RITA SPELPLANEN 600 A1%=14% : A2%=14% : GOTO 710 610 ; GRN CUR(4%,27%);"Ditt drag:";CUR(5%,27%) 620 ; CHR$(7%);GRN CUR(5%,27%);STRING$(10%,32%);CUR(5%,28%); 630 ON ERROR GOTO 3060 : INPUT ''A1%,A2% 640 IF A1%=0% AND A2%=0% THEN GOSUB 2020 : GOTO 610 650 IF A1%>20% ; FNSuddafelsiffra$ : GOTO 610 660 IF A2%>20% ; FNSuddafelsiffra$ : GOTO 610 670 A1%=A1%+4% : A2%=A2%+4% 680 IF T%(A1%,A2%)=0% THEN 710 690 ; CHR$(7%) : ; CUR(20%,26%)+RED+"UPPTAGET !" 700 GOTO 610 710 T%(A1%,A2%)=X1% 720 ; CUR(20%,26%);STRING$(10%,32%) 730 S1$=RED+"X" 740 GOSUB 2010 : REM ** MARKERA P] SK[RMEN 750 IF A1%>H1% THEN H1%=A1% 760 IF A1%H2% THEN H2%=A2% 780 IF A2%M% THEN 940 920 R%=R%+1% 930 NEXT L% 940 R%=R%*3% 950 IF T%(I1%-A1%,I2%-A2%)T%(I1%-A1%,I2%-A2%) THEN 990 970 R%=R%+1% 980 R%=R%+1% 990 R%=R%+1% 1000 IF L%<5% THEN 1050 1010 IF R%=7% THEN IF M%=O1% THEN 1030 1020 IF R%<>8% THEN 1050 1030 IF U%(1%,1%)=-1% THEN 1050 1040 GOTO 1790 1050 IF M%=X1% THEN 1080 1060 X%=O%(R%) 1070 GOTO 1090 1080 X%=X%(R%) 1090 IF X%=0% THEN 1230 1100 IF L%<5% THEN 1130 1110 IF X%<0% THEN 1590 1120 IF L%=5% THEN 1140 1130 X%=X%/2% 1140 K1%=I1% : K2%=I2% 1150 FOR L%=1% TO 4% 1160 K1%=K1%+A1% : K2%=K2%+A2% 1170 IF T%(K1%,K2%)M% THEN 1230 1190 GOTO 1220 1200 T%(K1%,K2%)=T%(K1%,K2%)+X% 1210 X%=X%-Z%(R%) 1220 NEXT L% 1230 NEXT J% 1240 NEXT I2% 1250 NEXT I1% 1260 GOSUB 1900 1270 IF R%=1 THEN 1470 1280 I%=1% : R%=0% 1290 FOR I1%=L1%-2% TO H1%+2% 1300 FOR I2%=L2%-2% TO H2%+2% 1310 IF T%(I1%,I2%)>=X1% THEN 1370 1320 IF T%(I1%,I2%)=0% THEN 1370 1330 IF T%(I1%,I2%)=I% THEN 1390 1410 A1%=C%(1%,J%) 1420 A2%=C%(2%,J%) 1430 IF A1%<4% THEN 1390 1440 IF A1%>28% THEN 1390 1450 IF A2%<4% THEN 1390 1460 IF A2%>28% THEN 1390 1470 I1%=A1%-4% : I2%=A2%-4% : T%(A1%,A2%)=O1% 1480 ; GRN CUR(8%,27%);"Mitt drag:";CUR(9%,27%);STRING$(10%,32%) 1490 ; GRN CUR(9%,27%);I1%;",";I2%; 1500 S1$=GRN+"O" 1510 GOSUB 2010 1520 FOR I1%=5% TO 24% 1530 FOR I2%=5% TO 24% 1540 IF T%(I1%,I2%)>=X1% THEN 1560 1550 T%(I1%,I2%)=0% 1560 NEXT I2% 1570 NEXT I1% 1580 GOTO 610 1590 IF M%>X1% THEN 1660 1600 ; 1610 ; CHR$(7%) 1620 ; CUR(20%,27%)+RED+"GRATTIS !" 1630 ; CUR(21%,27%)+RED+"DU VANN JU !" 1640 ! 1650 ; CUR(23%,0%); : Z%=FNAvsluta% : IF Z%=True% Z%=FNTillmeny% ELSE GOTO 150 1660 K1%=I1%+A%(1%,J%) : K2%=I2%+A%(2%,J%) 1670 IF T%(K1%,K2%)=X1% THEN 1870 1850 U%(K%,1%)=K1% : U%(K%,2%)=K2% : K%=K%+1% 1860 IF I%=5% THEN 1890 1870 K1%=K1%+A%(1%,J%) : K2%=K2%+A%(2%,J%) 1880 NEXT I% 1890 GOTO 1050 1900 IF U%(1%,1%)=0% THEN 1990 1910 IF U%(1%,1%)=-1% THEN 1990 1920 R%=0% 1930 FOR I%=1% TO 3% 1940 IF R%>T%(U%(I%,1%),U%(I%,2%)) THEN 1960 1950 R%=T%(U%(I%,1%),U%(I%,2%)) : A1%=U%(I%,1%) : A2%=U%(I%,2%) 1960 NEXT I% 1970 R%=1% 1980 GOTO 2000 1990 R%=0% 2000 RETURN 2010 ; CUR(A1%-3%,A2%-2%);S1$ : RETURN 2020 ; CHR$(12);YEL " 11111111112" 2030 ; YEL " 12345678901234567890" 2040 FOR L1%=5 TO 24 2050 IF L1%<14 THEN L3%=1% ELSE L3%=0% 2060 ; YEL CUR(L1%-3%,L3%);L1%-4%;CUR(L1%-3%,22%);L1%-4%;CUR(L1%-3%,3%); 2070 FOR L2%=5 TO 24 2080 IF T%(L1%,L2%)=0 THEN ; CYA CHR$(127); : GOTO 2110 2090 IF T%(L1%,L2%)=X1% THEN ; RED "X"; : GOTO 2110 2100 ; GRN "O"; 2110 NEXT L2% 2120 NEXT L1% 2130 ; YEL CUR(22%,0%);" 12345678911111111112" 2140 ; YEL " 01234567890"; 2150 RETURN 2160 END 2170 ! 2180 DEF FNAvsluta% LOCAL In$=10,Kod%,Janej% 2190 ON ERROR GOTO 2300 2200 ! Globala variabler: True,False 2210 ! Externa funktioner: FNSuddarad$ 2220 WHILE NOT Janej% 2230 ; CUR(24%,0%); 2240 INPUT ''+CYA+'Vill du avsluta (J/N) 'In$; 2250 Kod%=ASCII(In$) AND 95% 2260 Janej%=(Kod%=74% OR Kod%=78%) 2270 IF NOT Janej% THEN ; FNSuddarad$; 2280 WEND 2290 ; : IF Kod%=74% THEN RETURN True% ELSE RETURN False% 2300 ; FNSuddarad$; : RESUME 2220 2310 FNEND 2320 DEF FNSuddarad$ LOCAL Radnr% 2330 Radnr%=PEEK(65363%) 2340 ; CUR(Radnr%,0%) SPACE$(80%); 2350 ; CUR(Radnr%,0%); 2360 RETURN '' 2370 FNEND 2380 DEF FNMeddela$(Y%,X%,In$) 2390 ; CYA CUR(Y%,X%) In$; 2400 RETURN "" 2410 FNEND 2420 DEF FNGet% LOCAL I$=1 2430 ! L{ser in ett tecken fr}n tangentbordet och omvandlar 2440 ! det till ASCII-v{rdet 2450 ! - FUNKTIONSV[RDE -ASCII-v{rde f|r l{st tecken 2460 ! - GLOBALA Cinchar -ASCII-v{rde f|r l{st tecken 2470 ! - Ec -Felnummer 2480 ! LOKALA VARIABLER : - I$ - Tecken fr}n fil 2490 ! H{mta tecken fr}n filen 2500 GET I$ 2510 ! Omvandla tecknet till ASCII-koden 2520 Cinchar%=ASCII(I$) 2530 ! Returnera ASCII-koden f|r tecknet 2540 RETURN Cinchar% 2550 FNEND 2560 DEF FNError%(T$) LOCAL Text$=80 2570 ! Parametrar: T$ -Felmeddelande 2580 ! Externa funktioner: FNMessage 2590 ; CHR$(7%); 2600 Text$='<'+T$+'>' 2610 RETURN FNMessage%(Text$,24%) ! Kvittera med CE 2620 FNEND 2630 DEF FNMessage%(T$,Kvittens%) LOCAL P% 2640 ! Globala variabler: Ccr - Radbredd (40/80 tkn) 2650 ! Parametrar: Kvittens - Tangent f|r kvittens 2660 ! . T$ - Meddelande 2670 ! Externa funktioner: FNCurpos 2680 ! . FNGet 2690 ! . FNCur$ 2700 P%=FNCurpos% 2710 ; RED CUR(24%,0%) SPACE$(Ccr%-1%); 2720 ; RED CUR(24%,Ccr%/2%-LEN(T$)/2%) T$; 2730 IF Kvittens%=0% THEN RETURN 0% 2740 WHILE FNGet%<>Kvittens% 2750 WEND 2760 ; RED CUR(24%,0%) SPACE$(Ccr%-1%) FNCur$(P%); 2770 RETURN 0% 2780 FNEND 2790 DEF FNCur$(Pos%)=CUR(Pos%,Pos%/256%) 2800 ! Parametrar: Pos - Heltal som omvandlas till cursosposition 2810 DEF FNCurpos%=SWAP%(PEEK2(65362%)) 2820 ! Funktionsv{rde: Cursorv{rde som heltal 2830 DEF FNFr}ga% LOCAL In$=10,Kod%,Janej% 2840 ON ERROR GOTO 2950 2850 ; CHR$(12%) 2860 ! Globala variabler: True,False 2870 ! Externa funktioner: FNSuddarad$ 2880 WHILE NOT Janej% 2890 INPUT ''+CYA+'Vill DU b|rja (J/N) 'In$; 2900 Kod%=ASCII(In$) AND 95% 2910 Janej%=(Kod%=74% OR Kod%=78%) 2920 IF NOT Janej% THEN ; CHR$(7%)+FNSuddarad$; 2930 WEND 2940 ; : IF Kod%=74% THEN RETURN True% ELSE RETURN False% 2950 Ec%=ERRCODE 2960 IF Ec%=53% Z%=FNError%('FUNKTIONSTANGENT TRYCK