1 ! SKJUTA6.BAC 2 ! Program av Magnus <8042> 1991 3 ! Programet andv{nder HRLAOD 4 ! 5 ! "CHAIN 'meny'" bort vid slut, 6 ! Om variabeln "Start" (rad 1790) {ndras till 120 fungerar det med 7 ! 512 kB RAM internt <7759> 8 ! 9 EXTEND : INTEGER 10 RANDOMIZE : RESTORE 20 ATTRIBUTE 1. 30 ! Skjuta5.bac 40 ; CHR$(12.) 50 IF N$="Level1" THEN GOSUB 1860 ELSE GOSUB 1530 60 GOSUB 2280 70 X.=10. : Y.=9. : X2.=60. : Y2.=9. : Li1.=3. : Li2.=3. : Po.=0. : Po2.=0. 80 Xa.=0. : Ya.=0. : F.=1. : Xa2.=0. : Ya2.=0. : F2.=1. 90 DEF FNUpp.(X.,Y.) 100 ; CUR(Y.,X.);GBLU;"h" 110 ; CUR(Y.+1.,X.);GGRN;CHR$(127.);CHR$(53.) 120 RETURN 0. 130 FNEND 140 DEF FNNer.(X.,Y.) 150 ; CUR(Y.,X.);GGRN;CHR$(127.);CHR$(53.) 160 ; CUR(Y.+1.,X.);GBLU;"*" 170 RETURN 0. 180 FNEND 190 DEF FNH|ger.(X.,Y.) 200 ; CUR(Y.,X.);GGRN;CHR$(127.);CHR$(127.);GBLU;CHR$(44.) 210 RETURN 0. 220 FNEND 230 DEF FNV{nster.(X.,Y.) 240 ; CUR(Y.,X.);GBLU;CHR$(44.);GGRN;CHR$(127.);CHR$(127.) 250 RETURN 0. 260 FNEND 270 DEF FNUpp2.(X.,Y.) 280 ; CUR(Y.,X.);GBLU;"h" 290 ; CUR(Y.+1.,X.);GRED;CHR$(127.);CHR$(53.) 300 RETURN 0. 310 FNEND 320 DEF FNNer2.(X.,Y.) 330 ; CUR(Y.,X.);GRED;CHR$(127.);CHR$(53.) 340 ; CUR(Y.+1.,X.);GBLU;"*" 350 RETURN 0. 360 FNEND 370 DEF FNH|ger2.(X.,Y.) 380 ; CUR(Y.,X.);GRED;CHR$(127.);CHR$(127.);GBLU;CHR$(44.) 390 RETURN 0. 400 FNEND 410 DEF FNV{nster2.(X.,Y.) 420 ; CUR(Y.,X.);GBLU;CHR$(44.);GRED;CHR$(127.);CHR$(127.) 430 RETURN 0. 440 FNEND 450 GOSUB 1970 460 ; CUR(0.,0.);RED;"po{ng spelare 1 ";Po2.; 470 ; " "; : FOR Q.=1. TO Li1. : ; CHR$(127.); : NEXT Q. 480 ; CUR(0.,40.);GRN;"po{ng spelare 2 ";Po.; 490 ; " "; : FOR Q.=1. TO Li2. : ; CHR$(127.); : NEXT Q. 500 IF SYS(5.)=0. THEN 700 510 GET A$ 520 IF A$="4" THEN Xa.=-.5 : Ya.=0. : F.=4. 530 IF A$="6" THEN Xa.=.5 : Ya.=0. : F.=3. 540 IF A$="8" THEN Xa.=0. : Ya.=-.25 : F.=1. 550 IF A$="2" THEN Xa.=0. : Ya.=.25 : F.=2. 560 IF A$="a" THEN Xa2.=-.5 : Ya2.=0. : F2.=4. 570 IF A$="d" THEN Xa2.=.5 : Ya2.=0. : F2.=3. 580 IF A$="w" THEN Xa2.=0. : Ya2.=-.25 : F2.=1. 590 IF A$="x" THEN Xa2.=0. : Ya2.=.25 : F2.=2. 600 IF A$=" " THEN 1230 610 IF A$<>"0" THEN 700 620 FOR Q.=0. TO 20. : OUT 34.,9. : NEXT Q. 630 ; CHR$(12) 640 Sk.=1. 650 IF F.=1. THEN Sxa.=0. : Sya.=-1. 660 IF F.=2. THEN Sxa.=0. : Sya.=1. 670 IF F.=3. THEN Sxa.=1. : Sya.=0. 680 IF F.=4. THEN Sxa.=-1. : Sya.=0. 690 Sx.=X. : Sy.=Y. : Sf.=F. 700 Rx.=X. : Ry.=Y. : Rx2.=X2. : Ry2.=Y2. 705 GOSUB 3000 710 X.=X.+Xa. 720 IF X.>77. THEN X.=77. 730 IF X.<1. THEN X.=1. 740 X2.=X2.+Xa2. 750 IF X2.>77. THEN X2.=77. 760 IF X2.<1. THEN X2.=1. 770 Y.=Y.+Ya. 780 IF Y.<1. THEN Y.=1. 790 IF Y.>21. THEN Y.=21. 800 Y2.=Y2.+Ya2. 810 IF Y2.<1. THEN Y2.=1. 820 IF Y2.>21. THEN Y2.=21. 830 IF Sk.=1. THEN GOSUB 1010 840 IF Sk2.=1. THEN GOSUB 1320 850 IF FNKrock.(X.,Y.)<>0. THEN X.=Rx. : Y.=Ry. 860 IF FNKrock.(X2.,Y2.)<>0. THEN X2.=Rx2. : Y2.=Ry2. 870 GOSUB 1150 880 IF F.=1. THEN Z.=FNUpp.(X.,Y.) 890 IF F.=2. THEN Z.=FNNer.(X.,Y.) 900 IF F.=3. THEN Z.=FNH|ger.(X.,Y.) 910 IF F.=4. THEN Z.=FNV{nster.(X.,Y.) 920 ; CUR(By.,Bx.);WHT NWBG RED;"100";BLK NWBG " " 930 IF INT(Y.+.5)=By. THEN GOSUB 2180 940 IF INT(Y2.+.5)=By. THEN GOSUB 2230 950 Ry.=Ry2. : Rx.=Rx2. : GOSUB 1150 960 IF F2.=1. THEN Z.=FNUpp2.(X2.,Y2.) 970 IF F2.=2. THEN Z.=FNNer2.(X2.,Y2.) 980 IF F2.=3. THEN Z.=FNH|ger2.(X2.,Y2.) 990 IF F2.=4. THEN Z.=FNV{nster2.(X2.,Y2.) 1000 GOTO 460 1010 Gx.=Sx. : Gy.=Sy. : Sx.=Sx.+Sxa. : Sy.=Sy.+Sya. 1020 OUT 34.,9. 1030 ; CUR(Gy.,Gx.);GBLK;CHR$(127.) 1040 IF Sx.<1. THEN Sk.=0. : RETURN 1050 IF Sx.>79. THEN Sk.=0. : RETURN 1060 IF Sy.<1. THEN Sk.=0. : RETURN 1070 IF Sy.>22. THEN Sk.=0. : RETURN 1080 IF FNKrock.(Sx.,Sy.)<>0. THEN Sk.=0. : RETURN 1090 IF Sf.=1. THEN ; CUR(Sy.,Sx.);GYEL;"h" 1100 IF Sf.=2. THEN ; CUR(Sy.,Sx.);GYEL;"*" 1110 IF Sf.=3. THEN ; CUR(Sy.,Sx.);GYEL;"," 1120 IF Sf.=4. THEN ; CUR(Sy.,Sx.);GYEL;"," 1130 IF INT(Sx.+.5)=INT(X2.+.5) THEN GOSUB 1180 1140 RETURN 1150 ; CUR(Ry.,Rx.);GBLK;CHR$(127.,127.,127.) 1160 ; CUR(Ry.+1.,Rx.);GBLK;CHR$(127.,127.,127.) 1170 RETURN 1180 IF INT(Sy.+.5)=INT(Y2.+.5) THEN Po.=Po.+10. : OUT 34.,10. : Sk.=0. : Li1.=Li1.-1. : OUT 34.,10. : GOSUB 2090 1190 IF F2=3 THEN 1220 1200 IF F2=4 THEN 1220 1210 IF INT(Sy.+.5)=INT(Y2.+.5)+1. THEN Po.=Po.+10. : OUT 34.,10. : Sk.=0. : Li1.=Li1.-1. : OUT 34.,10. : GOSUB 2090 1220 RETURN 1230 FOR Q.=0. TO 20. : OUT 34.,9. : NEXT Q. 1240 ; CHR$(12) 1250 Sk2.=1. 1260 IF F2.=1. THEN Sxa2.=0. : Sya2.=-1. 1270 IF F2.=2. THEN Sxa2.=0. : Sya2.=1. 1280 IF F2.=3. THEN Sxa2.=1. : Sya2.=0. 1290 IF F2.=4. THEN Sxa2.=-1. : Sya2.=0. 1300 Sx2.=X2. : Sy2.=Y2. : Sf2.=F2. 1310 GOTO 700 1320 Gx.=Sx2. : Gy.=Sy2. : Sx2.=Sx2.+Sxa2. : Sy2.=Sy2.+Sya2. 1330 OUT 34.,9. 1340 ; CUR(Gy.,Gx.);GBLK;CHR$(127.) 1350 IF Sx2.<1. THEN Sk2.=0. : RETURN 1360 IF Sx2.>79. THEN Sk2.=0. : RETURN 1370 IF Sy2.<1. THEN Sk2.=0. : RETURN 1380 IF Sy2.>22. THEN Sk2.=0. : RETURN 1390 IF FNKrock.(Sx2.,Sy2.)<>0. THEN Sk2.=0. : RETURN 1400 IF INT(Sx2.+.5)=INT(X.+.5) THEN GOSUB 1460 1410 IF Sf2.=1. THEN ; CUR(Sy2.,Sx2.);GYEL;"h" 1420 IF Sf2.=2. THEN ; CUR(Sy2.,Sx2.);GYEL;"*" 1430 IF Sf2.=3. THEN ; CUR(Sy2.,Sx2.);GYEL;"," 1440 IF Sf2.=4. THEN ; CUR(Sy2.,Sx2.);GYEL;"," 1450 RETURN 1460 IF F=3 THEN 1510 1470 IF F=4 THEN 1510 1480 IF INT(Sy2.+.5)=INT(Y.+.5) THEN Po2.=Po2.+10. : OUT 34.,10. : Sk2.=0. : Li2.=Li2.-1. : OUT 34.,10. : GOSUB 2090 1490 IF INT(Sy2.+.5)=INT(Y.+.5)+1. THEN Po2.=Po2.+10. : OUT 34.,10. : Sk2.=0. : Li2.=Li2.-1. : OUT 34.,10. : GOSUB 2090 1500 GOTO 1520 1510 IF INT(Sy2.+.5)=INT(Y.+.5) THEN Po2=Po2+10 : OUT 34,10 : Sk2=0 : Li2.=Li2.-1. : OUT 34,10 : GOSUB 2090 1520 RETURN 1530 N$="Level1" 1540 ; DBLE RED TAB(12.);"Skjuta II" : ; "" : ; "" 1550 ; GRN TAB(20.);"Spel av Magnus <8042> 1991 " : ; "" 1560 ; GRN " Spelare 1 styr med (2 ner) (8 upp) (4 v{nster) (6 h|ger) (0 Skjuta)" 1570 ; GRN " Spelare 2 styr med (x ner) (w upp) (a v{nster) (d h|ger) (spece Skjuta)" 1580 ; CUR(15.,35.);RED EL;"V{nta" 1590 INTEGER 1600 POKE 64256,243,213,197,245,229,123,6,192,203,255,14,52,237,121,225,241 1610 POKE 64272,193,209,251,201,0,0,0,0,243,213,197,245,229,123,6,192 1620 POKE 64288,203,191,14,52,237,121,225,241,193,209,251,201 1630 DEF FNInblk(Addr) 1640 Z=CALL(64256,Addr) 1650 RETURN True 1660 FNEND 1670 DEF FNUtblk(Addr) 1680 Z=CALL(64280,Addr) 1690 RETURN True 1700 FNEND 1710 DIM Graf$=0 1720 POKE VAROOT(Graf$),4096,SWAP%(4096),49152,SWAP%(49152),4096,SWAP%(4096) 1730 ! Skapa fil 1740 FGPICTURE 0,0,4 1750 FGCTL BLK+BLK+BLK+BLK+BLK 1760 FGPOINT 0,0,0 : FGFILL 255,239 1770 T$=N$+".pic" 1780 OPEN T$ AS FILE 1 1790 Start=24 1800 FOR X=Start+7 TO Start STEP -1 1810 Z=FNInblk(X) 1820 GET #1,Graf$ COUNT 4096 1830 Z=FNUtblk(X) 1840 NEXT X 1850 CLOSE 1 1860 DIM F(100) 1870 DIM V(100) 1880 ; CHR$(12) 1890 FGCTL BLK+BLK+BLK+BLK+BLK 1895 RESTORE 1940 1900 FOR V=1 TO 15 : READ F 1910 POKE 49152,14,7,6,V,62,F,237,121,201 1920 Z=CALL(49152) 1930 NEXT V 1940 DATA 1,2,34,35,38,39,1,17,49,51,123,12,68,71,119 1950 ; CHR$(12) 1960 RETURN 1970 EXTEND 1980 DEF FNKrock.(X.,Y.) LOCAL X1.,Y1.,F. 1990 X=INT(X.+.5) : Y=INT(Y.+.5) 2000 X1=((X*6.)/2.)+8. 2010 Y1=240.-(Y*10.)-10. 2020 F=FGPOINT(X1,Y1) : IF F<>0. THEN 2060 2030 F=FGPOINT(X1+3.,Y1) : IF F<>0. THEN 2060 2040 F=FGPOINT(X1+3.,Y1+10.) : IF F<>0. THEN 2060 2050 F=FGPOINT(X1,Y1+10.) : IF F<>0. THEN 2060 2055 F=FGPOINT(X1+1.,Y1+5.) : IF F<>0. THEN 2060 2060 RETURN F 2070 FNEND 2080 RETURN 2090 X.=10. : Y.=9. : X2.=60. : Y2.=9. : Sk.=0. : Sk1.=0. : ; CHR$(12.) 2100 Xa.=0. : Ya.=0. : Xa2.=0. : Ya2.=0. 2110 IF Li2.=0. THEN 2140 2120 IF Li1.=0. THEN 2160 2130 RETURN 2140 ; CHR$(12.);GRN;" Game over spelare 1" : ; 2150 GOTO 2350 2160 ; CHR$(12.);RED;" Game over spelare 2" : ; 2170 GOTO 2350 2180 IF INT(X.+.5)=Bx. THEN Po.=Po.+100. : GOSUB 2280 2190 IF INT(X.+.5)+1.=Bx. THEN Po.=Po.+100. : GOSUB 2280 2200 IF INT(X.+.5)-1.=Bx. THEN Po.=Po.+100. : GOSUB 2280 2210 IF INT(X.+.5)-2.=Bx. THEN Po.=Po.+100. : GOSUB 2280 2220 RETURN 2230 IF INT(X2.+.5)=Bx. THEN Po2.=Po2.+100. : GOSUB 2280 2240 IF INT(X2.+.5)+1.=Bx. THEN Po2.=Po2.+100. : GOSUB 2280 2250 IF INT(X2.+.5)-1.=Bx. THEN Po2.=Po2.+100. : GOSUB 2280 2260 IF INT(X2.+.5)-2.=Bx. THEN Po2.=Po2.+100. : GOSUB 2280 2270 RETURN 2280 ; CUR(By.,Bx.) BLK " " 2290 OUT 34.,10. 2300 By.=INT(19.*RND)+2. 2310 Bx.=INT(76.*RND)+2. 2320 IF FNKrock.(Bx.,By.)<>0. THEN 2300 2330 IF FNKrock.(Bx.+1.,By.)<>0. THEN 2300 2340 RETURN 2350 GET A$ 2360 ; CHR$(12.) : FGCTL BLK+BLK+BLK+BLK+BLK 2370 ; RED DBLE " G A M E O V E R" : ; : ; 2380 ; EL GRN " Skjuta II " : ; 2390 ; EL MAG " Av Magnus 1991" : ; : ; : ; 2400 ; EL CYA " Vil du spela en g}ng till j/n " 2410 IF SYS(5.)=0. THEN 2410 2420 GET A$ 2430 IF A$="j" THEN 10 2440 END 3000 IF Po.>500. THEN 3010 3005 IF Po2.<500. THEN RETURN 3010 IF N$="level2" THEN RETURN 3015 N$="level2" 3016 ; CHR$(12.) 3017 ; CUR(10.,30.);DBLE GRN "Level 2" 3019 GOSUB 1580 3020 GOSUB 2280 3030 GOSUB 2090 3040 RETURN