100 ONERR GOTO 2270 110 GOTO 2530: REM TEST 120 REM # START MELOPOLI # 130 REM # DINOSOFT 9/83 # 140 GOTO 2440: REM MAIN PROG 150 REM DELAY/NOTE 160 REM IN: DN=DURATA 170 REM CN=NOTA (NON x DY) 180 REM DELAY ENTRY: 190 CN = 0 200 REM NOTE ENTRY: 210 IF PEEK (KB) = 148 THEN ME = NOT ME: POKE KS,0 220 POKE NO,CN: POKE DU,DN 230 IF NOT ME THEN POKE NO,0: REM DISABLED 240 CALL MU 250 RETURN 260 REM SUONA MOTIVO 270 REM IN: MO$=MOTIVO 280 REM # RADDOPPIA NOTE 290 REM $ DIMEZZA NOTE 300 REM SP=PAUSA 310 DN = 40: REM DURATA BASE 320 FOR I = 1 TO LEN (MO$) 330 A$ = MID$ (MO$,I,1) 340 N = 1: REM NOTA 350 IF A$ = "#" THEN DN = DN * 2:N = 0 360 IF A$ = "$" THEN DN = DN / 2:N = 0 370 IF A$ = " " THEN A$ = CHR$ (34): REM PAUSA 380 IF N THEN CN = ASC (A$) - 34: GOSUB 210: REM SUONA NOTA 390 NEXT 400 RETURN 410 REM RILASCIO 420 POKE KS,0 430 IF PD AND PEEK (B0) > 127 THEN 420 440 RETURN 450 REM BOTTONE 460 GOSUB 420: REM RILASCIO 470 R = 0 480 GOSUB 730: IF NOT BP THEN R = R + 1: GOTO 480 490 R = SQR (R) / 10 500 R = RND ( - R): REM RND SEED 510 VTAB 24: HTAB 1: PRINT HK$; 520 RETURN 530 REM XDRAW PEDINA 540 REM IN: GI=GIOCATORE 550 P = PG%(GI): REM POSIZIONE 560 C = CT%(P): REM TIPO CASELLA 570 XDRAW SG%(GI) AT CX%(P) + OX%(C,GI - 1),CY%(P) + OY%(C,GI - 1) 580 RETURN 590 REM RETTANGOLO 600 REM IN: AX,AY=ANGOLO UL 610 REM LX,LY=LATI 620 X = AX + LX:Y = AY + LY 630 HPLOT AX,AY TO X,AY TO X,Y TO AX,Y TO AX,AY 640 RETURN 650 REM SELINPUT 660 REM SCELTA VS (0-VM) 670 REM E TEST BOTTONE PREMUTO 680 REM IN: VS=VALORE PRECED. 690 REM VM=VALORE MAX. 700 REM PD=PADDLE (1/0) 710 REM OUT: VS=VALORE (0-VM) 720 REM BP=BOTT.PREMUTO 730 IF PD THEN 810 740 REM TASTI 750 A = PEEK (KB) - 128: IF A > 0 THEN POKE KS,0 760 IF A = 8 THEN VS = VS - 1 + (VM + 1) * (VS = 0) 770 IF A = 21 THEN VS = VS + 1 - (VM + 1) * (VS = VM) 780 IF A = 20 THEN ME = NOT (ME) 790 BP = A = 13: RETURN 800 REM 810 REM PADDLE 820 P = PDL (0) * (VM + 1) / 256 830 IF ABS (P - VS) > .5 THEN VS = INT (P): REM ISTERESI 840 BP = PEEK (B0) > 127 850 IF PEEK (KB) = 148 THEN ME = NOT ME: POKE KS,0: REM SOUND 860 RETURN 870 REM INLINE 880 REM INPUT LINEA 890 REM (ANCHE NULLA) 900 REM IN: LM=LEN MAX. 910 REM PR$=PROMPT 920 REM (SOLO ENTRY 1) 930 REM OUT: IN$=STRINGA 940 REM ENTRY 1 (POS.FISSA) 950 VTAB 24: HTAB 1: PRINT HK$PR$" "; 960 REM ENTRY 2 (GENERICO) 970 IF PEEK (KB) = 148 THEN ME = NOT (ME) 980 POKE KS,0 990 IN$ = "" + "" 1000 L = LEN (IN$): GET A$ 1010 IF A$ = CR$ THEN 1070: REM END 1020 IF A$ = CHR$ (20) THEN ME = NOT ME: GOTO 1000 1030 IF (A$ > = "0" AND A$ < = "9") OR (A$ > = "A" AND A$ < = "Z") THEN IF L < LM THEN IN$ = IN$ + A$: PRINT A$;: GOTO 1000 1040 IF A$ < > BS$ OR L = 0 THEN 1000 1050 PRINT BS$" "BS$;: IF L = 1 THEN 990 1060 IN$ = LEFT$ (IN$,L - 1): GOTO 1000 1070 RETURN 1080 REM SINO 1090 REM IN: PR$=PROMPT 1100 REM OUT: SI=1/0 1110 LM = 1: GOSUB 940:SI = IN$ = "S" 1120 IF NOT SI AND IN$ < > "N" THEN CN = 1:DN = 50: GOSUB 210: GOTO 1110 1130 RETURN 1140 REM INPUT NUMERO 1150 REM (MAX 6 CIFRE) 1160 REM IN: PR$=PROMPT 1170 REM OUT: NU=NUMERO 1180 REM #ENTRY 1 (POS.FISSA) 1190 VTAB 24: HTAB 1: PRINT HK$PR$" "; 1200 REM #ENTRY 2 (GENERICO) 1210 IF PEEK (KB) = 148 THEN ME = NOT (ME) 1220 POKE KS,0:LM = 6 1230 IN$ = "" 1240 L = LEN (IN$): GET A$ 1250 IF A$ = CR$ AND L THEN NU = VAL (IN$): GOTO 1330: REM END 1260 IF A$ = CHR$ (20) THEN ME = NOT ME: GOTO 1240 1270 IF A$ = "O" THEN A$ = "0" 1280 IF A$ = "I" THEN A$ = "1" 1290 IF (A$ > = "0" AND A$ < = "9") THEN IF L < LM THEN IN$ = IN$ + A$: PRINT A$;: GOTO 1240 1300 IF A$ < > BS$ OR L = 0 THEN 1240 1310 PRINT BS$" "BS$;: IF L = 1 THEN 1230 1320 IN$ = LEFT$ (IN$,L - 1): GOTO 1240 1330 RETURN 1340 REM GIOCATORI 1350 REM INPUT PD,NG,NOMI 1360 REM E SEGNALINI 1370 REM OUT: PD=PADDLE (1/0) 1380 REM PB$="PREMI..." 1390 REM NG=N.GIOCATORI 1400 REM NG$(NG)=NOMI 1410 REM SG$(NG)=SEGNALINO 1420 REM OUT: GI=1.0 GIOCATORE 1430 PR$ = ME$(41):LM = 1: GOSUB 950: IF IN$ = "" THEN 1430: REM QUANTI GIOCATORI ? 1440 NG = VAL (IN$): IF NG < 2 OR NG > 6 THEN 1430 1450 LI = 105000 + 360000 / NG 1460 FOR I = 1 TO NG 1470 LG(I) = LI 1480 REM INPUT NOME 1490 PR$ = ME$(42) + STR$ (I) + " ?":LM = 8: GOSUB 950: IF IN$ = "" OR VAL (IN$) THEN 1490: REM GIOCATORE N. 1500 IF I > 1 THEN D = 0: FOR J = 1 TO I - 1:D = D OR (IN$ = NG$(J)): NEXT : IF D THEN CN = 1:DN = 50: GOSUB 210: GOTO 1490 1510 NG$(I) = IN$ 1520 HTAB 31: VTAB 3 * I - 1: PRINT HM$IN$HA$":"; 1530 REM SCELTA SEGNALINO 1540 X = 200:Y = 24 * I 1550 FOR S = 1 TO 8: DRAW S AT X + 9 * S,Y: NEXT 1560 VS = 0 1570 VM = 7: GOSUB 730:S = VS + 1 1580 XDRAW S AT X + 9 * S,Y:DN = 5: GOSUB 190: XDRAW S AT X + 9 * S,Y: IF NOT BP THEN 1570 1590 IF I > 1 THEN D = 0: FOR J = 1 TO I - 1:D = D OR (S = SG%(J)): NEXT : IF D THEN CN = 1:DN = 50: GOSUB 210: GOTO 1570 1600 DRAW S AT 196,24 * I - 14:SG%(I) = S 1610 FOR S = 1 TO 8: XDRAW S AT X + 9 * S,Y: NEXT 1620 NEXT 1630 REM 1640 PR$ = ME$(43): GOSUB 1110: REM VA TUTTO BENE ? 1650 IF NOT SI THEN HTAB 39: VTAB 23: PRINT HL$;: HTAB 28: VTAB 1: PRINT HU$HH$HF$;: GOTO 1430 1660 GI = INT (1 + (NG * RND (1))): REM ESTRAE PRIMO 1670 REM 1680 REM IMPREVISTI: 1690 FOR I = 0 TO 29 1700 R = INT (80 * RND (1)) 1710 IF NOT (IM%(R)) THEN 1700 1720 MI%(I) = IM%(R):IM%(R) = 0 1730 NEXT 1740 PI = 0: REM POINTER IMPR. 1750 RETURN 1760 REM START GAME 1770 TG = GI: REM SAVE 1780 FOR GI = 1 TO NG 1790 VTAB 3 * GI: HTAB 33: PRINT LG(GI) 1800 HTAB 31: VTAB 3 * GI - 1: PRINT HM$NG$(GI)HA$":"; 1810 DRAW SG%(GI) AT 196,24 * GI - 14 1820 GOSUB 550: REM DRAW PEDINE 1830 NEXT 1840 HCOLOR= 1: REM GREEN 1850 AX = 205:AY = 156:LX = 64:LY = 22 1860 GOSUB 620: REM RETTANGOLO 1870 HCOLOR= 3 1880 VTAB 21: HTAB 31: PRINT HZ$ST$(ST)HA$ 1890 HTAB 31: PRINT ME$(44): REM STAGIONE 1900 GI = TG: REM RESTORE 1910 RETURN 1920 REM INIT 1930 REM MUSICA 1940 POKE TI,32: REM STD. 1950 REM START HRCG & SHAPES 1960 CALL 24579: REM HRCG 1970 POKE 230,64: REM HG2 1980 POKE 232,0: POKE 233,114: REM LINK SHAPES 1990 HCOLOR= 3: ROT= 0: SCALE= 1 2000 VTAB 24: HTAB 1: PRINT ME$(45);:R = 0: POKE KS,0: REM PREMI RETURN PER COMINCIARE 2010 IF PEEK (KB) < > 141 THEN R = R + 1: GOTO 2010 2020 R = RND ( - R): REM INIT RND 2030 ST = 1: REM BASSA 2040 PR$ = ME$(46):LM = 1: GOSUB 950:PD = IN$ = "P": IF NOT PD AND IN$ < > "T" THEN 2040: REM TASTI O PADDLE ? 2050 A$ = ME$(47): IF PD THEN A$ = ME$(48): REM RETURN/IL PULSANTE 2060 PB$ = ME$(49) + A$: REM PREMI... 2070 RETURN 2080 REM NEW/OLD 2090 PR$ = ME$(50): REM UNA NUOVA PARTITA ? 2100 GOSUB 1110:OL = NOT SI 2110 IF NOT OL THEN 2250 2120 PR$ = ME$(27): GOSUB 1190: REM CODICE ? 2130 IF NOT NU THEN 2090 2140 VTAB 24: HTAB 1: PRINT HK$ME$(51)PB$;: GOSUB 460: REM METTI IL DISCO 3.3 2150 F$ = ME$(28) + STR$ (NU): REM PARTITA.MELOPOLI 2160 VTAB 1: PRINT : PRINT VE$F$: PRINT OP$F$: PRINT RD$F$ 2170 FOR I = 1 TO 28: INPUT GC%(I): NEXT 2180 FOR I = 1 TO 22: FOR J = 0 TO 2: INPUT AC%(I,J): NEXT : NEXT 2190 INPUT NG: FOR I = 1 TO NG: INPUT NG$(I),SG%(I),LG(I),DG%(I),PG%(I),FG%(I): NEXT 2200 INPUT GI,ST 2210 FOR I = 0 TO 29: INPUT MI%(I): NEXT 2220 INPUT PI,VV 2230 PRINT CL$F$ 2240 VTAB 24: HTAB 1: PRINT HK$ME$(30)PB$;: GOSUB 460: REM RIMETTI IL MELOPOLI 2250 RETURN 2260 REM ERROR 2270 CALL ER 2280 E = PEEK (222) 2290 VTAB 24: HTAB 1: PRINT HK$; 2300 IF E > 15 THEN PRINT HI$$ME$(38)E;ME$(39);: VTAB 24: PRINT PEEK (218) + 256 * PEEK (219);HN$;:DN = 255: GOSUB 190: IN# 0: PR# 0: HIMEM: 32768: TEXT : END : REM ERR IN LOC. 2310 IF E = 6 THEN PRINT ME$(52);: GOTO 2330: REM NON C'E' SUL DISCO 2320 PRINT HI$ME$(40)HN$;: REM ERRORE DEL DISCO! 2330 DN = 20:CN = 45 2340 FOR I = 1 TO 3 2350 GOSUB 210: NEXT 2360 PRINT " "PB$;: GOSUB 460 2370 GOTO 2440: REM RESTART 2380 REM 2390 REM ############# 2400 REM # MAIN PROG # 2410 REM ############# 2420 REM ENTRY CON VARIABILI 2430 REM GIA' A POSTO 2440 GOSUB 1940: REM INIT 2450 GOSUB 2090: REM NEW/OLD 2460 IF OL THEN 2480 2470 GOSUB 1430: REM GIOCATORI 2480 GOSUB 1770: REM START 2490 A = FRE (0) 2492 PRINT D$"BSAVE VT,A$7300,L$1200" 2494 PRINT D$"BSAVE VPT,A105,L12" 2500 VTAB 1: PRINT 2510 PRINT BR$: REM CHAIN GAME 2520 REM # TEST START # 2530 PRINT CHR$ (4)"BLOAD B": PRINT CHR$ (4)"BLOAD VP": PRINT CHR$ (4)"BLOAD V" 2540 GOTO 2440: REM MAIN 2550 GOTO 2440: REM MAIN