1000  REM *** BEASTI *** PAPER-TAPE BASIC VERSION
1010  REM ORIGINAL BEASTI.D600 MODIFIED FOR TSB-E W/ MOD HP2100 SIM
1020  REM EXTENSIVE MODS MADE TO FLOW TO MAKE IT SHOW FINAL CONFIG
1030  REM RESULTING IN MUCH SPAGETTI..WHATEVER TO MAKE IT WORK
1040  REM FURTHER MODIFIED FOR HP PAPER-TAPE BASIC (2008)
1050  REM STRING INPUT REPLACED BY NUMERIC INPUT, REP'D B$ W/ Z[]
1060  REM TERMINAL CODES REMOVED, DID OTHER STUFF
1070  REM T9=NUMBER OF TURNS
1080  LET T9=50
1100  PRINT "ENTER 1 FOR INSTRUCTIONS OR SEED NUMBER ";
1110  INPUT Z9
1120  IF Z9=1 THEN 2860
1149  REM SEED RNG (ADDED)
1150  FOR I=0 TO Z9
1160  LET J=RND(0)
1170  NEXT I
1250  DIM B[10,10],O[20,20],M[9,2],Z[7]
1260  REM "EWSNRTJ" ---> 6428510 IN Z ARRAY INSTEAD OF B$
1261  REM IF USING A NUMERIC KEYPAD THIS MAKES SENSE
1262  DATA 6,4,2,8,5,1,0
1263  FOR I=1 TO 7
1264  READ Z[I]
1265  NEXT I
1270  DATA 0,1,0,-1,1,0,-1,0,0,0,-1,-1,1,1,-1,1,1,-1
1280  LET F=0
1290  FOR I=1 TO 9
1300  FOR K=1 TO 2
1310  READ M[I,K]
1320  NEXT K
1330  NEXT I
1340  REM INITIALIZE BOARD
1350  MAT B=ZER
1360  LET Z=RND(0)
1370  LET O=10
1380  FOR I=1 TO 10
1390  LET X=INT(RND(0)*10)+1
1400  LET Y=INT(RND(0)*10)+1
1410  IF B[X,Y]#0 THEN 1390
1420  LET O[I,1]=X
1430  LET O[I,2]=Y
1440  LET B[X,Y]=10
1450  NEXT I
1460  LET O=10
1470  REM PUT BEASTI ON BOARD
1480  LET X=INT(RND(0)*10)+1
1490  LET Y=INT(RND(0)*10)+1
1500  IF B[X,Y]#0 THEN 1480
1510  LET B[X,Y]=-1
1520  REM PUT ORGANISM EATER ON BOARD
1530  LET X0=INT(RND(0)*10)+1
1540  LET Y0=INT(RND(0)*10)+1
1550  IF B[X0,Y0]#0 THEN 1530
1560  LET B[X0,Y0]=100
1570  REM INITIALIZE FOR GAME:V0 IS AGGRESSIVENESS OF BEASTI
1579  REM WAS V0=1.E-35
1580  LET V0=1.00000E-35
1590  FOR I0=1 TO T9
1600  PRINT
1610  PRINT "TIME =";I0
1620  REM PRINT OUT THE BOARD
1622  REM DID STUFF HERE
1625  PRINT ".---------------------."
1630  FOR X1=1 TO 10
1635  PRINT ":";
1640  FOR Y1=1 TO 10
1650  IF B[X1,Y1] >= 0 THEN 1680
1660  PRINT " +";
1670  GOTO 1750
1680  IF B[X1,Y1]>0 THEN 1710
1689  REM WAS " .";...
1690  PRINT "  ";
1700  GOTO 1750
1710  IF B[X1,Y1]=100 THEN 1740
1720  PRINT " 0";
1730  GOTO 1750
1740  PRINT " *";
1750  NEXT Y1
1760  PRINT " :"
1770  NEXT X1
1775  PRINT "`---------------------'"
1776  REM FLOW CHANGE...
1777  IF O=0 THEN 2240
1778  IF B[X0,Y0]=-1 THEN 2660
1779  IF I0>T9 THEN 2820
1780  PRINT "MOVE ";
1790  INPUT A9
1800  REM GOTTA FIX THIS.. JUMPING OUT OF A NEXT
1802  REM JUST AIN'T RIGHT, SOME BASICS MAY OBJECT
1803  LET J9=0
1810  FOR J=1 TO 7
1820  IF A9#Z[J] THEN 1830
1825  LET J9=J
1830  NEXT J
1835  LET J=J9
1840  IF J#0 THEN 1850
1841  PRINT "ENTER DIGIT: 6,4,2,8,5,1,0"
1842  PRINT "TO REPRESENT E W S N R T J"
1843  PRINT "(NUMERICAL KEYPAD)"
1844  GOTO 1780
1850  IF J<6 THEN 1990
1860  IF J=6 THEN 1960
1870  LET X1=INT(RND(0)*10)+1
1880  LET Y1=INT(RND(0)*10)+1
1890  IF X1#X0 THEN 1910
1900  IF Y1=Y0 THEN 1870
1910  IF B[X1,Y1] >= 0 THEN 2130
1920  PRINT "*** SPLAT ***"
1930  PRINT "YOU JUST SMASHED THE BEASTI!!!!"
1940  LET F=1
1950  GOTO 2300
1960  LET X1=Y0
1970  LET Y1=X0
1980  GOTO 2100
1990  LET X1=X0+M[J,1]
2000  LET Y1=Y0+M[J,2]
2010  IF J=5 THEN 2300
2020  IF X1#11 THEN 2040
2030  LET X1=X1-10
2040  IF X1#0 THEN 2060
2050  LET X1=X1+10
2060  IF Y1#11 THEN 2080
2070  LET Y1=Y1-10
2080  IF Y1#0 THEN 2100
2090  LET Y1=Y1+10
2100  IF B[X1,Y1] >= 0 THEN 2130
2110  PRINT "NO NO NO..MUSNT EAT THE BEASTI"
2120  GOTO 1780
2130  IF B[X1,Y1]=0 THEN 2300
2140  IF B[X1,Y1]=100 THEN 2300
2150  FOR I=1 TO O
2160  IF X1#O[I,1] THEN 2180
2165  REM MODS HERE TO FIX
2170  IF Y1#O[I,2] THEN 2180
2171  LET O[I,1]=O[O,1]
2172  LET O[I,2]=O[O,2]
2180  NEXT I
2210  LET O=O-1
2220  PRINT "***** GULP *****"
2229  REM WAS IF O>0 THEN 2300
2230  GOTO 2300
2240  PRINT "CONGRATULATIONS!... YOU HAVE SURVIVED THROUGH ANOTHER DAY"
2250  PRINT "ENTER 1 TO CONTINUE ";
2270  INPUT Z9
2280  IF Z9=1 THEN 1350
2290  STOP
2300  LET B[X0,Y0]=0
2310  LET B[X1,Y1]=100
2320  LET X0=X1
2330  LET Y0=Y1
2340  REM MOVE THE ORGANISM
2344  REM FLOW CHANGE...
2345  IF O=0 THEN 2810
2350  FOR I=1 TO O
2360  LET R=INT(RND(0)*4)+1
2370  LET X1=O[I,1]+M[R,1]
2380  LET Y1=O[I,2]+M[R,2]
2390  IF X1>10 THEN 2500
2400  IF X1<1 THEN 2500
2410  IF Y1>10 THEN 2500
2420  IF Y1<1 THEN 2500
2430  IF B[X1,Y1]#0 THEN 2500
2440  LET Z0=O[I,1]
2450  LET Z1=O[I,2]
2460  LET B[Z0,Z1]=0
2470  LET O[I,1]=X1
2480  LET O[I,2]=Y1
2490  LET B[X1,Y1]=10
2500  NEXT I
2510  REM MOVE THE BEASTI
2520  IF F=1 THEN 2810
2530  REM IF O>5 THEN 1440
2540  REM V0=O
2550  LET M=1.00000E+20
2560  FOR I=1 TO 9
2570  LET X1=X+M[I,1]
2580  LET Y1=Y+M[I,2]
2590  IF X1>10 THEN 2760
2600  IF X1<1 THEN 2760
2610  IF Y1>10 THEN 2760
2620  IF Y1<1 THEN 2760
2630  IF B[X1,Y1]=10 THEN 2760
2640  IF B[X1,Y1]#100 THEN 2680
2650  PRINT "*** GULP! ***"
2652  REM FLOW CHANGE TO SHOW END CONFIG
2653  LET B[X,Y]=0
2654  LET B[X1,Y1]=-1
2655  GOTO 2810
2660  PRINT "THE BEASTI THANKS YOU FOR YOUR COOPERATION"
2670  GOTO 2250
2680  LET S=0
2690  FOR J=1 TO O
2700  LET S=S+(O[J,1]-X1)^2+(O[J,2]-Y1)^2
2710  NEXT J
2720  LET S=S+V0*((X1-X0)^2+(Y1-Y0)^2)
2730  IF S>M THEN 2760
2740  LET M=S
2750  LET B=I
2760  NEXT I
2770  LET B[X,Y]=0
2780  LET X=X+M[B,1]
2790  LET Y=Y+M[B,2]
2800  LET B[X,Y]=-1
2810  NEXT I0
2812  REM FLOW CHANGE...
2813  GOTO 1600
2820  PRINT "YOU HAVE NOT EATEN YOUR MINIMUM DAILY REQUIREMENTS";
2821  PRINT " OF ORGANISMS"
2830  PRINT "*** STARVATION ***"
2840  GOTO 2250
2850  PRINT
2860  PRINT
2870  PRINT "THE OBJECT OF THE GAME IS TO EAT ALL OF THE ORGANISMS"
2880  PRINT
2890  PRINT "EACH MOVE TAKES UP ONE HOUR."
2900  PRINT "THERE IS A BEASTI WHICH HAS ONLY ONE OBJECTIVE:"
2910  PRINT "             TO EAT YOU!"
2920  PRINT
2930  PRINT "THE BEASTI EATS YOU BY MOVING TO OCCUPY YOUR SPACE"
2940  PRINT "THE SAME APPLYS WITH YOU EATING THE ORGANISIMS."
2950  PRINT "YOU HAVE THE FOLLOWING MOVES:  6 4 2 8 5 1 (FOR EWSNRT)"
2960  PRINT
3000  PRINT "         0 (J)          JUMP (RANDOM)"
3010  PRINT "                        NOTE:  IF YOU LAND ON THE BEASTI,"
3020  PRINT "                        IT IS CRUSHED.  ***HOWEVER***"
3030  PRINT "                        YOU MAY LAND RIGHT BESIDE THE"
3040  PRINT "                        BEASTI, IN WHICH CASE IT'S"
3050  PRINT "                              *** LUNCHTIME ***"
3060  PRINT
3070  PRINT "THE BEASTI CAN MOVE HORIZONTALLY, VERTICALLY, OR";
3071  PRINT " DIAGONALLY ONE"
3080  PRINT "SPACE EACH HOUR.  IF YOU MOVE OFF THE BOARD, YOU WILL";
3081  PRINT " REAPPEAR"
3090  PRINT "ON THE OPPOSITE SIDE."
3100  PRINT "    * = YOU"
3110  PRINT "    + = *BEASTI*"
3120  PRINT "    O = ORGANISMS"
3129  REM REM ADDED PAUSE...
3130  PRINT "THE BEASTI IS INTELLIGENT, SO BE CAREFULL !!";
3131  PRINT " ENTER SEED NUMBER ";
3135  INPUT Z9
3138  PRINT
3140  GOTO 1150
3150  END
