'''2 Worms competing for good and bad feeding points '''******************************************************** 'DECLARE SUB checkklok () '''QBasic version, this = Powerbasic 'DECLARE SUB chekklok () 'DECLARE SUB saven () 'DECLARE SUB titel () 'DECLARE SUB rapper () 'DECLARE SUB trager () 'DECLARE SUB trager2 () 'DECLARE SUB checkafst2 () 'DECLARE SUB checkafst () 'DECLARE SUB scantoets () 'DECLARE SUB verdik2 () 'DECLARE SUB verdun2 () 'DECLARE SUB verleng2 () 'DECLARE SUB verkort2 () 'DECLARE SUB gekoppeld2 () 'DECLARE SUB verdik () 'DECLARE SUB verdun () 'DECLARE SUB verleng () 'DECLARE SUB verkort () 'DECLARE SUB parms () 'DECLARE SUB initworm () 'DECLARE SUB krimpunt () 'DECLARE SUB wispunt () 'DECLARE SUB vulpunt () 'DECLARE SUB gekoppeld () 'DECLARE SUB intro () 'DECLARE SUB dikker () 'DECLARE SUB dunner () 'DECLARE SUB dikker2 () 'DECLARE SUB dunner2 () 'DECLARE SUB langer () 'DECLARE SUB langer2 () 'DECLARE SUB korter () 'DECLARE SUB korter2 () 'DECLARE SUB rapper2 () 'DECLARE SUB versnel () 'DECLARE SUB vertraag () 'DECLARE SUB versnel2 () 'DECLARE SUB vertraag2 () 'DECLARE SUB koppel () 'DECLARE SUB koppel2 () 'DECLARE SUB schuifop () 'DECLARE SUB schuifop2 () 'DECLARE SUB checkpunt () 'DECLARE SUB duidaan () 'DECLARE SUB herteken () 'DECLARE SUB herteken2 () 'DECLARE SUB wissen () 'DECLARE SUB wissen2 () 'DECLARE SUB wachten () 'COMMON SHARED x%(), y%(), xx%(), yy%() 'COMMON SHARED x0%, y0%, xx0%, yy0% 'COMMON SHARED leng%, leng2%, r%, r2%, wrm%, whd%, wrm2%, whd2% 'COMMON SHARED max%, rmax%, ds%, ds2%, dsm%, alf, alf2, dalf, dalf2, rf, rrf, str 'COMMON SHARED r0%, rp%, xf%, yf%, vlag%, eett, cpu, totwacht, twacht, wacht%, pla%, pai%, cir%, pi 'COMMON SHARED rndf1, rndf, rndk, t, tijd, ttijd, pla$, punt$, vul%, a$ 'COMMON SHARED dik%, dik2%, dun%, dun2%, lon%, lon2%, kor%, kor2%, par%, par2% 'COMMON SHARED rap%, rap2%, tra%, tra2%, pri%, sel% 'COMMON SHARED xn%, yn%, xxn%, yyn% 'COMMON SHARED nlon%, nkor%, ndik%, ndun%, nrap%, ntra%, nko1%, nko2% '************************************************************************** maxx% = 25 REDIM x%(maxx%), y%(maxx%), xx%(maxx%), yy%(maxx%) '''worm ring centres RANDOMIZE TIMER: ttijd = TIMER SCREEN 12 GOSUB intro GOSUB parms GOSUB checkklok GOSUB initworm '''*********************************************************************** Beweeg: '''new position worm1... CIRCLE (x%(0), y%(0)), r%, 0: PSET (x%(0), y%(0)), 0 '''worm1 towards point... IF dik% = 1 THEN GOSUB schuifop: GOSUB dikker: GOTO Teken '''...thicker IF dun% = 1 THEN GOSUB schuifop: GOSUB dunner: GOTO Teken '''...thinner IF lon% = 1 THEN GOSUB schuifop: GOSUB langer: GOTO Teken '''...longer IF kor% = 1 THEN GOSUB schuifop: GOSUB korter: GOTO Teken '''...shorter IF rap% = 1 THEN GOSUB schuifop: GOSUB rapper: GOTO Teken '''...faster IF tra% = 1 THEN GOSUB schuifop: GOSUB trager: GOTO Teken '''...slower IF par% = 1 THEN GOSUB schuifop: GOSUB koppel: GOTO Teken '''...worm2 '''worm1 at point.. IF pri% = 0 THEN pri$ = "WORMs " ELSE pri$ = " " IF dik% = 2 THEN '''... reached thickening point IF TIMER - tijd < eett THEN '''eating time vul% = 14: GOSUB krimpunt GOTO Beweeg2 ''' ...proceed with worm2 END IF vul% = 8: GOSUB wispunt GOSUB verdik dik% = 0: tijd = 0: vlag% = 0: tijd = 0 LOCATE 1, 1: PRINT pri$ END IF IF dun% = 2 THEN '''... thinning IF TIMER - tijd < eett THEN '''eating; proceed with worm2 vul% = 1: GOSUB vulpunt GOTO Beweeg2 END IF vul% = 9: GOSUB wispunt GOSUB verdun dun% = 0: tijd = 0: vlag% = 0 LOCATE 1, 1: PRINT pri$ END IF IF lon% = 2 THEN '''... elongating ''lon2% = 0 IF TIMER - tijd < eett THEN '''eating; proceed with worm2 vul% = 12: GOSUB krimpunt GOTO Beweeg2 END IF vul% = 8: GOSUB wispunt GOSUB verleng lon% = 0: tijd = 0: vlag% = 0 LOCATE 1, 1: PRINT pri$ END IF IF kor% = 2 THEN '''... shortening IF TIMER - tijd < eett THEN '''eating; proceed with worm2 vul% = 2: GOSUB vulpunt GOTO Beweeg2 END IF vul% = 10: GOSUB wispunt GOSUB verkort kor% = 0: tijd = 0: vlag% = 0 LOCATE 1, 1: PRINT pri$ END IF IF rap% = 2 THEN '''... stretching = faster IF TIMER - tijd < eett THEN '''eating... vul% = 7: GOSUB krimpunt GOTO Beweeg2 ''' ..proceed with worm2 END IF vul% = 8: GOSUB wispunt GOSUB versnel rap% = 0: tijd = 0: vlag% = 0: tijd = 0 LOCATE 1, 1: PRINT pri$ END IF IF tra% = 2 THEN '''... shrinking = slower IF TIMER - tijd < eett THEN '''eating; proceed with worm2 vul% = 8: GOSUB vulpunt GOTO Beweeg2 END IF vul% = 10: GOSUB wispunt GOSUB vertraag tra% = 0: tijd = 0: vlag% = 0 LOCATE 1, 1: PRINT pri$ END IF IF par% = 2 THEN '''worm1 reached worm2 GOSUB gekoppeld par% = 0: vlag% = 0 END IF GOSUB schuifop '''move rings 1 position... alf = alf - dalf + RND * 2 * dalf '''... and 1 new ring xn% = x%(leng%) + ds% * COS(alf) yn% = y%(leng%) + ds% * SIN(alf) CheckPlaats: '''check pos new ring worm1 IF par% <> 0 GOTO Checkrand '''coupling routine = proceed GOSUB checkafst '''check toerance distance Checkrand: IF xn% > 639 - r% THEN xn% = 639 - r% '''stay within screen... IF xn% < r% THEN xn% = r% IF yn% > 479 - r% THEN yn% = 479 - r% IF yn% < 16 + r% THEN yn% = 16 + r% x%(leng%) = xn%: y%(leng%) = yn% Teken: '''new ring worm1 CIRCLE (x%(leng% - 1), y%(leng% - 1)), r%, wrm% CIRCLE (x%(leng%), y%(leng%)), r%, whd% PSET (x%(leng%), y%(leng%)), 13 '''************************************************************************* Beweeg2: '''new pos. worm2 CIRCLE (xx%(0), yy%(0)), r2%, 0: PSET (xx%(0), yy%(0)), 0 '''worm2 towards point.... '''(see worm1 before) IF dik2% = 1 THEN GOSUB schuifop2: GOSUB dikker2: GOTO Teken2 '''...verdikken IF dun2% = 1 THEN GOSUB schuifop2: GOSUB dunner2: GOTO Teken2 '''...verdunnen IF lon2% = 1 THEN GOSUB schuifop2: GOSUB langer2: GOTO Teken2 '''...verlengen IF kor2% = 1 THEN GOSUB schuifop2: GOSUB korter2: GOTO Teken2 '''...verkorten IF rap2% = 1 THEN GOSUB schuifop2: GOSUB rapper2: GOTO Teken2 '''...versnellen IF tra2% = 1 THEN GOSUB schuifop2: GOSUB trager2: GOTO Teken2 '''...vertragen IF par2% = 1 THEN GOSUB schuifop2: GOSUB koppel2: GOTO Teken2 '''...worm1 '''worm2 reached point... IF pri% = 0 THEN pri$ = "WORMs " ELSE pri$ = " " IF dik2% = 2 THEN '''... verdikken IF TIMER - tijd < eett THEN '''wachttijd: verder met worm1 vul% = 14: GOSUB krimpunt GOTO scantoe END IF vul% = 8: GOSUB wispunt GOSUB verdik2 dik2% = 0: tijd = 0: vlag% = 0 LOCATE 1, 1: PRINT pri$ END IF IF dun2% = 2 THEN '''... verdunnen IF TIMER - tijd < eett THEN '''wachttijd: verder met worm1 vul% = 1: GOSUB vulpunt GOTO scantoe END IF vul% = 9: GOSUB wispunt GOSUB verdun2 dun2% = 0: tijd = 0: vlag% = 0 LOCATE 1, 1: PRINT pri$ END IF IF lon2% = 2 THEN '''... verlengen ''lon% = 0 IF TIMER - tijd < eett THEN '''wachttijd: verder met worm1 vul% = 12: GOSUB krimpunt GOTO scantoe END IF vul% = 8: GOSUB wispunt GOSUB verleng2 lon2% = 0: tijd = 0: vlag% = 0 LOCATE 1, 1: PRINT pri$ END IF IF kor2% = 2 THEN '''... verkorten IF TIMER - tijd < eett THEN '''wachttijd: verder met worm1 vul% = 2: GOSUB vulpunt GOTO scantoe END IF vul% = 10: GOSUB wispunt GOSUB verkort2 kor2% = 0: tijd = 0: vlag% = 0 LOCATE 1, 1: PRINT pri$ END IF IF rap2% = 2 THEN '''... versnellen IF TIMER - tijd < eett THEN '''wachttijd: verder met worm1 vul% = 7: GOSUB krimpunt GOTO scantoe END IF vul% = 8: GOSUB wispunt GOSUB versnel2 rap2% = 0: tijd = 0: vlag% = 0 LOCATE 1, 1: PRINT pri$ END IF IF tra2% = 2 THEN '''... vertragen IF TIMER - tijd < eett THEN '''wachttijd: verder met worm1 vul% = 2: GOSUB vulpunt GOTO scantoe END IF vul% = 10: GOSUB wispunt GOSUB vertraag2 tra2% = 0: tijd = 0: vlag% = 0 LOCATE 1, 1: PRINT pri$ END IF IF par2% = 2 THEN '''worm2 bij worm1 aangekomen GOSUB gekoppeld2 par2% = 0: vlag% = 0 END IF GOSUB schuifop2 '''ringen opschuiven... alf2 = alf2 - dalf2 + RND * 2 * dalf2 '''... en 1 nieuwe ring xxn% = xx%(leng2%) + ds2% * COS(alf2) yyn% = yy%(leng2%) + ds2% * SIN(alf2) CheckPlaats2: '''plaats nieuwe ring worm2 checken IF par2% <> 0 GOTO Checkrand2 '''koppelroutine = doorgaan GOSUB checkafst2 '''check gedoogafstand Checkrand2: IF xxn% > 639 - r2% THEN xxn% = 639 - r2% '''binnen scherm blijven... IF xxn% < r2% THEN xxn% = r2% IF yyn% > 479 - r2% THEN yyn% = 479 - r2% IF yyn% < 16 + r2% THEN yyn% = 16 + r2% xx%(leng2%) = xxn%: yy%(leng2%) = yyn% Teken2: '''nieuwe ring worm2 CIRCLE (xx%(leng2% - 1), yy%(leng2% - 1)), r2%, wrm2% CIRCLE (xx%(leng2%), yy%(leng2%)), r2%, whd2% PSET (xx%(leng2%), yy%(leng2%)), 12 scantoe: '''scan active keys... a$ = INKEY$ IF vlag% = 2 GOTO verder '''active nutrition point = proceed GOSUB scantoets '''else scan keys verder: IF wacht% = 1 THEN GOSUB wachten '''waiting routine wrm% = 3: wrm2% = 2 '''reset colors GOTO Beweeg '''new cycle END '''*************************SUBROUTINES***************************** checkafst: '''check tolerance distance delx = -xn% + xx%(leng2%) dely = -yn% + yy%(leng2%) r = SQR(delx ^ 2 + dely ^ 2) IF r < r0% AND r > rp% THEN '''too 'close' to worm2 IF pla% = 1 THEN PLAY "l24o6c" wrm% = 11 dx = dely * ds% / r dy = -delx * ds% / r xn% = x%(leng%) + dx - 1 + 2 * RND: yn% = y%(leng%) + dy - 1 + 2 * RND END IF IF r <= rp% THEN xn% = x%(leng%) - 1 + 2 * RND: yn% = y%(leng%) - 1 + 2 * RND RETURN checkafst2: delxx = x%(leng%) - xxn% delyy = y%(leng%) - yyn% r = SQR(delxx ^ 2 + delyy ^ 2) IF r < r0% AND r > rp% THEN '''too 'close' to worm1 IF pla% = 1 THEN PLAY "l24o5b-" wrm2% = 10 dxx = delyy * ds2% / r dyy = -delxx * ds2% / r xxn% = xx%(leng2%) + dxx - 1 + 2 * RND: yyn% = yy%(leng2%) + dyy - 1 + 2 * RND END IF IF r <= rp% THEN xxn% = xx%(leng2%) - 1 + 2 * RND: yyn% = yy%(leng2%) - 1 + 2 * RND RETURN '''*********************************************************************** checkklok: ''' check computer clock and apply wait routine if necessary totwacht = 7500: twacht = 50 t = TIMER: tel = 0 WHILE TIMER - t < 1: tel = tel + 1: WEND cpu = INT(tel / 500) '''500 = 386SX-25 IF cpu < 1 THEN cpu = 1 IF cpu >= 2 THEN wacht% = 1 'wait routine switched... RETURN '''*********************************************************************** checkpunt: IF vlag% = 1 THEN GOSUB wispunt vlag% = 1 xf% = RND * 640: yf% = RND * 480 '''new point IF pla% = 1 THEN PLAY "l24o4a-" LOCATE 1, 1: COLOR 15: PRINT "WORMs ??? " CIRCLE (xf%, yf%), rp%, 15 RETURN '''********************************************************************** dikker: '''rush towards point 'thicker', worm1 delx = -x%(leng%) + xf% dely = -y%(leng%) + yf% rf = SQR(delx ^ 2 + dely ^ 2) IF rf < r0% THEN dik2% = 0: pla$ = "o3" + pla$ IF rf > rp% + r% + ds% THEN xn% = ds% * (xf% - x%(leng%)) / rf yn% = ds% * (yf% - y%(leng%)) / rf x%(leng%) = x%(leng%) + xn%: y%(leng%) = y%(leng%) + yn% ELSE wrm% = 11: GOSUB herteken IF pla% = 1 THEN PLAY pla$ LOCATE 1, 1: COLOR pai%: PRINT punt$ CIRCLE (xf%, yf%), rp%, cir% PAINT (xf%, yf%), pai%, cir% dik% = 2: vlag% = 2: str = rp% tijd = TIMER END IF RETURN dikker2: ''' . . . . worm2 delxx = xf% - xx%(leng2%) delyy = yf% - yy%(leng2%) rrf = SQR(delxx ^ 2 + delyy ^ 2) IF rrf < r0% THEN dik% = 0: pla$ = "o2" + pla$ IF rrf > rp% + r2% + ds2% THEN xxn% = ds2% * (xf% - xx%(leng2%)) / rrf yyn% = ds2% * (yf% - yy%(leng2%)) / rrf xx%(leng2%) = xx%(leng2%) + xxn%: yy%(leng2%) = yy%(leng2%) + yyn% ELSE wrm2% = 10: GOSUB herteken2 IF pla% = 1 THEN PLAY pla$ LOCATE 1, 1: COLOR pai%: PRINT punt$ CIRCLE (xf%, yf%), rp%, cir% PAINT (xf%, yf%), pai%, cir% dik2% = 2: vlag% = 2: str = rp% tijd = TIMER END IF RETURN '''********************************************************************* duidaan: '''display data IF pri% = 1 THEN LOCATE 1, 35: PRINT " " RETURN END IF t = TIMER - ttijd LOCATE 1, 1: PRINT punt$ LOCATE 1, 30: PRINT USING "#### min. "; INT(t / 60); COLOR 7: PRINT "Len Rad Spd:" LOCATE 1, 57: COLOR 11: PRINT USING "## ## ##"; leng%; r%; ds% LOCATE 1, 68: COLOR 10: PRINT USING "## ## ##"; leng2%; r2%; ds2% COLOR 7 RETURN '''******************************************************************* dunner: '''rush towards point 'thinner', worm1 delx = -x%(leng%) + xf% dely = -y%(leng%) + yf% rf = SQR(delx ^ 2 + dely ^ 2) IF rf < r0% THEN dun2% = 0: pla$ = "o3" + pla$ IF rf > rp% + r% + ds% THEN xn% = ds% * (xf% - x%(leng%)) / rf yn% = ds% * (yf% - y%(leng%)) / rf x%(leng%) = x%(leng%) + xn%: y%(leng%) = y%(leng%) + yn% ELSE wrm% = 7: GOSUB herteken IF pla% = 1 THEN PLAY pla$ LOCATE 1, 1: COLOR pai%: PRINT punt$ CIRCLE (xf%, yf%), rp%, cir% PAINT (xf%, yf%), pai%, cir% dun% = 2: vlag% = 2: str = rp% tijd = TIMER END IF RETURN dunner2: '''. . . . worm2 delxx = xf% - xx%(leng2%) delyy = yf% - yy%(leng2%) rrf = SQR(delxx ^ 2 + delyy ^ 2) IF rrf < r0% THEN dun% = 0: pla$ = "o2" + pla$ IF rrf > rp% + r2% + ds2% THEN xxn% = ds2% * (xf% - xx%(leng2%)) / rrf yyn% = ds2% * (yf% - yy%(leng2%)) / rrf xx%(leng2%) = xx%(leng2%) + xxn%: yy%(leng2%) = yy%(leng2%) + yyn% ELSE wrm2% = 7: GOSUB herteken2 IF pla% = 1 THEN PLAY pla$ LOCATE 1, 1: COLOR pai%: PRINT punt$ CIRCLE (xf%, yf%), rp%, cir% PAINT (xf%, yf%), pai%, cir% dun2% = 2: vlag% = 2: str = rp% tijd = TIMER END IF RETURN '''******************************************************************* gekoppeld: '''coupled: 'mating' procedure IF leng2% <= leng% THEN WHILE leng2% < leng% GOSUB wissen: GOSUB wissen2 FOR i% = 0 TO leng2% xx%(leng2% - i% + 1) = xx%(leng2% - i%) yy%(leng2% - i% + 1) = yy%(leng2% - i%) NEXT i% xx%(0) = x%(leng%): yy%(0) = y%(leng%) leng2% = leng2% + 1: leng% = leng% - 1 GOSUB herteken: GOSUB herteken2 GOSUB duidaan: PLAY "l24o3efg" WEND ELSE WHILE leng2% > leng% GOSUB wissen: GOSUB wissen2 x%(leng% + 1) = xx%(0): y%(leng% + 1) = yy%(0) FOR i% = 0 TO leng2% - 1 xx%(i%) = xx%(i% + 1): yy%(i%) = yy%(i% + 1) NEXT i% leng2% = leng2% - 1: leng% = leng% + 1 GOSUB herteken: GOSUB herteken2 GOSUB duidaan: PLAY "l24o3efg" WEND END IF IF r2% <= r% THEN WHILE r2% < r% GOSUB wissen: GOSUB wissen2 r2% = r2% + 1: r% = r% - 1 GOSUB herteken: GOSUB herteken2 GOSUB duidaan: PLAY "l24o3efg" WEND ELSE WHILE r2% > r% GOSUB wissen: GOSUB wissen2 r2% = r2% - 1: r% = r% + 1 GOSUB herteken: GOSUB herteken2 GOSUB duidaan: PLAY "l24o3efg" WEND END IF IF ds2% <= ds% THEN WHILE ds2% < ds% GOSUB wissen: GOSUB wissen2 ds2% = ds2% + 1: ds% = ds% - 1 GOSUB herteken: GOSUB herteken2 GOSUB duidaan: PLAY "l24o3efg" WEND ELSE WHILE ds2% > ds% GOSUB wissen: GOSUB wissen2 ds2% = ds2% - 1: ds% = ds% + 1 GOSUB herteken: GOSUB herteken2 GOSUB duidaan: PLAY "l24o3efg" WEND END IF RETURN '''************ gekoppeld2: '''coupled2: 'mating' procedure reverse IF leng% <= leng2% THEN WHILE leng% < leng2% GOSUB wissen: GOSUB wissen2 FOR i% = 0 TO leng% x%(leng% - i% + 1) = x%(leng% - i%) y%(leng% - i% + 1) = y%(leng% - i%) NEXT i% x%(0) = xx%(leng2%): y%(0) = yy%(leng2%) leng% = leng% + 1: leng2% = leng2% - 1 GOSUB herteken: GOSUB herteken2 GOSUB duidaan: PLAY "l24o3efg" WEND ELSE WHILE leng% > leng2% GOSUB wissen: GOSUB wissen2 xx%(leng2% + 1) = x%(0): yy%(leng2% + 1) = y%(0) FOR i% = 0 TO leng% - 1 x%(i%) = x%(i% + 1): y%(i%) = y%(i% + 1) NEXT i% leng% = leng% - 1: leng2% = leng2% + 1 GOSUB herteken: GOSUB herteken2 GOSUB duidaan: PLAY "l24o3efg" WEND END IF IF r% <= r2% THEN WHILE r% < r2% GOSUB wissen: GOSUB wissen2 r% = r% + 1: r2% = r2% - 1 GOSUB herteken: GOSUB herteken2 GOSUB duidaan: PLAY "l24o3efg" WEND ELSE WHILE r% > r2% GOSUB wissen: GOSUB wissen2 r% = r% - 1: r2% = r2% + 1 GOSUB herteken: GOSUB herteken2 GOSUB duidaan: PLAY "l24o3efg" WEND END IF IF ds% <= ds2% THEN WHILE ds% < ds2% GOSUB wissen: GOSUB wissen2 ds% = ds% + 1: ds2% = ds2% - 1 GOSUB herteken: GOSUB herteken2 GOSUB duidaan: PLAY "l24o3efg" WEND ELSE WHILE ds% > ds2% GOSUB wissen: GOSUB wissen2 ds% = ds% - 1: ds2% = ds2% + 1 GOSUB herteken: GOSUB herteken2 GOSUB duidaan: PLAY "l24o3efg" WEND END IF RETURN '''********************************************************************* '''REdraw herteken: FOR i% = 1 TO leng% - 1 '''nOt i=0 !!! CIRCLE (x%(i%), y%(i%)), r%, wrm% PSET (x%(i%), y%(i%)), whd% NEXT i% CIRCLE (x%(leng%), y%(leng%)), r%, whd% PSET (x%(leng%), y%(leng%)), whd% RETURN herteken2: '''REdraw2 FOR i% = 1 TO leng2% - 1 '''nOt i=0 !!! CIRCLE (xx%(i%), yy%(i%)), r2%, wrm2% PSET (xx%(i%), yy%(i%)), whd2% NEXT i% CIRCLE (xx%(leng2%), yy%(leng2%)), r2%, whd2% PSET (xx%(leng2%), yy%(leng2%)), whd2% RETURN '''****************************************************************** initworm: '''initialize worms FOR i% = 1 TO leng% ''' worm1 alf = alf - dalf + RND * 2 * dalf x%(i%) = x%(i% - 1) + ds% * COS(alf): y%(i%) = y%(i% - 1) + ds% * SIN(alf) NEXT i% FOR i% = 1 TO leng2% ''' worm2 alf2 = alf2 - dalf2 + RND * 2 * dalf2 xx%(i%) = xx%(i% - 1) + ds2% * COS(alf2): yy%(i%) = yy%(i% - 1) + ds2% * SIN(alf2) NEXT i% RETURN '''******************************************************************* intro: '''introduction CLS : a$ = "" PLAY "l21o4c+ga-cd" scherm1: COLOR 11: LOCATE 9, 1 PRINT " Welcome in WormWorld." PRINT : COLOR 7 PRINT " Twee Schermwormpjes, uw scherm is hun wereld, dartelen over uw" PRINT " monitor, op zoek naar vreten. Dat vinden ze bij eetpunten die" PRINT " op willekeurige ogenblikken her en der verschijnen. Wie eerst" PRINT " komt, eerst maalt. Het goede eten doet ze verlengen, verdikken," PRINT " of rekken; het slechte verkorten, verdunnen of krimpen." PRINT " Een enkele keer bekruipt er een de paringsdrift: hij gaat dan" PRINT " achter de ander aan in zijn strijdkleuren. Bij de paring worden" PRINT " genen uitgewisseld, en eigenschappen van lengte, dikte en rek " PRINT " eerlijk verdeeld, onder het zingen van het paringslied." PRINT " Op andere ogenblikken echter laten ze elkaar niet te dicht naderen," PRINT " zo ja, gaan ze gillen en praalkleuren zetten." PRINT " Zodra een eigenschap maximaal of nul wordt (of u ertoe beslist)," PRINT " houdt hun wereld op... Er wordt dan een statistiekje van de" PRINT " belangrijkste parameters weggeschreven in een file Worms.TXT" PRINT " en WormWereld kan opnieuw beginnen..." GOSUB titel CLS a$ = "" scherm2: COLOR 7: LOCATE 10, 1 PRINT " -> Selecteer worm1/worm2/eetpunt....... F5 / F6 / F7" PRINT " -> Verlengen/Verdikken/Rekken.......... F1 / F2 / F3" PRINT " -> Verkorten/Verdunnen/Krimpen......... F9 / F10/ F11" PRINT " -> Koppelen aan andere worm............ '0'" PRINT PRINT " -> eetpunten vergroten/verkleinen...... Pijltoetsen R/L" PRINT " -> eettijd langer/korter............... Pijltoetsen Op/Neer" PRINT " -> geluid Aan/Uit...................... '.'" PRINT " -> versnellen, vertragen............... '-', '+' " PRINT " -> CLS, en info On/Off................. SPATIE" PRINT " -> Omtrent WORMs....................... ESCAPE" PRINT " -> STOP................................ ENTER" GOSUB titel CLS : PRINT "WORMs " a$ = "" PLAY "l21o4c+ga-cd" RETURN '''******************************************************************** koppel: '''coupling approach delx = -x%(leng%) + xx%(0) dely = -y%(leng%) + yy%(0) rw = SQR(delx ^ 2 + dely ^ 2) IF rw > ds2% THEN xn% = ds2% * (delx / rw): yn% = ds2% * (dely / rw) x%(leng%) = x%(leng%) + xn%: y%(leng%) = y%(leng%) + yn% wrm% = whd% ELSE PLAY pla$ LOCATE 1, 1: COLOR wrm%: PRINT punt$ par% = 2: vlag% = 2: str = rp% 'tijd = TIMER END IF RETURN koppel2: '''coupling approach reverse delxx = -xx%(leng2%) + x%(0) delyy = -yy%(leng2%) + y%(0) rrw = SQR(delxx ^ 2 + delyy ^ 2) IF rrw > ds% THEN xxn% = ds% * (delxx / rrw): yyn% = ds% * (delyy / rrw) xx%(leng2%) = xx%(leng2%) + xxn%: yy%(leng2%) = yy%(leng2%) + yyn% wrm2% = whd2% ELSE PLAY pla$ LOCATE 1, 1: COLOR wrm2%: PRINT punt$ par2% = 2: vlag2% = 2 'tijd = TIMER END IF RETURN '''******************************************************************** korter: '''rush towards point 'shorter', worm1 delx = -x%(leng%) + xf% dely = -y%(leng%) + yf% rf = SQR(delx ^ 2 + dely ^ 2) IF rf < r0% THEN kor2% = 0: pla$ = "o3" + pla$ IF rf > rp% + r% + ds% THEN xn% = ds% * (xf% - x%(leng%)) / rf yn% = ds% * (yf% - y%(leng%)) / rf x%(leng%) = x%(leng%) + xn%: y%(leng%) = y%(leng%) + yn% ELSE wrm% = 7: GOSUB herteken IF pla% = 1 THEN PLAY pla$ LOCATE 1, 1: COLOR pai%: PRINT punt$ CIRCLE (xf%, yf%), rp%, cir% PAINT (xf%, yf%), pai%, cir% kor% = 2: vlag% = 2: str = rp% tijd = TIMER END IF RETURN korter2: '''. . . . worm2 delxx = xf% - xx%(leng2%) delyy = yf% - yy%(leng2%) rrf = SQR(delxx ^ 2 + delyy ^ 2) IF rrf < r0% THEN kor% = 0: pla$ = "o2" + pla$ IF rrf > rp% + r2% + ds2% THEN xxn% = ds2% * (xf% - xx%(leng2%)) / rrf yyn% = ds2% * (yf% - yy%(leng2%)) / rrf xx%(leng2%) = xx%(leng2%) + xxn%: yy%(leng2%) = yy%(leng2%) + yyn% ELSE wrm2% = 7: GOSUB herteken2 IF pla% = 1 THEN PLAY pla$ LOCATE 1, 1: COLOR pai%: PRINT punt$ CIRCLE (xf%, yf%), rp%, cir% PAINT (xf%, yf%), pai%, cir% kor2% = 2: vlag% = 2: str = rp% tijd = TIMER END IF RETURN '''******************************************************************* krimpunt: '''shrink feeding point str0 = rp% * (1 - (TIMER - tijd) / eett) CIRCLE (xf%, yf%), rp%, 15 WHILE str >= str0 AND str >= 1 CIRCLE (xf%, yf%), str, 0 str = str - 1 WEND RETURN '''********************************************************************* langer: '''rush towards 'longer' point, worm1 delx = -x%(leng%) + xf% dely = -y%(leng%) + yf% rf = SQR(delx ^ 2 + dely ^ 2) IF rf < r0% THEN lon2% = 0: pla$ = "o3" + pla$ IF rf > rp% + r% + ds% THEN xn% = ds% * (xf% - x%(leng%)) / rf yn% = ds% * (yf% - y%(leng%)) / rf x%(leng%) = x%(leng%) + xn%: y%(leng%) = y%(leng%) + yn% ELSE wrm% = 11: GOSUB herteken IF pla% = 1 THEN PLAY pla$ LOCATE 1, 1: COLOR pai%: PRINT punt$ CIRCLE (xf%, yf%), rp%, cir% PAINT (xf%, yf%), pai%, cir% lon% = 2: vlag% = 2: str = rp% tijd = TIMER END IF RETURN langer2: '''. . . . worm2 delxx = xf% - xx%(leng2%) delyy = yf% - yy%(leng2%) rrf = SQR(delxx ^ 2 + delyy ^ 2) IF rrf < r0% THEN lon% = 0: pla$ = "o2" + pla$ IF rrf > rp% + r2% + ds2% THEN xxn% = ds2% * (xf% - xx%(leng2%)) / rrf yyn% = ds2% * (yf% - yy%(leng2%)) / rrf xx%(leng2%) = xx%(leng2%) + xxn%: yy%(leng2%) = yy%(leng2%) + yyn% ELSE wrm2% = 10: GOSUB herteken2 IF pla% = 1 THEN PLAY pla$ LOCATE 1, 1: COLOR pai%: PRINT punt$ CIRCLE (xf%, yf%), rp%, cir% PAINT (xf%, yf%), pai%, cir% lon2% = 2: vlag% = 2: str = rp% tijd = TIMER END IF RETURN '''********************************************************************* parms: '''init parms leng% = 17: leng2% = 8 '''2 worms leng <= max% r% = 7: r2% = 13: rmax% = 20 '''worm ring radii ds% = 8: ds2% = 6: dsm% = 15 '''ring distance <= dsm% alf = 0: dalf = 1: alf2 = 0: dalf2 = 1 '''angles of mobility r0% = 100 '''distance of tolerance vlag% = 0: rp% = 20 '''active feeding point ; radius vlar% = 0 '''thin/thick = +/-1 rndf1 = .95 '''frequency of activating points rndf = .95 '''threshold for choice of points rndk = .97 '''threshold for coupling eett = 2 '''duration feeding wrm% = 3: whd% = 13: wrm2% = 2: whd2% = 12 '''colors twacht = 1: wacht% = 0 '''wait routine 'pla% = 1 '''flag sound pi = ATN(1) * 4 x0% = 440: y0% = 240 '''starting point worms x%(0) = x0%: y%(0) = y0% xx0% = 200: yy0% = 240 xx%(0) = xx0%: yy%(0) = yy0% RETURN '''*********************************************************************** rapper: '''rush towards 'faster' point, worm1 delx = -x%(leng%) + xf% dely = -y%(leng%) + yf% rf = SQR(delx ^ 2 + dely ^ 2) IF rf < r0% THEN rap2% = 0: pla$ = "o3" + pla$ IF rf > rp% + r% + ds% THEN xn% = ds% * (xf% - x%(leng%)) / rf yn% = ds% * (yf% - y%(leng%)) / rf x%(leng%) = x%(leng%) + xn%: y%(leng%) = y%(leng%) + yn% ELSE wrm% = 11: GOSUB herteken IF pla% = 1 THEN PLAY pla$ LOCATE 1, 1: COLOR pai%: PRINT punt$ CIRCLE (xf%, yf%), rp%, cir% PAINT (xf%, yf%), pai%, cir% rap% = 2: vlag% = 2: str = rp% tijd = TIMER END IF RETURN rapper2: '''. . . . worm2 delxx = xf% - xx%(leng2%) delyy = yf% - yy%(leng2%) rrf = SQR(delxx ^ 2 + delyy ^ 2) IF rrf < r0% THEN rap% = 0: pla$ = "o2" + pla$ IF rrf > rp% + r2% + ds2% THEN xxn% = ds2% * (xf% - xx%(leng2%)) / rrf yyn% = ds2% * (yf% - yy%(leng2%)) / rrf xx%(leng2%) = xx%(leng2%) + xxn%: yy%(leng2%) = yy%(leng2%) + yyn% ELSE wrm2% = 10: GOSUB herteken2 IF pla% = 1 THEN PLAY pla$ LOCATE 1, 1: COLOR pai%: PRINT punt$ CIRCLE (xf%, yf%), rp%, cir% PAINT (xf%, yf%), pai%, cir% rap2% = 2: vlag% = 2: str = rp% tijd = TIMER END IF RETURN '''****************************************************************** saven: '''(ENTER =) save data SLEEP 5 voed = nlon% + nkor% + ndik% + ndun% + nrap% + ntra% OPEN "WORMS.txt" FOR APPEND AS #1 t = INT(t / 60) PRINT #1, DATE$ + ","; TIME$ + ","; PRINT #1, USING "### ###### "; t; voed; '''nr. minutes and feedings PRINT #1, USING "## ## ## "; leng%; r%; ds%; PRINT #1, USING "## ## ## "; leng2%; r2%; ds2%; PRINT #1, USING "## ## "; nko1%; nko2% CLOSE 1 SLEEP 5 IF a$ = CHR$(13) THEN END ELSE RUN RETURN '''********************************************************************** scantoets: '''scan key SELECT CASE a$ CASE CHR$(0) + "?" '''SELect worm 1 = F5 sel% = 1 punt$ = "WORMs 1... ": COLOR wrm% GOSUB duidaan CASE CHR$(0) + "@" '''SELect worm 2 = F6 sel% = 2 punt$ = "WORMs 2... ": COLOR wrm2% GOSUB duidaan CASE CHR$(0) + "A" '''SELect feeding point = F7 sel% = 3 punt$ = "WORMs feedpoint... " GOSUB duidaan CASE CHR$(0) + ";" '''make longer = F1 IF sel% = 1 THEN '''worm 1 IF leng% < maxx% THEN GOSUB wissen leng% = leng% + 1 punt$ = "WORMs longer ": COLOR wrm% GOSUB duidaan x%(leng%) = x%(leng% - 1): y%(leng%) = y%(leng% - 1) GOSUB herteken END IF ELSEIF sel% = 2 THEN '''worm 2 IF leng2% < maxx% THEN GOSUB wissen2 leng2% = leng2% + 1 punt$ = "WORMs longer ": COLOR wrm2% GOSUB duidaan xx%(leng2%) = xx%(leng2% - 1): yy%(leng2%) = yy%(leng2% - 1) GOSUB herteken2 END IF ELSE '''feeding point punt$ = "WORMs longer " pla$ = "l21cp21g": cir% = 15: pai% = 12 GOSUB checkpunt dik% = 0: dik2% = 0: dun% = 0: dun2% = 0: kor% = 0: kor2% = 0 par% = 0: par2% = 0 'IF rf < rrf THEN lon% = 1: lon2% = 0 ELSE lon2% = 1: lon% = 0 lon% = 1: lon2% = 1 tijd = TIMER END IF CASE CHR$(0) + "<" '''make thicker = F2 IF sel% = 1 THEN '''worm 1 IF r% < rmax% THEN GOSUB wissen r% = r% + 1: vlar% = -1 punt$ = "WORMs thicker ": COLOR wrm% GOSUB duidaan GOSUB herteken END IF ELSEIF sel% = 2 THEN '''worm 2 IF r2% < rmax% THEN GOSUB wissen2 r2% = r2% + 1: vlar2% = -1 punt$ = "WORMs thicker ": COLOR wrm2% GOSUB duidaan GOSUB herteken2 END IF ELSE '''feeding point punt$ = "WORMs thicker " pla$ = "l21fp21>c": cir% = 15: pai% = 14 GOSUB checkpunt lon% = 0: lon2% = 0: dun% = 0: dun2% = 0: kor% = 0: kor2% = 0 par% = 0: par2% = 0 'IF rf < rrf THEN dik% = 1: dik2% = 0 ELSE dik2% = 1: dik% = 0 dik% = 1: dik2% = 1 tijd = TIMER END IF CASE CHR$(0) + "=" '''stretch = F3 IF sel% = 1 THEN '''worm 1 IF ds% < dsm% THEN ds% = ds% + 1 LOCATE 1, 1: COLOR wrm% punt$ = "WORMs faster ": GOSUB duidaan ELSEIF sel% = 2 THEN '''worm 2 IF ds2% < dsm% THEN ds2% = ds2% + 1 LOCATE 1, 1: COLOR wrm2% punt$ = "WORMs faster ": GOSUB duidaan ELSE '''feeding point punt$ = "WORMs faster " pla$ = "l21g+p21a": cir% = 15: pai% = 3 GOSUB checkpunt dik% = 0: dik2% = 0: dun% = 0: dun2% = 0: kor% = 0: kor2% = 0 par% = 0: par2% = 0 'IF rf < rrf THEN lon% = 1: lon2% = 0 ELSE lon2% = 1: lon% = 0 rap% = 1: rap2% = 1 tijd = TIMER END IF CASE CHR$(0) + "C" '''make shorter = F9 IF sel% = 1 THEN '''worm 1 IF leng% > 1 THEN GOSUB wissen leng% = leng% - 1 punt$ = "WORMs shorter ": COLOR wrm% GOSUB duidaan GOSUB herteken END IF ELSEIF sel% = 2 THEN '''worm 2 IF leng2% > 1 THEN GOSUB wissen2 leng2% = leng2% - 1 punt$ = "WORMs shorter ": COLOR wrm2% GOSUB duidaan GOSUB herteken2 END IF ELSE '''feeding point punt$ = "WORMs shorter " pla$ = "l21cp21 1 THEN GOSUB wissen r% = r% - 1: vlar% = 1 punt$ = "WORMs thinner ": COLOR wrm% GOSUB duidaan GOSUB herteken END IF ELSEIF sel% = 2 THEN '''worm 2 IF r2% > 1 THEN GOSUB wissen2 r2% = r2% - 1: vlar2% = 1 punt$ = "WORMs thinner ": COLOR wrm2% GOSUB duidaan GOSUB herteken2 END IF ELSE '''feeding point punt$ = "WORMs thinner " pla$ = "l21fp21c": cir% = 15: pai% = 9 GOSUB checkpunt dik% = 0: dik2% = 0: lon% = 0: lon2% = 0: kor% = 0: kor2% = 0 par% = 0: par2% = 0 'IF rf < rrf THEN dun% = 1: dun2% = 0 ELSE dun2% = 1: dun% = 0 dun% = 1: dun2% = 1 tijd = TIMER END IF CASE CHR$(0) + "…" '''shrink = F11 IF sel% = 1 THEN '''worm 1 IF ds% > 1 THEN ds% = ds% - 1 LOCATE 1, 1: COLOR wrm% punt$ = "WORMs slower ": GOSUB duidaan ELSEIF sel% = 2 THEN '''worm 2 IF ds2% > 1 THEN ds2% = ds2% - 1 LOCATE 1, 1: COLOR wrm2% punt$ = "WORMs slower ": GOSUB duidaan ELSE '''feeding point punt$ = "WORMs slower " pla$ = "l21ep21d+": cir% = 15: pai% = 5 GOSUB checkpunt dik% = 0: dik2% = 0: dun% = 0: dun2% = 0: kor% = 0: kor2% = 0 par% = 0: par2% = 0 'IF rf < rrf THEN lon% = 1: lon2% = 0 ELSE lon2% = 1: lon% = 0 tra% = 1: tra2% = 1 tijd = TIMER END IF CASE "0" '''couple IF sel% = 1 THEN '''worm 1 to worm 2 IF vlag% = 1 THEN GOSUB wispunt PLAY "l21o4c+ga-cd" punt$ = "WORMs coupling ": COLOR whd% pla$ = "l24o3cdefg" GOSUB duidaan wrm2% = 10: par% = 1: vlag% = 1 dik% = 0: dik2% = 0: lon% = 0: lon2% = 0: kor% = 0: kor2% = 0: par2% = 0 ELSEIF sel% = 2 THEN '''worm 2 to worm 1 IF vlag% = 1 THEN GOSUB wispunt PLAY "l21o4c+ga-cd" punt$ = "WORMs coupling ": COLOR whd2% pla$ = "l24o3cdefg" GOSUB duidaan wrm% = 11: par2% = 1: vlag% = 1 dik% = 0: dik2% = 0: lon% = 0: lon2% = 0: kor% = 0: kor2% = 0: par% = 0 END IF '''********* CASE "" '''NO action... Then RND selection: IF RND < rndf1 OR vlag% <> 0 THEN RETURN '''Below threshold = proceed geval% = INT(RND * 8) '''8 choices SELECT CASE geval% '''nested SELECT CASE 0 '''IF RND > rndf THEN '''feeding point: Longer punt$ = "WORMs longer " pla$ = "l21cp21g": cir% = 15: pai% = 12 GOSUB checkpunt lon% = 1: lon2% = 1: nlon% = nlon% + 1 RETURN '''END IF CASE 1 '''IF RND > rndf THEN '''Shorter punt$ = "WORMs shorter " pla$ = "l21cp21 rndf THEN '''Thicker punt$ = "WORMs thicker " pla$ = "l21fp21>c": cir% = 15: pai% = 14 GOSUB checkpunt dik% = 1: dik2% = 1: ndik% = ndik% + 1 RETURN '''END IF CASE 3 '''IF RND > rndf THEN '''Thinner punt$ = "WORMs thinner " pla$ = "l21fp21c": cir% = 15: pai% = 9 GOSUB checkpunt dun% = 1: dun2% = 1: ndun% = ndun% + 1 RETURN '''END IF CASE 4 '''IF RND > rndf THEN '''Stretch punt$ = "WORMs faster " pla$ = "l21g+p21a": cir% = 15: pai% = 3 GOSUB checkpunt rap% = 1: rap2% = 1: nrap% = nrap% + 1 RETURN '''END IF CASE 5 '''IF RND > rndf THEN '''Shrink punt$ = "WORMs slower " pla$ = "l21ep21d+": cir% = 15: pai% = 5 GOSUB checkpunt tra% = 1: tra2% = 1: ntra% = ntra% + 1 RETURN '''END IF CASE 6 '''IF RND > rndk AND RND < 1 - rndk THEN '''couple worm1 to worm2 IF RND > rndk THEN PLAY "l21o4c+ga-cd" punt$ = "WORMs coupling ": COLOR whd% pla$ = "l24o3cdefg" GOSUB duidaan wrm2% = 10 par% = 1: vlag% = 1: nko1% = nko1% + 1 END IF CASE 7 '''IF RND > rndk AND RND < 1 - rndk THEN '''couple worm2 to worm1 IF RND < 1 - rndk THEN PLAY "l21o4c+ga-cd" punt$ = "WORMs coupling ": COLOR whd2% pla$ = "l24o3cdefg" GOSUB duidaan wrm% = 11 par2% = 1: vlag% = 1: nko2% = nko2% + 1 END IF END SELECT '''close nested SELECT '''************** CASE CHR$(13): ''' ENTER = Stop PLAY "l21o4c+ga-cd" pri% = 0: punt$ = "WORMs ": GOSUB duidaan GOSUB saven CASE " " '''CLS and switch display info ON/OFF IF pri% = 0 THEN pri% = 1 ELSE pri% = 0 CLS GOSUB duidaan CASE "+" '''wait routine : slow down IF twacht < totwacht THEN twacht = twacht * 2 wacht% = 1 LOCATE 1, 1: PRINT USING "WORMs slower #######"; twacht CASE "-" '''wait routine : faster IF twacht > 1 THEN twacht = twacht * .5 wacht% = 1 IF twacht <= 1 THEN twacht = 1: wacht% = 0 LOCATE 1, 1: PRINT USING "WORMs faster #######"; twacht CASE "." '''sound ON/OFF IF pla% = 0 THEN pla% = 1 LOCATE 1, 1: PRINT "WORMs sound ON " ELSE pla% = 0 LOCATE 1, 1: PRINT "WORMs sound OFF " END IF CASE CHR$(0) + "M" '''enlarge feeding point = -> IF rp% < 40 THEN rp% = rp% + 1 LOCATE 1, 1: PRINT USING "WORMs feedpoint R## "; rp% CASE CHR$(0) + "K" '''diminish feeding point = <- IF rp% > 10 THEN rp% = rp% - 1 LOCATE 1, 1: PRINT USING "WORMs feedpoint R## "; rp% CASE CHR$(0) + "H" '''prolong feeding time = UP IF eett < 10 THEN eett = eett + 1 LOCATE 1, 1: PRINT USING "WORMs feeding ##s "; eett CASE CHR$(0) + "P" '''shorten feeding time = DOWN IF eett > 1 THEN eett = eett - 1 LOCATE 1, 1: PRINT USING "WORMs feeding ##s "; eett CASE CHR$(27) '''ESCAPE = intro GOSUB intro END SELECT RETURN '''********************************************************************** schuifop: '''move rings FOR i% = 0 TO leng% - 1 x%(i%) = x%(i% + 1): y%(i%) = y%(i% + 1) NEXT i% RETURN schuifop2: FOR i% = 0 TO leng2% - 1 xx%(i%) = xx%(i% + 1): yy%(i%) = yy%(i% + 1) NEXT i% RETURN '''********************************************************************** titel: COLOR 13: LOCATE 2, 1 PRINT " WORMSwormsWORMSwormsWORMSwormsWORMSworms" PRINT COLOR 11: PRINT " שששששששששש" COLOR 10: PRINT " רררררררררר" COLOR 11: PRINT " oooooooooo" COLOR 10: PRINT " 0000000000" COLOR 14: LOCATE 28, 50: PRINT "Credits: guido wuyts 1995" col = 11 '''wait key tw = TIMER WHILE a$ = "" AND TIMER - tw < 20 COLOR col: LOCATE 28, 5: PRINT USING "-> Press a key......... ## s"; 20 - TIMER + tw tijd = TIMER WHILE TIMER - tijd < .5: WEND '''blinking cycle a$ = INKEY$ IF col = 11 THEN col = 5 ELSE col = 11 WEND IF a$ <> "" THEN pla% = 1: pri% = 0: GOSUB duidaan ELSE pla% = 0: pri% = 1 END IF RETURN '''*********************************************************************** trager: '''rush towards 'slower' point, worm1 delx = -x%(leng%) + xf% dely = -y%(leng%) + yf% rf = SQR(delx ^ 2 + dely ^ 2) IF rf < r0% THEN tra2% = 0: pla$ = "o3" + pla$ IF rf > rp% + r% + ds% THEN xn% = ds% * (xf% - x%(leng%)) / rf yn% = ds% * (yf% - y%(leng%)) / rf x%(leng%) = x%(leng%) + xn%: y%(leng%) = y%(leng%) + yn% ELSE wrm% = 7: GOSUB herteken IF pla% = 1 THEN PLAY pla$ LOCATE 1, 1: COLOR pai%: PRINT punt$ CIRCLE (xf%, yf%), rp%, cir% PAINT (xf%, yf%), pai%, cir% tra% = 2: vlag% = 2: str = rp% tijd = TIMER END IF RETURN trager2: '''. . . . worm2 delxx = xf% - xx%(leng2%) delyy = yf% - yy%(leng2%) rrf = SQR(delxx ^ 2 + delyy ^ 2) IF rrf < r0% THEN tra% = 0: pla$ = "o2" + pla$ IF rrf > rp% + r2% + ds2% THEN xxn% = ds2% * (xf% - xx%(leng2%)) / rrf yyn% = ds2% * (yf% - yy%(leng2%)) / rrf xx%(leng2%) = xx%(leng2%) + xxn%: yy%(leng2%) = yy%(leng2%) + yyn% ELSE wrm2% = 7: GOSUB herteken2 IF pla% = 1 THEN PLAY pla$ LOCATE 1, 1: COLOR pai%: PRINT punt$ CIRCLE (xf%, yf%), rp%, cir% PAINT (xf%, yf%), pai%, cir% tra2% = 2: vlag% = 2: str = rp% tijd = TIMER END IF RETURN '''************************************************************************ verdik: '''make thicker, worm1 IF r% < rmax% THEN GOSUB wissen r% = r% + 1 GOSUB duidaan GOSUB herteken ELSE pri% = 0: GOSUB duidaan LOCATE 1, 1: COLOR wrm%: PRINT "worm 1 wins: thickness "; rmax% PLAY "l21o4c+ga-cd" GOSUB saven END IF RETURN verdik2: '''. . . . worm2 IF r2% < rmax% THEN GOSUB wissen2 r2% = r2% + 1 GOSUB duidaan GOSUB herteken2 ELSE pri% = 0: GOSUB duidaan LOCATE 1, 1: COLOR wrm2%: PRINT "worm 2 wins: thickness "; rmax% PLAY "l21o4c+ga-cd" GOSUB saven END IF RETURN '''*********************************************************************** verdun: '''make thinner, worm1 IF r% > 1 THEN GOSUB wissen r% = r% - 1 GOSUB duidaan GOSUB herteken ELSE pri% = 0: GOSUB duidaan LOCATE 1, 1: COLOR wrm%: PRINT "worm 1 dies: thickness 0" PLAY "l21o4c+ga-cd" GOSUB saven END IF RETURN verdun2: '''. . . . worm2 IF r2% > 1 THEN GOSUB wissen2 r2% = r2% - 1 GOSUB duidaan GOSUB herteken2 ELSE pri% = 0: GOSUB duidaan LOCATE 1, 1: COLOR wrm2%: PRINT "worm 2 dies: thickness 0" PLAY "l21o4c+ga-cd" GOSUB saven END IF RETURN '''********************************************************************** verkort: IF leng% > 1 THEN '''make shorter, worm1 GOSUB wissen leng% = leng% - 1 GOSUB duidaan GOSUB herteken ELSE pri% = 0: GOSUB duidaan LOCATE 1, 1: COLOR wrm%: PRINT "worm 1 dies: length 0 " PLAY "l21o4c+ga-cd" GOSUB saven END IF RETURN verkort2: IF leng2% > 1 THEN '''. . . . worm2 GOSUB wissen2 leng2% = leng2% - 1 GOSUB duidaan GOSUB herteken2 ELSE pri% = 0: GOSUB duidaan LOCATE 1, 1: COLOR wrm2%: PRINT "worm 2 dies: length 0 " PLAY "l21o4c+ga-cd" GOSUB saven END IF RETURN '''********************************************************************* verleng: IF leng% < maxx% THEN '''make longer, worm1 leng% = leng% + 1 GOSUB duidaan x%(leng%) = x%(leng% - 1): y%(leng%) = y%(leng% - 1) GOSUB herteken ELSE pri% = 0: GOSUB duidaan LOCATE 1, 1: COLOR wrm%: PRINT "worm 1 wins: length "; maxx% PLAY "l21o4c+ga-cd" GOSUB saven END IF RETURN verleng2: IF leng2% < maxx% THEN '''. . . . worm2 leng2% = leng2% + 1 GOSUB duidaan xx%(leng2%) = xx%(leng2% - 1): yy%(leng2%) = yy%(leng2% - 1) GOSUB herteken2 ELSE pri% = 0: GOSUB duidaan LOCATE 1, 1: COLOR wrm2%: PRINT "worm 2 wins: length "; maxx% PLAY "l21o4c+ga-cd" GOSUB saven END IF RETURN '''********************************************************************* versnel: IF ds% < dsm% THEN '''make faster (stretch) worm 1 GOSUB wissen ds% = ds% + 1 GOSUB duidaan GOSUB herteken ELSE pri% = 0: GOSUB duidaan LOCATE 1, 1: COLOR wrm%: PRINT "worm 1 wins: stretch "; dsm% PLAY "l21o4c+ga-cd" GOSUB saven END IF RETURN versnel2: IF ds2% < dsm% THEN '''. . . . worm2 ds2% = ds2% + 1 GOSUB duidaan GOSUB herteken2 ELSE pri% = 0: GOSUB duidaan LOCATE 1, 1: COLOR wrm2%: PRINT "worm 2 wins: stretch "; dsm% PLAY "l21o4c+ga-cd" GOSUB saven END IF RETURN '''*********************************************************************** vertraag: IF ds% > 1 THEN '''make slower (shrink) worm1 GOSUB wissen ds% = ds% - 1 GOSUB duidaan GOSUB herteken ELSE pri% = 0: GOSUB duidaan LOCATE 1, 1: COLOR wrm%: PRINT "worm 1 dies: stretch 0" PLAY "l21o4c+ga-cd" GOSUB saven END IF RETURN vertraag2: IF ds2% > 1 THEN '''. . . . worm2 GOSUB wissen2 ds2% = ds2% - 1 GOSUB duidaan GOSUB herteken2 ELSE pri% = 0: GOSUB duidaan LOCATE 1, 1: COLOR wrm2%: PRINT "worm 2 dies: stretch 0" PLAY "l21o4c+ga-cd" GOSUB saven END IF RETURN '''********************************************************************* vulpunt: '''fill feeding point str0 = rp% * (1 - (TIMER - tijd) / eett) WHILE str > str0 CIRCLE (xf%, yf%), rp% - str, 0 str = str - 1 WEND RETURN '''********************************************************************** wachten: '''waiting FOR dum1 = 1 TO cpu FOR dum = 1 TO twacht: NEXT dum NEXT dum1 RETURN '''********************************************************************** wispunt: '''clear feeding point remnants rw = rp% * 1.15 CIRCLE (xf%, yf%), rp%, 0 CIRCLE (xf%, yf%), rw, 8'''vul% PAINT (xf%, yf%), 0, 8 ''''vul% CIRCLE (xf%, yf%), rw, 0 RETURN '''********************************************************************** wissen: '''clear worm rings FOR i% = 0 TO leng% CIRCLE (x%(i%), y%(i%)), r%, 0 PSET (x%(i%), y%(i%)), 0 NEXT i% RETURN wissen2: FOR i% = 0 TO leng2% CIRCLE (xx%(i%), yy%(i%)), r2%, 0 PSET (xx%(i%), yy%(i%)), 0 NEXT i% RETURN '''***********************************************************************