WURMFARM: SCREEN 12 RANDOMIZE TIMER COLLUMNS = 20 ROWS = 20 WIDTH , 60 TYPE STADIUM1 A AS INTEGER B AS INTEGER C AS INTEGER D AS INTEGER E AS INTEGER END TYPE TYPE STADIUM2 A AS INTEGER B AS INTEGER C AS INTEGER END TYPE TYPE STADIUM3 A AS INTEGER B AS INTEGER END TYPE DIM EING1$, EING2$ DIM C1 AS STADIUM1, C2 AS STADIUM2, C3 AS STADIUM3 DIM Y1(0 TO 5), Y2(0 TO 5) C1.A = 100 C2.A = 50 C3.A = 50 DO CLS PRINT PRINT PRINT " WURMFARM" PRINT " ~~~~~~~~" PRINT PRINT PRINT " 1 START" PRINT " 2 SETUP" PRINT " 3 QUIT" PRINT INPUT " PLEASE? ", EING1$ IF EING1$ = "2" THEN DO CLS PRINT PRINT PRINT " SETUP" PRINT " ~~~~~" PRINT PRINT PRINT " 1 ZEILEN "; ROWS PRINT " 2 SPALTEN "; COLLUMNS PRINT " 3 WšRMER "; C1.A PRINT " 4 PILZE "; C2.A PRINT " 5 SLIME "; C3.A PRINT PRINT " 6 RETURN" PRINT INPUT " PLEASE? ", EING2$ SELECT CASE EING2$ CASE "1" ROWS = ROWS + 5 IF ROWS > 50 THEN ROWS = 5 CASE "2" COLLUMNS = COLLUMNS + 5 IF COLLUMNS > 80 THEN COLLUMNS = 5 CASE "3" C1.A = C1.A + 10 IF C1.A > 200 THEN C1.A = 0 CASE "4" C2.A = C2.A + 10 IF C2.A > 200 THEN C2.A = 0 CASE "5" C3.A = C3.A + 10 IF C3.A > 200 THEN C3.A = 0 CASE ELSE END SELECT LOOP UNTIL EING2$ = "6" CLS END IF IF EING1$ = "3" THEN CLS: END LOOP UNTIL EING1$ = "1" MAX = COLLUMNS * ROWS CLS DIM SPOT(1 TO COLLUMNS, 1 TO ROWS) DIM PLACEX(1 TO MAX), PLACEY(1 TO MAX) DIM ENVIRONMENT(1 TO 9) DIM CODE(1 TO MAX) AS LONG, STATE(1 TO MAX) AS DOUBLE YEAR = 5 CREATURE = 0 DELAY = 0 WORM = 1 MUSHROOM = 2 SLIME = 3 A = C1.A B = C2.A C = C3.A C1.A = 0: C2.A = 0: C3.A = 0 FOR I = 1 TO A STEP 1 '120 Y = INT(RND * (ROWS - 1)) + 1 X = INT(RND * (COLLUMNS - 1)) + 1 GOSUB NEWWORM STATE(CREATURE) = STATE(CREATURE) + INT(RND * 4) + 1 NEXT I FOR I = 1 TO B STEP 1 '50 Y = INT(RND * (ROWS - 1)) + 1 X = INT(RND * (COLLUMNS - 1)) + 1 GOSUB NEWMUSHROOM STATE(CREATURE) = STATE(CREATURE) + INT(RND * 10) + 1 NEXT I FOR I = 1 TO C STEP 1 '40 Y = INT(RND * (ROWS - 1)) + 1 X = INT(RND * (COLLUMNS - 1)) + 1 GOSUB NEWSLIME NEXT I COLOR 7 LINE (19, 414)-(621, 466), , B XSTAT = 15 MS = MAX / 4 STAT = 1 Y2(0) = C1.B + C1.C + C1.D Y2(1) = C1.A: Y2(2) = C1.B: Y2(3) = C1.C: Y2(4) = C1.D: Y2(5) = C1.E DO _LIMIT 2 YEAR = YEAR + .5 IF CREATURE > 0 THEN I = 0 DO I = I + 1 'FOR J = 1 TO DELAY - DELAY / 2320 * CREATURE STEP 1 'NEXT J STATE(I) = STATE(I) + .5 IF STATE(I) / 10 ^ 4 - FIX(STATE(I) / 10 ^ 4) >= .1 THEN STATE(I) = STATE(I) + 1000 X = PLACEX(I) Y = PLACEY(I) IF STATE(I) / 10 ^ 4 - FIX(STATE(I) / 10 ^ 4) < .1 THEN SELECT CASE FIX(CODE(I) / 10 ^ 5) CASE 1 GOSUB WORM CASE 2 GOSUB MUSHROOM CASE 3 GOSUB SLIME CASE ELSE END SELECT END IF LOOP UNTIL I >= CREATURE I = 0 DO I = I + 1 IF FIX(10 * (STATE(I) / 10 ^ 4 - FIX(STATE(I) / 10 ^ 4))) > INT(RND * 5) + 3 THEN GOSUB ERASECREATURE END IF LOOP UNTIL I >= CREATURE END IF XSTAT = XSTAT + 5 IF XSTAT > 615 THEN COLOR 7 LINE (20, 415)-(620, 465), 0, BF XSTAT = 20 END IF IF STAT = 1 THEN Y1(0) = C1.B + C1.C + C1.D 'PRINT Y1(0) Y1(1) = C1.A: Y1(2) = C1.B: Y1(3) = C1.C: Y1(4) = C1.D: Y1(5) = C1.E FOR J = 5 TO 0 STEP -1 SELECT CASE J CASE 0 C = 15 CASE 1 C = 7 CASE 2 C = 2 CASE 3 C = 12 CASE 4 C = 6 CASE 5 C = 8 CASE ELSE END SELECT LINE (XSTAT, 465 - 50 * Y2(J) / MS)-(XSTAT + 5, 465 - 50 * Y1(J) / MS), C NEXT J STAT = 2 ELSE Y2(0) = C1.B + C1.C + C1.D 'PRINT Y2(0) Y2(1) = C1.A: Y2(2) = C1.B: Y2(3) = C1.C: Y2(4) = C1.D: Y2(5) = C1.E FOR J = 5 TO 0 STEP -1 SELECT CASE J CASE 0 C = 15 CASE 1 C = 7 CASE 2 C = 2 CASE 3 C = 12 CASE 4 C = 6 CASE 5 C = 8 CASE ELSE END SELECT LINE (XSTAT, 465 - 50 * Y1(J) / MS)-(XSTAT + 5, 465 - 50 * Y2(J) / MS), C NEXT J STAT = 1 END IF LOOP UNTIL INKEY$ = CHR$(27) GOTO QUIT NEWWORM: IF SPOT(X, Y) = 0 THEN CREATURE = CREATURE + 1 C1.A = C1.A + 1 IF RND > .5 THEN CODE(CREATURE) = 110000 ELSE CODE(CREATURE) = 120000 END IF STATE(CREATURE) = 100 LOCATE Y, X COLOR (7) PRINT CHR$(15) SPOT(X, Y) = CREATURE PLACEX(CREATURE) = X PLACEY(CREATURE) = Y END IF RETURN NEWMUSHROOM: IF SPOT(X, Y) = 0 THEN CREATURE = CREATURE + 1 CODE(CREATURE) = 230000 STATE(CREATURE) = 100 LOCATE Y, X COLOR (4) PRINT CHR$(5) SPOT(X, Y) = CREATURE PLACEX(CREATURE) = X PLACEY(CREATURE) = Y END IF RETURN NEWSLIME: IF SPOT(X, Y) = 0 THEN CREATURE = CREATURE + 1 CODE(CREATURE) = 330000 STATE(CREATURE) = 100 LOCATE Y, X COLOR (10) PRINT CHR$(42) SPOT(X, Y) = CREATURE PLACEX(CREATURE) = X PLACEY(CREATURE) = Y END IF RETURN ENVIRONMENT: FOR E = 1 TO 9 STEP 1 ENVIRONMENT(E) = -1 NEXT E IF PLACEY(I) > 1 THEN IF PLACEX(I) > 1 THEN ENVIRONMENT(1) = SPOT(X - 1, Y - 1) ENVIRONMENT(4) = SPOT(X - 1, Y) END IF ENVIRONMENT(2) = SPOT(X, Y - 1) IF PLACEX(I) < COLLUMNS THEN ENVIRONMENT(3) = SPOT(X + 1, Y - 1) ENVIRONMENT(6) = SPOT(X + 1, Y) END IF END IF IF PLACEY(I) < ROWS THEN IF PLACEX(I) > 1 THEN ENVIRONMENT(7) = SPOT(X - 1, Y + 1) END IF ENVIRONMENT(8) = SPOT(X, Y + 1) IF PLACEX(I) < COLLUMNS THEN ENVIRONMENT(9) = SPOT(X + 1, Y + 1) END IF END IF RETURN ENVPLACE: SELECT CASE E CASE 1 Y = Y - 1 X = X - 1 CASE 2 Y = Y - 1 CASE 3 Y = Y - 1 X = X + 1 CASE 4 X = X - 1 CASE 6 X = X + 1 CASE 7 Y = Y + 1 X = X - 1 CASE 8 Y = Y + 1 CASE 9 Y = Y + 1 X = X + 1 CASE ELSE END SELECT RETURN OUTCREATURE: PRINT " " SPOT(X, Y) = 0 IF FIX(CODE(I) / 10 ^ 5) = WORM AND FIX(STATE(I) / 10 ^ 8) > 0 THEN IF RND > .6 THEN COLOR (7) LOCATE Y, X GOSUB NEWWORM STATE(I) = STATE(I) - 10 ^ 8 END IF END IF RETURN INCREATURE: SELECT CASE FIX(CODE(I) / 10 ^ 5) CASE WORM H5 = FIX(10 * (STATE(I) / 1000 - FIX(STATE(I) / 1000))) IF H5 = 2 THEN COLOR (2) IF H5 = 3 THEN COLOR (12) IF H5 = 4 THEN COLOR (6) PRINT CHR$(126) CASE MUSHROOM COLOR (5) IF STATE(I) / 10 ^ 4 - FIX(STATE(I) / 10 ^ 4) >= .1 THEN COLOR (8) PRINT CHR$(6) CASE SLIME COLOR (10) IF STATE(I) / 10 ^ 4 - FIX(STATE(I) / 10 ^ 4) >= .1 THEN COLOR (2) PRINT CHR$(42) CASE ELSE END SELECT SPOT(X, Y) = I PLACEX(I) = X PLACEY(I) = Y RETURN IMPREGNATE: GOSUB ENVIRONMENT U = X V = Y FOR E = 1 TO 9 STEP 1 IF ENVIRONMENT(E) > 0 THEN X = U Y = V GOSUB ENVPLACE H1 = SPOT(X, Y) H1 = (STATE(H1) / 100 - FIX(STATE(H1) / 100)) * 100 IF H1 >= 20 AND H1 < 40 AND FIX(CODE(SPOT(X, Y)) / 10 ^ 4) = 12 THEN IF FIX(STATE(SPOT(X, Y)) / 10 ^ 8) = 0 THEN COLOR (4) LOCATE V, U PRINT CHR$(3) LOCATE Y, X PRINT CHR$(3) STATE(SPOT(X, Y)) = STATE(SPOT(X, Y)) + 10 ^ 8 * (INT(RND * 4) + 1) END IF END IF END IF NEXT E X = U Y = V RETURN ERASECREATURE: Y = PLACEY(I) X = PLACEX(I) LOCATE Y, X PRINT " " SPOT(X, Y) = 0 IF FIX(CODE(I) / 10 ^ 5) = WORM THEN SELECT CASE FIX(10 * (STATE(I) / 1000 - FIX(STATE(I) / 1000))) CASE 1 C1.A = C1.A - 1 CASE 2 C1.B = C1.B - 1 CASE 3 C1.C = C1.C - 1 CASE 4 C1.D = C1.D - 1 CASE 5 C1.E = C1.E - 1 CASE ELSE END SELECT END IF IF FIX(10 * (STATE(I) / 10 ^ 7 - FIX(STATE(I) / 10 ^ 7))) = 1 THEN LOCATE Y, X IF RND > .5 THEN GOSUB NEWMUSHROOM END IF IF I < CREATURE THEN SPOT(PLACEX(CREATURE), PLACEY(CREATURE)) = I PLACEX(I) = PLACEX(CREATURE) PLACEY(I) = PLACEY(CREATURE) CODE(I) = CODE(CREATURE) STATE(I) = STATE(CREATURE) END IF CREATURE = CREATURE - 1 RETURN WORM: H1 = 100 * (STATE(I) / 100 - FIX(STATE(I) / 100)) 'AGE H2 = FIX(10 * (STATE(I) / 1000 - FIX(STATE(I) / 1000))) 'STADIUM H3 = FIX(10 * (STATE(I) / 10 ^ 4 - FIX(STATE(I) / 10 ^ 4))) 'DEAD H4 = FIX(10 * (STATE(I) / 10 ^ 6 - FIX(STATE(I) / 10 ^ 6))) 'SICKNESS STATE(I) = STATE(I) - H2 * 100 SELECT CASE H2 CASE 1 IF H1 > 5 AND RND < .1 THEN H2 = 2 C1.A = C1.A - 1 C1.B = C1.B + 1 LOCATE Y, X GOSUB INCREATURE END IF CASE 2 IF H1 >= 20 AND RND < .4 THEN H2 = 3 C1.B = C1.B - 1 C1.C = C1.C + 1 LOCATE Y, X GOSUB INCREATURE END IF CASE 3 IF H1 >= 40 AND RND < .4 THEN H2 = 4 C1.C = C1.C - 1 C1.D = C1.D + 1 LOCATE Y, X GOSUB INCREATURE END IF END SELECT STATE(I) = STATE(I) + H2 * 100 IF H1 > 50 OR H4 > 5 THEN IF H3 = 0 THEN IF RND > .7 THEN STATE(I) = STATE(I) + 1000 H3 = 1 SELECT CASE H2 CASE 1 C1.A = C1.A - 1 CASE 2 C1.B = C1.B - 1 CASE 3 C1.C = C1.C - 1 CASE 4 C1.D = C1.D - 1 CASE ELSE END SELECT STATE(I) = STATE(I) - H2 * 100 + 500 H2 = 5 C1.E = C1.E + 1 COLOR (7) LOCATE Y, X PRINT "+" END IF END IF END IF IF H2 > 1 AND H3 = 0 THEN IF RND > .2 THEN LOCATE Y, X GOSUB ENVIRONMENT DO E = INT(RND * 9) + 1 LOOP UNTIL ENVIRONMENT(E) > -1 IF E > 5 OR E < 5 THEN IF ENVIRONMENT(E) = 0 THEN GOSUB OUTCREATURE GOSUB ENVPLACE LOCATE Y, X GOSUB INCREATURE END IF END IF END IF STATE(I) = STATE(I) - H4 * 10 * 10 ^ 4 A = 0 FOR E = 1 TO 9 STEP 1 IF E > 5 OR E < 5 THEN IF ENVIRONMENT(E) > 0 THEN A = A + 1 IF FIX(10 * (STATE(ENVIRONMENT(E)) / 10 ^ 4 - FIX(STATE(ENVIRONMENT(E)) / 10 ^ 4))) = 1 THEN H4 = H4 + 1 END IF IF FIX(CODE(ENVIRONMENT(E)) / 10 ^ 5) = MUSHROOM THEN H4 = H4 + .5 END IF END IF END IF NEXT E IF A >= 5 THEN H4 = H4 + 1 ELSE IF H4 > 0 THEN H4 = H4 - .2 END IF STATE(I) = STATE(I) + H4 * 10 * 10 ^ 4 IF H1 >= 20 AND H1 < 40 THEN IF FIX(CODE(I) / 10 ^ 4) = 11 THEN GOSUB IMPREGNATE END IF END IF RETURN MUSHROOM: H1 = 100 * (STATE(I) / 100 - FIX(STATE(I) / 100)) 'AGE H2 = FIX(10 * (STATE(I) / 10 ^ 4 - FIX(STATE(I) / 10 ^ 4))) 'DEAD IF H1 > 30 THEN IF H2 = 0 THEN IF RND > .7 THEN STATE(I) = STATE(I) + 1000 H2 = 1 LOCATE Y, X GOSUB INCREATURE END IF END IF END IF IF H2 = 0 THEN LOCATE Y, X IF H1 = 20 THEN GOSUB INCREATURE IF H1 >= 20 THEN GOSUB ENVIRONMENT FOR E = 1 TO 9 STEP 1 IF E < 5 OR E > 5 THEN IF ENVIRONMENT(E) > 0 THEN IF FIX(CODE(ENVIRONMENT(E)) / 10 ^ 5) = WORM THEN IF FIX(10 * (STATE(ENVIRONMENT(E)) / 10 ^ 7 - FIX(STATE(ENVIRONMENT(E)) / 10 ^ 7))) = 0 THEN STATE(ENVIRONMENT(E)) = STATE(ENVIRONMENT(E)) + 10 ^ 6 END IF END IF IF FIX(CODE(ENVIRONMENT(E)) / 10 ^ 5) = SLIME THEN STATE(ENVIRONMENT(E)) = STATE(ENVIRONMENT(E)) + 10 ^ 5 END IF END IF END IF NEXT E END IF END IF RETURN SLIME: H1 = FIX(10 * (STATE(I) / 10 ^ 4 - FIX(STATE(I) / 10 ^ 4))) 'DEAD H2 = FIX(10 * (STATE(I) / 10 ^ 8 - FIX(STATE(I) / 10 ^ 8))) 'STOMACH H3 = 100 * (STATE(I) / 100 - FIX(STATE(I) / 100)) 'AGE H4 = FIX(10 * (STATE(I) / 10 ^ 6 - FIX(STATE(I) / 10 ^ 6))) 'SICKNESS IF H1 = 0 AND RND > .95 THEN GOSUB ENVIRONMENT DO E = INT(RND * 9) + 1 LOOP UNTIL E <> 5 AND ENVIRONMENT(E) > -1 LOCATE Y, X GOSUB OUTCREATURE IF RND + H2 / 10 > 1.2 THEN STATE(I) = STATE(I) - H2 * 10 ^ 7 H2 = 0 LOCATE Y, X GOSUB NEWSLIME END IF GOSUB ENVPLACE LOCATE Y, X GOSUB INCREATURE IF ENVIRONMENT(E) > 0 THEN IF FIX(CODE(ENVIRONMENT(E)) / 10 ^ 5) = MUSHROOM THEN STATE(I) = STATE(I) + 1.5 * 10 ^ 6 IF FIX(10 * (STATE(I) / 10 ^ 7 - FIX(STATE(I) / 10 ^ 7))) = 0 THEN STATE(I) = STATE(I) + 10 ^ 6 END IF END IF IF FIX(10 * (STATE(ENVIRONMENT(E)) / 10 ^ 7 - FIX(STATE(ENVIRONMENT(E)) / 10 ^ 7))) = 1 THEN STATE(I) = STATE(I) + 1 * 10 ^ 6 END IF STATE(I) = STATE(I) + 10 ^ 7 IF ENVIRONMENT(E) < CREATURE THEN IF FIX(CODE(ENVIRONMENT(E)) / 10 ^ 5) = WORM THEN SELECT CASE FIX(10 * (STATE(ENVIRONMENT(E)) / 1000 - FIX(STATE(ENVIRONMENT(E)) / 1000))) CASE 1 C1.A = C1.A - 1 CASE 2 C1.B = C1.B - 1 CASE 3 C1.C = C1.C - 1 CASE 4 C1.D = C1.D - 1 CASE 5 C1.E = C1.E - 1 CASE ELSE END SELECT END IF SPOT(PLACEX(CREATURE), PLACEY(CREATURE)) = ENVIRONMENT(E) PLACEX(ENVIRONMENT(E)) = PLACEX(CREATURE) PLACEY(ENVIRONMENT(E)) = PLACEY(CREATURE) CODE(ENVIRONMENT(E)) = CODE(CREATURE) STATE(ENVIRONMENT(E)) = STATE(CREATURE) END IF CREATURE = CREATURE - 1 END IF H4 = FIX(10 * (STATE(I) / 10 ^ 6 - FIX(STATE(I) / 10 ^ 6))) 'SICKNESS IF (RND + H4 / 10 > 1 OR H3 > 50 + RND * 30) AND RND > .6 THEN IF FIX(10 * (STATE(I) / 10 ^ 4 - FIX(STATE(I) / 10 ^ 4))) THEN STATE(I) = STATE(I) + 1000 END IF H1 = 1 LOCATE Y, X GOSUB INCREATURE END IF END IF RETURN QUIT: END