mirror of
https://github.com/coding-horror/basic-computer-games.git
synced 2025-12-23 15:37:51 -08:00
Port of Hamurabi to Python
This commit is contained in:
183
43 Hammurabi/python/hamurabi.py
Normal file
183
43 Hammurabi/python/hamurabi.py
Normal file
@@ -0,0 +1,183 @@
|
|||||||
|
def GenRandom(C):
|
||||||
|
C=int(random()*5)+1
|
||||||
|
def BadInput850():
|
||||||
|
print ( "\nHAMURABI: I CANNOT DO WHAT YOU WISH.")
|
||||||
|
print ( "GET YOURSELF ANOTHER STEWARD!!!!!")
|
||||||
|
Z=99
|
||||||
|
def BadInput710(S):
|
||||||
|
print ( "HAMURABI: THINK AGAIN. YOU HAVE ONLY")
|
||||||
|
print ( S,"BUSHELS OF GRAIN. NOW THEN,")
|
||||||
|
def BadInput720(A):
|
||||||
|
print ( "HAMURABI: THINK AGAIN. YOU OWN ONLY",A,"ACRES. NOW THEN,")
|
||||||
|
def BadInput710(S):
|
||||||
|
print ( "HAMURABI: THINK AGAIN. YOU HAVE ONLY")
|
||||||
|
print ( S,"BUSHELS OF GRAIN. NOW THEN,")
|
||||||
|
def NationalFink():
|
||||||
|
print ( "DUE TO THIS EXTREME MISMANAGEMENT YOU HAVE NOT ONLY")
|
||||||
|
print ( "BEEN IMPEACHED AND THROWN OUT OF OFFICE BUT YOU HAVE")
|
||||||
|
print ( "ALSO BEEN DECLARED NATIONAL FINK!!!!")
|
||||||
|
|
||||||
|
def B_input(promptstring): #emulate BASIC input. It rejects non-numeric values
|
||||||
|
x=input(promptstring)
|
||||||
|
while x.isalpha():
|
||||||
|
x=input("?REDO FROM START\n? ")
|
||||||
|
return int(x)
|
||||||
|
|
||||||
|
from random import random
|
||||||
|
from random import seed
|
||||||
|
seed()
|
||||||
|
title = "HAMURABI"
|
||||||
|
title = title.rjust(32,' ')
|
||||||
|
print (title)
|
||||||
|
attribution = "CREATIVE COMPUTING MORRISTOWN, NEW JERSEY"
|
||||||
|
attribution = attribution.rjust(15," ")
|
||||||
|
print (attribution)
|
||||||
|
print ('\n\n\n')
|
||||||
|
print ("TRY YOUR HAND AT GOVERNING ANCIENT SUMERIA")
|
||||||
|
print ("FOR A TEN-YEAR TERM OF OFFICE.\n")
|
||||||
|
D1=0
|
||||||
|
P1=0
|
||||||
|
Z=0 #year
|
||||||
|
P=95 #population
|
||||||
|
S=2800 #grain stores
|
||||||
|
H=3000
|
||||||
|
E=H-S #rats eaten
|
||||||
|
Y=3 #yield (amount of production from land). Reused as price per acre
|
||||||
|
A=H/Y #acres of land
|
||||||
|
I=5 #immigrants
|
||||||
|
Q=1 #boolean for plague, also input for buy/sell land
|
||||||
|
D=0 # people
|
||||||
|
while (Z<11): #line 270. main loop. while the year is less than 11
|
||||||
|
print ("\n\n\nHAMURABI: I BEG TO REPORT TO YOU")
|
||||||
|
Z=Z+1 #year
|
||||||
|
print ( "IN YEAR",Z,",",D,"PEOPLE STARVED,",I,"CAME TO THE CITY,")
|
||||||
|
P=P+I
|
||||||
|
if Q==0:
|
||||||
|
P=int(P/2)
|
||||||
|
print ("A HORRIBLE PLAGUE STRUCK! HALF THE PEOPLE DIED.")
|
||||||
|
print ("POPULATION IS NOW",P)
|
||||||
|
print ("THE CITY NOW OWNS",A,"ACRES.")
|
||||||
|
print ("YOU HARVESTED",Y,"BUSHELS PER ACRE.")
|
||||||
|
print ("THE RATS ATE",E,"BUSHELS.")
|
||||||
|
print ("YOU NOW HAVE ",S,"BUSHELS IN STORE.\n")
|
||||||
|
C=int(10*random()) #random number between 1 and 10
|
||||||
|
Y=C+17
|
||||||
|
print ("LAND IS TRADING AT",Y,"BUSHELS PER ACRE.")
|
||||||
|
Q=-99 #dummy value to track status
|
||||||
|
while Q==-99: #always run the loop once
|
||||||
|
Q = B_input("HOW MANY ACRES DO YOU WISH TO BUY? ")
|
||||||
|
if Q<0:
|
||||||
|
Q = -1 #to avoid the corner case of Q=-99
|
||||||
|
BadInput850()
|
||||||
|
Z=99 #jump out of main loop and exit
|
||||||
|
elif Y*Q>S: #can't afford it
|
||||||
|
BadInput710(S)
|
||||||
|
Q=-99 # give'm a second change to get it right
|
||||||
|
elif Y*Q<=S: #normal case, can afford it
|
||||||
|
A=A+Q #increase the number of acres by Q
|
||||||
|
S=S-Y*Q #decrease the amount of grain in store to pay for it
|
||||||
|
C=0 #WTF is C for?
|
||||||
|
if Q ==0 and Z!=99: #maybe you want to sell some land?
|
||||||
|
Q = -99
|
||||||
|
while Q==-99:
|
||||||
|
Q = B_input( "HOW MANY ACRES DO YOU WISH TO SELL? ")
|
||||||
|
if Q<0:
|
||||||
|
BadInput850()
|
||||||
|
Z=99 #jump out of main loop and exit
|
||||||
|
elif Q<=A:#normal case
|
||||||
|
A=A-Q # reduce the acres
|
||||||
|
S=S+Y*Q #add to grain stores
|
||||||
|
C=0 #still don't know what C is for
|
||||||
|
else: #Q>A error!
|
||||||
|
BadInput720()
|
||||||
|
Q=-99 #reloop
|
||||||
|
print ("\n")
|
||||||
|
Q=-99
|
||||||
|
while Q==-99 and Z!=99:
|
||||||
|
Q = B_input("HOW MANY BUSHELS DO YOU WISH TO FEED YOUR PEOPLE? ")
|
||||||
|
if Q<0:
|
||||||
|
BadInput850()
|
||||||
|
#REM *** TRYING TO USE MORE GRAIN THAN IS IN SILOS?
|
||||||
|
elif Q>S:
|
||||||
|
BadInput710
|
||||||
|
Q=-99 #try again!
|
||||||
|
else: #we're good. do the transaction
|
||||||
|
S=S-Q #remove the grain from the stores
|
||||||
|
C=1 #set the speed of light to 1. jk
|
||||||
|
print ("\n")
|
||||||
|
D=-99 #dummy value to force at least one loop
|
||||||
|
while D == -99 and Z!=99:
|
||||||
|
D = B_input("HOW MANY ACRES DO YOU WISH TO PLANT WITH SEED? ")
|
||||||
|
if D<0:
|
||||||
|
BadInput850()
|
||||||
|
Z=99
|
||||||
|
elif D>0:
|
||||||
|
if D>A:
|
||||||
|
#REM *** TRYING TO PLANT MORE ACRES THAN YOU OWN?
|
||||||
|
BadInput720(A)
|
||||||
|
D = -99
|
||||||
|
elif int(D/2)>S:
|
||||||
|
#REM *** ENOUGH GRAIN FOR SEED?
|
||||||
|
BadInput710(S)
|
||||||
|
D = -99
|
||||||
|
elif D>=10*P:
|
||||||
|
#REM *** ENOUGH PEOPLE TO TEND THE CROPS?
|
||||||
|
print ("BUT YOU HAVE ONLY",P,"PEOPLE TO TEND THE FIELDS! NOW THEN,")
|
||||||
|
D=-99
|
||||||
|
else: #we're good. decrement the grain store
|
||||||
|
S=S-int(D/2)
|
||||||
|
GenRandom(C)
|
||||||
|
#REM *** A BOUNTIFUL HARVEST!
|
||||||
|
Y=C
|
||||||
|
H=D*Y
|
||||||
|
E=0
|
||||||
|
GenRandom(C)
|
||||||
|
if int(C/2)==C/2: #even number. 50/50 chance
|
||||||
|
#REM *** RATS ARE RUNNING WILD!!
|
||||||
|
E=int(S/C) #calc losses due to rats, based on previous random number
|
||||||
|
S=S-E+H #deduct losses from stores
|
||||||
|
GenRandom(C)
|
||||||
|
#REM *** LET'S HAVE SOME BABIES
|
||||||
|
I=int(C*(20*A+S)/P/100+1)
|
||||||
|
#REM *** HOW MANY PEOPLE HAD FULL TUMMIES?
|
||||||
|
C=int(Q/20)
|
||||||
|
#REM *** HORROS, A 15% CHANCE OF PLAGUE
|
||||||
|
#yeah, should be HORRORS, but left it
|
||||||
|
Q=int(10*(2*random()-.3))
|
||||||
|
if P>=C and Z!=99: #if there are some people without full bellies...
|
||||||
|
#REM *** STARVE ENOUGH FOR IMPEACHMENT?
|
||||||
|
D=P-C
|
||||||
|
if D>.45*P:
|
||||||
|
print ("\nYOU STARVED",D,"PEOPLE IN ONE YEAR!!!")
|
||||||
|
NationalFink()
|
||||||
|
Z=99 #exit the loop
|
||||||
|
P1=((Z-1)*P1+D*100/P)/Z
|
||||||
|
P=C
|
||||||
|
D1=D1+D
|
||||||
|
if Z!=99:
|
||||||
|
print ( "IN YOUR 10-YEAR TERM OF OFFICE,",P1,"PERCENT OF THE")
|
||||||
|
print ( "POPULATION STARVED PER YEAR ON THE AVERAGE, I.E. A TOTAL OF")
|
||||||
|
print ( D1,"PEOPLE DIED!!")
|
||||||
|
L=A/P
|
||||||
|
print ( "YOU STARTED WITH 10 ACRES PER PERSON AND ENDED WITH")
|
||||||
|
print ( L,"ACRES PER PERSON.\n")
|
||||||
|
if (P1>33 or L<7):
|
||||||
|
NationalFink()
|
||||||
|
elif (P1>10 or L<9):
|
||||||
|
print ( "YOUR HEAVY-HANDED PERFORMANCE SMACKS OF NERO AND IVAN IV.")
|
||||||
|
print ( "THE PEOPLE (REMIANING) FIND YOU AN UNPLEASANT RULER, AND,")
|
||||||
|
print ( "FRANKLY, HATE YOUR GUTS!!")
|
||||||
|
elif (P1>3 or L<10):
|
||||||
|
print ( "YOUR PERFORMANCE COULD HAVE BEEN SOMEWHAT BETTER, BUT")
|
||||||
|
print ( "REALLY WASN'T TOO BAD AT ALL. ",int(P*.8*random()),"PEOPLE")
|
||||||
|
print ( "WOULD DEARLY LIKE TO SEE YOU ASSASSINATED BUT WE ALL HAVE OUR")
|
||||||
|
print ( "TRIVIAL PROBLEMS.")
|
||||||
|
else:
|
||||||
|
print ( "A FANTASTIC PERFORMANCE!!! CHARLEMANGE, DISRAELI, AND")
|
||||||
|
print ( "JEFFERSON COMBINED COULD NOT HAVE DONE BETTER!\n")
|
||||||
|
for N in range(1,10):
|
||||||
|
print ( '\a')
|
||||||
|
print("\nSO LONG FOR NOW.\n")
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
Reference in New Issue
Block a user