kolibrios/programs/develop/tinybasic-1.0.4/bas/hammurabi.bas
turbocat 43795ab11a Added new port TinyBasic
(An improved version in conjunction with ktcc can generate executable files.)

git-svn-id: svn://kolibrios.org@8733 a494cfbc-eb01-0410-851d-a64ba20cac60
2021-05-23 15:55:49 +00:00

161 lines
4.3 KiB
QBasic

REM
REM --- Tiny BASIC Interpreter and Compiler Project
REM --- Hammurabi Demonstration Game
REM
REM --- Released as Public Domain by Damian Gareth Walker, 2019
REM --- Created: 25-Aug-2019
REM
REM --- Variable List
REM
REM A - A random number returned by the Random Number Generator
REM B - The amount of land bought/sold by the player
REM D - The number of people who died of starvation
REM E - Average percentage of deaths
REM F - The amount of grain fed to the people
REM G - The quantity of stored grain
REM I - The number of immigrants on a given turn
REM L - How much land the city owns
REM M - Maximum land that can be planted
REM P - The number of people in the city
REM R - The amount of grain eaten by rats
REM S - The amount of grain planted as seed
REM T - Time played
REM V - The value of land per acre
REM Y - The grain yield of each piece of land
REM Z - The random number seed
REM --- Initialise the random number seed
PRINT "Think of a number."
INPUT Z
REM --- Initialise the game
LET D=0
LET E=0
LET G=2800
LET I=5
LET L=1000
LET P=100
LET R=200
LET T=1
LET Y=3
REM --- Print the report
15 PRINT "Hammurabi, I beg to report to you,"
PRINT "In year ",T,", ",D," people starved,"
PRINT "and ",I," came to the city."
PRINT "You harvested ",Y," bushels of grain per acre."
PRINT "Rats destroyed ",R," bushels."
PRINT "Population is now ",P,","
PRINT "and the city owns ",L," acres of land."
PRINT "You have ",G," bushels of grain in store."
IF D>P*45/100 THEN GOTO 100
IF T=11 THEN GOTO 90
REM --- Buy land
GOSUB 250
LET V=17+A-A/10*10
PRINT "Land is trading at ",V," bushels per acre."
30 PRINT "How many acres do you wish to buy (0-",G/V,")?"
INPUT B
IF B>G/V THEN GOTO 30
IF B>0 THEN GOTO 40
REM --- Sell land
35 PRINT "How many acres do you wish to sell (0-",L,")?"
INPUT B
IF B>L THEN GOTO 35
LET B=-B
REM --- Feed the people
40 PRINT "How many bushels to feed the people (0-",G-B*V,")?"
INPUT F
IF F>=0 THEN IF F<=G-B*V THEN GOTO 45
GOTO 40
REM --- Plant with seed
45 LET M=2*(G-F-B*V)
IF 10*P<M THEN LET M=10*P
IF L+B<M THEN LET M=L+B
50 PRINT "How many acres do you wish to plant with seed (0-",M,")?"
INPUT S
IF S>M THEN GOTO 50
REM --- Work out the result
LET L=L+B
LET G=G-B*V-F-S/2
REM Yield
GOSUB 250
LET Y=1+A-A/5*5
REM Rats
GOSUB 250
LET A=1+A-A/5*5
LET R=0
IF A>2 THEN GOTO 70
GOSUB 250
IF G>0 THEN LET R=1+A-A/G*G
REM Recalculate grain
70 LET G=G+S*Y-R
IF G<0 THEN LET G=0
REM Immigration/Birth
GOSUB 250
LET A=1+A-A/5*5
LET I=A*(L+S/20)/P/5+1
REM Feeding the people
LET D=0
IF P<=F/20 THEN GOTO 80
LET D=P-F/20
LET E=((T-1)*E+(100*D/P))/(T+1)
80 LET P=P-D+I
IF P<=0 THEN GOTO 210
LET T=T+1
REM Back to report
PRINT ""
GOTO 15
REM --- Evaluation
90 PRINT "Your reign ends after ",T-1," years."
PRINT "You leave your city with ",P," people."
PRINT "You have ",L," acres of land to support them."
PRINT G," bushels of grain remain in store."
PRINT ""
IF E<=3 THEN IF L/P>=10 THEN GOTO 110
IF E<=10 THEN IF L/P>=9 THEN GOTO 120
IF E<=33 THEN IF L/P>=7 THEN GOTO 130
REM --- Terrible performance - including premature end
100 PRINT "Your performance has been so terrible that"
PRINT "you were driven from your throne after ",T," years!"
END
REM --- Best performance
110 PRINT "Your expert statesmanship is worthy of Hammurabi himself!"
PRINT "The city will honour your memory for all eternity."
END
REM --- Average performance
120 PRINT "Your competent rule is appreciated by your citizens."
PRINT "They will remember you fondly for some time to come."
END
REM --- Poor performance
130 PRINT "Your mismanagement left your city in a very poor state."
PRINT "Your incompetence and oppression will not be missed by your people."
END
REM --- Everybody starved
210 PRINT "You have starved your entire kingdom to death!"
END
REM --- Random Number Generator
250 LET Z=5*Z+35
LET Z=Z-Z/4096*4096
LET A=Z
RETURN