MMPREY.BAS

This module is part of the original MMBasic library. It is reproduced here with kind permission of Hugh Buckle and Geoff Graham. Be aware it may reference functionality which has changed or is deprecated in the latest versions of MMBasic.

10 : Rem "Prey" was published by Phil Cohen in ETI magazine September 1982.
20 : Rem Originally written for the Apple II.
30 : Rem In the same year I ported it to run on the Microbee computer,
40 : Rem and added a few features using the Microbee's more advanced
50 : Rem graphics commands and screen resolution.
60 : Rem In 2011, 29 years later, I found the same ETI magazine, and
70 : Rem decided to rewite it MMBasic to run on the Maximite, just for fun.
80 : Rem Glenn Littleford. www.thebackshed.com
90 : Cls
100 : Print Tab(10); "***Prey***" : Print
110 : Print "Prey is a life simulation program. It plots the "
120 : Print "population numbers of a predator, like a fox, "
130 : Print "and a prey."
150 : Print "You first set up their initial environment, to """
160 : Print "see if it can sustain stable populations, and "
170 : Print "then introduce a change some time during the"
180 : Print "10 year simulation. For example, reduce the "
190 : Print "territory, ( land clearing ), increase the"
200 : Print "food yield ( plant carrots ), or cull the prey"
210 : Print "when they threaten your land productivity."
220 : Print "The program will then plot the effect on prey"
230 : Print "and predator populations." : Print
240 : Input "Press ENTER to continue"; a$
250 : TR = 500: P1 = 180: P2 = 75: YD = 15
260 : L1=10 : L2=20 : CU=1
270 : Cls
280 : Print "*** Prey ***" : Print
290 : Print "Option  Description                Value" : Print
300 : Print "  1    Size of territory           "; TR
310 : Print "  2    Prey Population             "; Int(P1)
320 : Print "  3    Predator Population         "; Int(P2)
330 : Print "  4    Food yield per unit area    "; YD
340 : Print "  5    Prey natural life span      "; L1
350 : Print "  6    Predator natural life span  "; L2
360 : Print "  7    Prey Cull Losses            "; CU
370 : Print "  8    Done, move to next step"
380 : Print "  9    Reset to defaults"
390 : Print "  Q    Quit"
400 : Print
410 : Input "Which would you like to alter "; A$
420 : If a$="Q" Or a$="q" Then GoTo 1200
430 : A=Val(a$) : If A>9 Or A<1 Then GoTo 270
440 : Print
450 : On A GoTo 460, 470, 480, 490, 500, 510, 520, 530, 250, 1200
460 : Input "Territory Size"; TR: GoTo 270
470 : Input "Prey Population"; P1: GoTo 270
480 : Input "Predator Population"; P2: GoTo 270
490 : Input "Food yeild per unit area"; YD: GoTo 270
500 : Input "prey natural life span"; L1: GoTo 270
510 : Input "Predator natural life span"; L2: GoTo 270
520 : Input "Prey cull losses"; CU: GoTo 270
530 : Input "Year for change ( 0-10 )"; YR
540 : YX=Int(20*YR)
550 : Input "Which variable to change ( 1-7 )"; V
560 : If V > 7 Or V < 1 Then GoTo 550
570 : Print "Value to be set at year "; YR; " ";
580 : Input VL
590 : Cls
600 :  Locate 10,0 : Print "*** Prey ***"
610 : Line (100,0)-(300,159),1,"B"
620 : For i=100 To 300 Step 20
630 :   Line (i,159)-(i,162)
640 :   Locate i-10,170 : Print (i-100)/20
650 : Next I
660 : Locate 0,30 : Print "Territory:";
670 : Locate 0,45 : Print "Prey Pop :";
680 : Locate 0,60 : Print "Pred Pop :";
690 : Locate 0,75 : Print "Yield    :";
700 : Locate 0,90 : Print "Cull     :";
710 : Locate 0,105 : Print "Pred Life:";
720 : Locate 0,120 : Print "Prey Life:";
730 : Line (0,148)-(12,148) : Locate 15,145 : Print "Prey";
740 : For i=0 To 12 Step 2 : Line (i,160)-(i,157) : Next i : Locate 15,156 : Print "Predator";
750 : X = 0
760 : KL = (P1 * P2) / TR
770 : FD = TR * YD
780 : If P1 = 0 Then B1 = 0: GoTo 800
790 : B1 = FD / P1
800 : If B1 > P1 / 4 Then B1 = P1 / 4
810 : B2 = 10 * KL / P2
820 : If B2 > P2 / 4 Then B2 = P2 / 4
830 : M1 = (P1 - B1) / L1
840 : M2 = (P2 - B2) / L2
850 : P1 = P1 - M1 - KL + B1 - CU
860 : P2 = P2 - M2 + B2
870 : If P1 < 0 Then P1 = 0
880 : If P2 < 0 Then P2 = 0
890 : Y = 159 - (.5 * P1)
900 : If Y < 0 Then Y = 0: If Y > 159 Then Y = 159
910 : If X = 0 Then GoTo 930
920 : Line (X+100 - 1, OY)-(X+100, Y)
930 : OY = Y
940 : Y = 159 - (.8 * P2)
950 : If Y > 1 And Y < 158 And Int(X / 2) = X / 2 Then Line (X+100, Y - 1)-(X+100, Y + 1)
960 : X = X + 1
970 : Locate 60,30 : Print TR; " ";
980 : Locate 60,45 : Print Int(P1); " ";
990 : Locate 60,60 : Print Int(P2); " ";
1000 : Locate 60,75 : Print YD; " ";
1010 : Locate 60,90 : Print CU; " "
1020 : Locate 60,105 : Print L1; " ";
1030 : Locate 60,120 : Print L2; " ";
1040 : If X <> YX Then GoTo 1160
1050 : Locate 0,187
1060 : Print "Year "; YR; " ";
1070 : On V GoTo 1080, 1090, 1100, 1110, 1120, 1130, 1140
1080 : Print "Territory "; TR; : TR = VL: GoTo 1150
1090 : Print "Prey Pop"; Int(P1); : P1 = VL: GoTo 1150
1100 : Print "Pred Pop "; Int(P2); : P2 = VL: GoTo 1150
1110 : Print "Yield "; YD; : YD = VL: GoTo 1150
1120 : Print "Prey Life "; L1; : L1 = VL: GoTo 1150
1130 : Print "Pred Life "; L2; : L2 = VL: GoTo 1150
1140 : Print "Cull "; CU; : CU = VL
1150 : Print " -> "; VL; "  ";
1160 : Pause 50
1170 : If X < 200 Then GoTo 760
1180 : Locate 140,200 : Input "Press ENTER to continue "; A$
1190 : GoTo 270
1200 : Cls
1210 : Print : Print
1220 : Print Tab(20); "Thanks for playing"
1230 : Print
1240 : Print Tab(20); "www.thebackshed.com"
1220 : End
>