1 REM ++++++++++++++++++++++++++++++++ 2 REM ! Program .... MINDPLAY 3 REM ! Utg}va 830504 4 REM ! av (c) Erik ]str|m 7 REM ! Minne 16 Kbytes 8 REM ! Ins{nt av 1423 9 REM ++++++++++++++++++++++++++++++++ 10 REM 20 REM Screened by CRL. 30 REM 100 REM OBS! F|r att detta program ska 110 REM kunna k|ras m}ste man f|rst 120 REM k|ra programmet MINDLOAD 130 REM 140 DIM T1$=12%,S1$=12% 150 DIM R$=1%,S$=120%,T$=12%,F$(12%)=1% 160 DIM R0$(8%)=1%,R1$(8%)=1% 170 RANDOMIZE 180 ; CHR$(12%)TAB(10%)'MASTER MIND' 190 ; : ; : ; '\nskas instruktioner'; : GOSUB 2720 200 IF Z4% THEN 440 210 ; CHR$(12%)TAB(10%)'MASTER MIND' 220 ; : ; 'Spelet g}r till p} f|ljande s{tt:' 230 ; : ; 'Spelare A g|r en kod m.h.a ett' 240 ; 'best{mt antal olikf{rgade pinnar.' 250 ; : ; 'Spelare B ska d{refter f|rs|ka lista ut' : ; 'koden. Efter varje f|rs|k f}r B ett' 260 ; 'antal svarta eller vita po{ngpinnar.' : ; : ; 'En svart po{ng betyder att en av B:s' 270 ; 'kodpinnar var helt r{tt, och en vit' : ; 'betyder att f{rgen var r{tt, men' 280 ; 'placeringen fel.' 290 ; : ; 'Ex: A:s hemliga kod = CBBA' 300 ; ' B gissar : EBAC' 310 ; : ; ' B f}r 1 svart och 2 vita' 320 GOSUB 2790 330 ; CHR$(12%)TAB(10%)'MASTER MIND' 340 ; : ; 'Detta program spelar MASTER MIND p}' : ; 'vanligt s{tt, men i st{llet f|r olik-' 350 ; 'f{rgade pinnar anv{nds bokst{ver.' 360 ; : ; 'Jag kan {ven spela helt mot mig sj{lv.' 370 ; : ; 'N{r jag ska gissa din (eller min egen)' : ; 'kod, hinner jag testa ca. 100 000' 380 ; 'kombinationer per minut.' 390 ; : ; 'Du f}r b|rja gissa min kod!' 400 ; : ; 'Jag skriver vilka bokst{ver som f}r' : ; 'f|rekomma |verst till h|ger p} sk{rmen.' 410 ; : ; 'Observera piltangenternas ovanliga' : ; 'funktion under spelet.' 420 ; : ; '(Om du ger upp, kan du skriva FUSK)' 430 GOSUB 2790 440 ONERRORGOTO 440 450 ; CHR$(12%)TAB(10%)'MASTER MIND' 460 ; : ; : ; '\nskas: 1 = standard (4 pinnar,6 olika)' 470 ; TAB(8%)'2 = super (5 pinnar, 8 olika)' 480 ; TAB(8%)'3 = egen kombination' 490 INPUT Z6% 500 IF Z6%<1% OR Z6%>3% THEN 440 510 ON Z6% GOTO 520,530,550 520 F%=6% : P%=4% : GOTO 630 530 F%=8% : P%=5% : GOTO 630 540 IF Z6%<1% OR Z6%>3% THEN 440 550 ONERRORGOTO 550 560 ; : ; 'Hur l}nga koder |nskas'; : INPUT P% 570 IF P%<1% THEN 550 580 IF P%>8% THEN ; 'Ej mer {n 8, tack!' : GOTO 550 590 ONERRORGOTO 590 600 ; 'Hur m}nga olika bokst{ver ska vi' : ; 'anv{nda'; : INPUT F% 610 IF F%<1% THEN 590 620 IF F%>12% THEN ; 'Ej mer {n 12, tack!' : GOTO 590 630 ONERRORGOTO 0 640 F=F% : ; : ; 'Antal kombinationer =';F^P% 650 ; : ; 'Ska jag spela mot mig sj{lv'; : GOSUB 2720 660 Z3%=Z4% : IF NOT Z4% THEN 810 670 ONERRORGOTO 670 680 ; : ; 'Hur m}nga omg}ngar vill du spela' : ; 'mot mig'; : INPUT L9% 690 ONERRORGOTO 0 700 L2%=0% : L3%=0% 710 FOR I7%=1% TO L9% 720 L%=0% 730 GOSUB 2790 740 GOSUB 900 : GOSUB 2830 : GOSUB 2790 750 GOSUB 1160 : GOSUB 2830 760 L2%=L2%+L% : L3%=L3%+L1% 770 NEXT I7% 780 IF L2%=L3% THEN ; : ; 'Oavgjort' : GOTO 830 790 IF L2%32% THEN 970 1070 POKE 65012%,17% : ; 'S,V ='; 1080 GOSUB 2300 1090 ; S%','V% 1100 IF S%=P% THEN 1120 1110 L1%=L1%+1% : GOTO 950 1120 ; : ; 'Du klarade det p}'L1%' g}nger.' 1130 T1$=T$ : GOSUB 2540 1140 RETURN 1150 REM -------- datorn gissar ------- 1160 GOSUB 2630 1170 IF Z3% THEN 1200 1180 GOSUB 1900 : T$=S$ 1190 GOTO 1290 1200 ; CHR$(12%);'Nu {r det min tur att gissa.' 1210 ; : ; 'T{nk ut en kod med'P%' bokst{ver!' 1220 ; 'Skriv sedan upp den p} ett papper' 1230 ; 'eller sl} in den via tangentbordet nu.' 1240 ; 'Tryck sedan p} RETURN' 1250 ; : ; 'Dessa bokst{ver f}r f|rekomma: ' 1260 GOSUB 1960 1270 ; : ; S1$ 1280 ; : ; : GOSUB 2050 1290 T1$=S$ 1300 REM ---- b|rja ---- 1310 REM 1320 ; CHR$(12%) 1330 GOSUB 1900 1340 ; : ; '# 1 ';S$; 1350 FOR I%=1% TO P% 1360 FOR J%=1% TO F% 1370 IF MID$(S$,I%,1%)=F$(J%) THEN 1390 1380 NEXT J% 1390 POKE 49199%+I%,J% 1400 POKE 49169%+I%,F% 1410 NEXT I% 1420 POKE 49154%,56%,192% 1430 POKE 50004%,P% 1440 POKE 50009%,F% 1450 POKE 50066%,P% 1460 POKE 50104%,P% 1470 POKE 50110%,P% 1480 POKE 49170%,PEEK(49170%)+1% 1490 L%=1% 1500 GOTO 1620 1510 REM --- gissning --- 1520 REM 1530 Z0%=CALL(50000%) 1540 IF Z0% THEN 1850 1550 L%=L%+1% 1560 ; : ; '#';L%;TAB(7%); 1570 S$='' 1580 FOR I%=1% TO P% 1590 S$=S$+F$(PEEK(49169%+I%)) 1600 NEXT I% 1610 ; S$; 1620 GOSUB 2540 1630 REM ---- po{ng ---- 1640 REM 1650 POKE 65012%,17% : ; 'S,V '; : POKE 65012%,21% 1660 IF Z3% THEN 1700 1670 GOSUB 2300 1680 ; S%','V%; 1690 GOTO 1780 1700 GOSUB 2050 1710 ONERRORGOTO 1650 1720 IF MID$(S$,2%,1%)<>',' THEN 1650 1730 S%=VAL(LEFT$(S$,1%)) 1740 V%=VAL(RIGHT$(S$,3%)) 1750 ONERRORGOTO 0 1760 IF S%+V%>P% THEN 1650 1770 IF S%<0% OR V%<0% THEN 1650 1780 IF S%=P% THEN 1830 1790 R%=PEEK(49154%)+SWAP%(PEEK(49155%)) 1800 POKE R%,S%,V%,255% 1810 REM -------------- 1820 GOTO 1530 1830 ; : ; : ; 'Jag klarade det p}';L%;' g}nger!' 1840 RETURN 1850 ; : ; : ; 'KLANT!!! Du har gett mig felaktig' 1860 ; 'information. Vi f|rs|ker v{l en g}ng ' 1870 ; 'till, men var noggrannare nu.' 1880 GOTO 1210 1890 REM -------- g|r en kod --------- 1900 S$='' 1910 FOR I%=1% TO P% 1920 S$=S$+F$(RND*F%+1%) 1930 NEXT I% 1940 RETURN 1950 REM ---- skriv till}tna tecken --- 1960 RESTORE 1970 S1$='' 1980 FOR I%=1% TO F% 1990 READ R$ 2000 S1$=S1$+R$ 2010 NEXT I% 2020 RETURN 2030 REM --- Str{ng fr}n tang.bord --- 2040 REM 2050 L7%=10% 2060 K7%=PEEK(65012%) 2070 POKE 65013%,0% 2080 GET R$ 2090 IF ASC(R$)=13% THEN 2200 2100 IF ASC(R$)<>8% THEN 2130 2110 IF K7%=PEEK(65012%) THEN 2080 2120 GOTO 2160 2130 IF ASC(R$)<32% AND ASC(R$)<>9% THEN 2080 2140 IF PEEK(65012%)=K7%+L7% THEN 2080 2150 IF ASC(R$)=9% THEN POKE 65012%,PEEK(65012%)+1% : GOTO 2080 2160 ; R$; 2170 GOTO 2080 2180 REM 2190 REM H{mta str{ngen ur videoramet 2200 S$='' 2210 R7%=PEEK(65011%) 2220 T7%=31744%+128%*R7%-R7%/8%*984% 2230 FOR K7%=K7% TO K7%+L7%-1% 2240 S$=S$+CHR$(PEEK(T7%+K7%)) 2250 NEXT K7% 2260 RETURN 2270 REM ------ s{tt po{ng -------- 2280 REM 2290 REM --- start --- 2300 S%=0% : V%=0% 2310 FOR I%=1% TO P% 2320 R0$(I%)=MID$(T$,I%,1%) 2330 R1$(I%)=MID$(S$,I%,1%) 2340 NEXT I% 2350 REM --- svarta --- 2360 FOR I%=1% TO P% 2370 IF R0$(I%)<>R1$(I%) THEN 2400 2380 R0$(I%)='`' : R1$(I%)='~' 2390 S%=S%+1% 2400 NEXT I% 2410 REM 2420 REM ---- vita ---- 2430 FOR I%=1% TO P% 2440 FOR J%=1% TO P% 2450 IF R0$(I%)<>R1$(J%) THEN 2490 2460 R1$(J%)='~' 2470 V%=V%+1% 2480 GOTO 2500 2490 NEXT J% 2500 NEXT I% 2510 RETURN 2520 REM ----------------------------- 2530 REM skriv hemlig kod p} sk{rmen 2540 R%=PEEK(65011%) 2550 GOSUB 1960 2560 ; CUR(0%,0%)TAB(7%)T1$TAB(17%)S1$SPACE$(23%-F%) 2570 ; CUR(1%,0%)' 'CUR(1%,7%)STRING$(P%,35%)SPACE$(24%); 2580 POKE 31878%,151% 2590 POKE 65011%,R%,0% 2600 RETURN 2610 REM ---------- slump ----------- 2620 REM 2630 FOR I%=1% TO 12% : F$(I%)='' : NEXT I% 2640 RESTORE 2650 FOR I%=1% TO F% 2660 R%=(RND*F%)+1% 2670 IF F$(R%)>' ' THEN 2660 2680 READ F$(R%) 2690 NEXT I% 2700 RETURN 2710 REM ----------- ja/nej ---------- 2720 ; ' (J/N)'; : INPUT S$ 2730 IF S$<' ' THEN 2720 2740 S$=LEFT$(S$,1%) 2750 IF S$='J' OR S$='j' THEN Z4%=0% : RETURN 2760 IF S$='N' OR S$='n' THEN Z4%=-1% : RETURN 2770 GOTO 2720 2780 REM ------------ get ------------ 2790 ; CUR(23%,39%); : POKE 65013%,0% 2800 GET S$ 2810 RETURN 2820 REM ------ skriv st{llning ------ 2830 GOSUB 2790 : ; CHR$(12%); 2840 ; : ; ' Po{ng omg}ng'I7%':' 2850 ; : ; ' Dator 'L% 2860 ; ' M{nniska 'L1% 2870 IF I7%=1% THEN 2910 2880 ; : ; : ; ' Po{ng t.o.m. omg}ng'I7%-1%':' 2890 ; : ; ' Dator 'L2% 2900 ; ' M{nniska 'L3% 2910 ; : ; : ; ' Po{ng totalt:' 2920 ; : ; ' Dator 'L2%+L% 2930 ; ' M{nniska 'L3%+L1% 2940 RETURN 2950 REM That's all 2960 DATA A,B,C,D,E,F,G,H,I,J,K,L