PRINT DEFINT X-Y DIM x(15), nt(80) 'x(y): x dello zombie alla riga y 'nt(i): n. dei dt nell'i-esimo intervallo (intervallo 1: 1 o 2 sec, ' intervallo 2: 3 o 4 sec, intervallo 3: 5 o 6 sec, ..) RANDOMIZE TIMER CLS veri = 0 WHILE NOT (veri = 1 OR veri = 2) INPUT "1: tempi veri, 2: tempi 'abbreviati'"; veri WEND CLS m = 10: w = 1 / m: 'attesa media per nuovo arrivo e ampiezza porta FOR x = 1 TO 80: LOCATE 7, x: PRINT "="; : LOCATE 8, x: PRINT "="; : NEXT FOR x = 1 TO 8: LOCATE 7, 35 + x: PRINT " "; : LOCATE 8, 35 + x: PRINT " "; : NEXT FOR y = 9 TO 12: LOCATE y, 35: PRINT "|"; : LOCATE y, 44: PRINT "|"; : NEXT t2 = 0 t = TIMER WHILE 25 - nt(dt1) > 8 IF veri = 1 THEN WHILE TIMER < t + 1: WEND'faccio passare 1 sec per l'arrivo di un nuovo zombie t = TIMER ELSE t = t + 1 END IF t2 = t2 + 1' aggiorno l'orologio n = INT(RND * 80) + 1: x(0) = n' x del nuovo zombie FOR y = 14 TO 1 STEP -1: x(y) = x(y - 1): NEXT' gli zombie fanno un passo FOR y = 1 TO 13 ' traccio la nuova posizione degli zombie IF x(y + 1) > 0 THEN LOCATE y, x(y + 1): PRINT " "; 'cancello la posizione precedente IF y = 7 THEN 'y del muro IF splash <> 0 THEN LOCATE y, splash: PRINT "="; : splash = 0 'dopo lo splash di uno zombie ripristino il muro IF x(y) = 0 THEN 'non ci sono zombie alle riga y ELSEIF x(y) < 36 OR x(y) > 43 THEN 'lo zombie fa spalsh nel muro splash = x(y): LOCATE y, splash: PRINT "W"; : x(y) = 0 ELSEIF t1 = 0 THEN ' primo zombie che passa per la porta t1 = t2 ELSE 'nuovo zombie passato per la porta: valuto dt dal precedente dt = t2 - t1: t1 = t2: dt1 = dt'INT((dt+1)/2) 'classifico dt LOCATE 25 - nt(dt1), dt1: PRINT "X"; : nt(dt1) = nt(dt1) + 1 END IF END IF IF x(y) > 0 THEN LOCATE y, x(y): PRINT "O"; ' traccio la nuova posizione NEXT WEND INPUT "", a$