home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
AMOS PD CD
/
amospdcd.iso
/
601-625
/
apd621
/
harvey's_çollection
/
kingdom.amos
/
kingdom.amosSourceCode
< prev
Wrap
AMOS Source Code
|
1986-08-03
|
8KB
|
283 lines
'**************************
'* *
'* Kingdom *
'* ----------- *
'* *
'* Written by *
'* Stephen Hill *
'* Programmed by *
'* Harvey Ball *
'* *
'**************************
Hide On
Dim D(11,2)
Screen Open 4,320,256,16,Lowres
Curs Off : Hide
Set Rainbow 0,0,218,"(8,1,8)","(8,1,8)",""
Cls 0 : Paper 0 : Ink 0 : Pen 2 : Rainbow 0,0,30,218 : Locate ,5 : Centre "<[!!FreeWare!!]>" : Locate ,7 : Centre "<Written In Amos.>"
Locate ,9 : Centre "---------"
Pen 3 : Locate ,10 : Centre "Kingdom"
Pen 2 : Locate ,11 : Centre "--------- "
Locate ,20 : Centre "<Press A Key>" : Wave 0 To 15 : NOISE : Wait Key
Screen Open 0,320,255,4,Lowres
Paper 0 : Curs Off : Cls 0
Screen Display 0,128,70,,
Screen Open 1,330,100,4,Lowres
Paper 0 : Curs Off : Cls 0
Screen Display 1,128,70,,
Screen Open 2,320,100,4,Lowres
Paper 0 : Curs Off : Cls 0
Screen Display 2,128,170,,
Screen Open 3,320,16,4,Lowres
Curs Off : Paper 0 : Cls : Centre "<Kingdom> "
Screen 2
Gosub NEW_GAME
Gosub CHECKIT
Do
Gosub BUYIT
If BUY=0 Then Gosub SELLIT
Gosub PLANT
Gosub FEED
Gosub TURN
Loop
NEW_GAME:
A=0 : Cls 0 : Curs On : Locate 0,0 : Input "What is your name?";NAME$ : Print "Welcome to Fantazia,King ";NAME$ : Wait 100 : Cls : Curs Off
PEOPLE=1000+Rnd(200) : MONEY=PEOPLE*24
SPEOPLE=PEOPLE
GRAIN#=Rnd(1000)+3000 : NGRAIN#=GRAIN# : CROP=0 : SATISFACTION#=1
PLANTED=0 : LOST=0 : FOOD#=0 : DEATH_TOLL=0
YEAR=1 : GAMEOVER=0
SUBSISTANCE=3 : BUY_PRICE=8+Rnd(3) : SELL_PRICE=BUY_PRICE-2
LOST=0 : NEW_PEOPLE#=0 : FOOD_RATION#=0
D(1,1)=PEOPLE : D(1,2)=GRAIN#
Return
BYE: Pop : Stop
TURN:
YIELD#=2+(Rnd(3)/10.0)
CROP=PLANTED*YIELD# : LOST=Rnd(CROP/10+1)+CROP/10
If CROP>10000 Then CROP=CROP-Rnd(5000)
ROTTED=Rnd(NGRAIN#/3+1)
GRAIN#=NGRAIN#+CROP-LOST
FOOD_RATION#=FOOD#/PEOPLE
NEW_PEOPLE#=FOOD#/SUBSISTANCE
RAN#=(100+Rnd(4)-2)/100.0
NEW_PEOPLE#=NEW_PEOPLE#*RAN#
GROWTH#=NEW_PEOPLE#-PEOPLE
PEOPLE=NEW_PEOPLE#
BUY_PRICE=7+Rnd(4) : SELL_PRICE=BUY_PRICE-2
If GROWTH#<0 Then STARVED=Abs(GROWTH#) : INFLUX=0 Else STARVED=0
INFLUX=GROWTH#
STATUS:
Screen 0
Curs Off : Cls 0
Locate 0,1 : Print " In year";YEAR;" of King ";NAME$
SATISFACTION#=FOOD_RATION#/SUBSISTANCE
If INFLUX>0
Locate 0,4 : Print INFLUX; : ARRIVED=ARRIVED+INFLUX
Else
Locate 0,4 : Print " No ";
End If
Locate 7,4 : Print " People entered the city "
Locate 0,5 : Print STARVED; : Locate 7,5 : Print " People starved"
Locate 0,7 : Print CROP; : Locate 7,7 : Print " Bushels were grown"
Locate 0,8 : Print LOST; : Locate 7,8 : Print " Bushels were eaten by Locusts"
Locate 0,9 : Print ROTTED; : Locate 7,9 : Print " Bushels rotted in the warehouse "
Locate 0,11 : Print " Thy treasury hath ";MONEY;
Locate 30,11 : Print "Bushels"
Locate 0,13 : Print " Thy subjects number ";PEOPLE;
Locate 30,13 : Print "Citizens"
Screen To Front 0
Wait 40
Inc YEAR : D(YEAR,1)=PEOPLE : D(YEAR,2)=GRAIN#
NGRAIN#=GRAIN# : PLANTED=0 : FOOD#=0
Locate 0,17 : Clear Key
DEATH_TOLL=DEATH_TOLL+STARVED
If YEAR<=10
If SATISFACTION#>=1
Print " Prosperity reigns in Mundania!" : Print "ALL HAIL TO THE GOOD KING ";NAME$
End If
If SATISFACTION#<1 and SATISFACTION#>0.9
Print " Thy people are hungry!!!"
End If
If SATISFACTION#<0.9 and SATISFACTION#>0.5
Print " Thy people are starving!!!"
End If
If SATISFACTION#<0.5
Print
Print " Thy people are in revolt!!!"
Print " Thy reign of terror ends at year ";YEAR
Print " The bad King ";NAME$;" is DEAD!!"
GAMEOVER=1
End If
Else
Print
If PEOPLE>SPEOPLE and DEATH_TOLL<500
Print " After ten happy years"
Print " Your term of office has expired."
End If
If DEATH_TOLL<400
Print " Not bad! You only lost ";DEATH_TOLL;" people!"
End If
If DEATH_TOLL>400 and DEATH_TOLL<1000
Print " Your term of office has expired"
Print " Unfortunately, so have most of the people!"
End If
If DEATH_TOLL>1000
Print " Your term of office has finally been terminated"
Print " Survivors are dancing in the streets!"
End If
Print " During your rule ";DEATH_TOLL;" people starved"
Print " And";ARRIVED;" new people settled in the city "
GAMEOVER=1
End If
Locate 0,25 : Centre "Press a key to continue" : Wait Key : Cline
If GAMEOVER Then Gosub GAME_OVER
Gosub CHECKIT
Screen To Back 0
Screen 2
Return
BUYIT:
PRICE=BUY_PRICE
If PRICE<2 Then PRICE=2
Cls : Locate 0,0 : Centre "Buy Grain"
OK=0
Repeat
Locate 0,2 : Print "Grain costs ";PRICE;
Locate 18,2 : Print " per bushel"
Locate 0,3 : Print "You have ";MONEY;
Locate 18,3 : Print " pieces of gold"
Locate 0,6 : Cline : Input "How many bushels wilt thou buy?";BUY
If BUY=0
OK=1
End If
If BUY*PRICE>MONEY
Print "You don't have enough money"
Wait 40 : Locate 0,7 : Cline
Else
MONEY=MONEY-BUY*PRICE : GRAIN#=NGRAIN#+BUY : NGRAIN#=GRAIN#
OK=1
End If
Until OK
Cls
Gosub CHECKIT
Return
SELLIT: PRICE=SELL_PRICE
Cls : Locate 0,0 : Centre "Sell Grain"
Locate 0,2 : Print "Grain cost ";PRICE;
Locate 18,2 : Print " per bushel"
Locate 0,3 : Print "You have ";NGRAIN#;
Locate 18,3 : Print " bushels in the store"
OK=0
Repeat
Cline
Locate 0,6 : Input "How many bushels wilt thou sell?";SELL
If SELL=0 Then OK=1
If SELL>NGRAIN#
Locate 0,7 : Print "You don't have enough grain"
Wait 40 : Locate 0,7 : Cline
End If
MONEY=MONEY+SELL*PRICE : GRAIN#=NGRAIN#-SELL
NGRAIN#=GRAIN# : OK=1
Until OK
Cls
Gosub CHECKIT
Return
CHECKIT:
Screen 1
Cls
Locate 0,0 : Print " Year";YEAR;" of King ";NAME$
Locate 0,2 : Print " Thy treasury containeth ";MONEY;
Locate 32,2 : Print " Gold"
Locate 0,3 : Print " Thy warehouse holds ";NGRAIN#
Locate 32,3 : Print " Bushels"
Locate 0,4 : Print " Thy subjects number ";PEOPLE;
Locate 32,4 : Print " People"
Locate 0,6 : Print " Thou hast planted ";PLANTED;
Locate 32,6 : Print " Bushels"
Locate 0,7 : Print " Thy people have ";FOOD#;
Locate 32,7 : Print " Bushels"
Screen 2
Return
PLANT:
Cls : Locate 0,0 : Centre "Plant crops"
Locate 0,3 : Print "Thou hast ";NGRAIN#;" bushels in the store"
OK=0
Repeat
Locate 0,5 : Cline : Input "How many bushels wilt thou plant?";PLANTED
If PLANTED=0 Then Input "Are you sure?";AN$
If(AN$="y") or(AN$="Y")
OK=0
End If
If PLANTED>NGRAIN#
Print "You don't have enough grain" : Wait 40 : Cup : Cline
PLANTED=0
Else
NGRAIN#=NGRAIN#-PLANTED : OK=1
End If
Until OK
Cls
Gosub CHECKIT
Return
FEED:
Cls : Locate 0,0 : Centre "Ration Food"
Locate 0,3 : Print "Thou hast ";NGRAIN#;" bushels in the store"
OK=0
Repeat
Locate 0,5 : Cline : Input "What wilt thou feed to thy people?";FOOD#
If FOOD#=0 Then Input "Are you sure?";AN$
If(AN$="Y") or(AN$="y")
OK=1
End If
If FOOD#>NGRAIN#
Print "There isn't enough grain" : FOOD#=0 : Wait 40 : Cup : Cline
Else
NGRAIN#=NGRAIN#-FOOD# : OK=1
End If
Until OK
Cls
Gosub CHECKIT
Return
GAME_OVER:
Screen Open 3,640,100,4,Hires : Curs Off : Cls 0
NO_POINT=11 : MX_POINTS=11 : X=40 : Y=20 : W=25 : H=50
MX_HEIGHT#=1200 : S=1 : MT$="Population" : BT$="Years " : ST$="People"
P=3 : HSC=1 : VSC=0 : Ink 2,0,2
T=1 : T$=MT$ : Gosub GRAPH4 : Ink 2,0,2 : Gosub SCALE2
Screen 0 : Locate 0,25 : Print "Another Game?" : Input ANO$
If(ANO$="n") or(ANO$="N")
Stop
Else
Screen Close 3
Cls : Screen 1 : Cls : Screen 2
Cls : Screen To Back 0 : Gosub NEW_GAME : Return
End If
SCALE2:
XA=X : YA=Y : V=MX_HEIGHT# : Gosub CNUM : YA=Y+H : V=VSC : Gosub CNUM
YA=Y+H+20+Text Base : T$=BT$ : Gosub GCENTRE : T$=ST$ : Gosub VCENTRE
For A=0 To MX_POINTS-1
A$=Str$(A+HSC)-" " : Text X+A*W,Y+H+10,A$
Next A
Return
CNUM: V$=Str$(V)-" " : LM=Text Length(V$) : Text XA-LM,YA+Text Base,V$ : Return
GCENTRE:
CX=W*MX_POINTS-Text Length(T$) : LX=XA+CX/2 : LY=YA-Text Base
Text LX,LY,T$ : Return
VCENTRE:
CH=8 : VH=H-Len(T$)*CH : SY=Y+Text Base+VH/2
For C=1 To Len(T$) : C$=Mid$(T$,C,1) : Text SX,SY+(C-1)*CH,C$ : Next C
Return
GRAPH4:
SX=X+W*(MX_POINTS-1) : Box X,Y To SX+1,Y+H+3
XA=X : YA=Y : SX=SX+16 : Gosub GCENTRE : SF#=H/(MX_HEIGHT#-1)
PY=D(S,T)*SF# : Plot X,Y+H-PY : Draw X-2,Y+H-PY To X+2,Y+H-PY
If NO_POINTS=S Then Return
For B=S+1 To NO_POINTS
PY=D(B,T)*SF# : Draw To X+(B-S)*W+1,Y+H-PY
Next B
Set Paint 0 : Return
Procedure NOISE
For L=79 To 0 Step -1
Play 96-(20+(L/2)),0
Wait 1
Next L
End Proc