package Ġcom . le f ty ist . king dom sim . ai Ċ Ċ import Ġcom . le f ty ist . king dom sim . structures . King dom Ċ import Ġcom . le f ty ist . king dom sim . structures . World Manager Ċ import Ġcom . le f ty ist . king dom sim . utils . find Child Ċ import Ġcom . le f ty ist . king dom sim . utils . open File Ċ import Ġjava . util .* Ċ Ċ fun Ġcalc Turn Net Income ( king dom : ĠKing dom , Ġturns A head : ĠInt ): ĠInt Ġ{ ĊĠĠĠĠĠ Ġval Ġeconom y Ġ= Ġking dom . get King dom Stat (" econom y ") ĊĠĠĠĠĠ Ġval Ġconsumption Ġ= Ġking dom . get King dom Stat (" cons umption ") ĊĊĠĠĠĠĠ Ġvar Ġqueue Cost Ġ= Ġ 0 ĊĊĠĠĠĠĠ Ġval Ġbuild Queue Ġ= Ġking dom . king dom Doc . getElementsByTagName (" Building Queue "). item ( 0 ) ĊĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 0 .. build Queue . childNodes . length Ġ- Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnode Ġ= Ġbuild Queue . childNodes . item ( i ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( node Ġ== Ġnull Ġ|| Ġnode . nodeName Ġ== Ġnull Ġ|| Ġnode . nodeName Ġ== Ġ"# text ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontinue ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcost Ġ= Ġnode . attributes . getName d Item (" cost "). node Value . toInt () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġturns Ġ= Ġnode . attributes . getName d Item (" turn s "). node Value . toInt () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif ( turn s Ġ- Ġturns A head Ġ> Ġ 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġqueue Cost Ġ+= Ġcost ĊĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠ Ġreturn Ġ( econom y Ġ+ Ġ 1 0 ) Ġ/ Ġ 3 Ġ- Ġconsumption Ġ- Ġqueue Cost Ċ } Ċ Ċ fun Ġdetermine What To Build ( king dom : ĠKing dom ) Ġ{ ĊĠĠĠĠĠ Ġval Ġstability Ġ= Ġking dom . get King dom Stat (" st ability ") ĊĠĠĠĠĠ Ġval Ġcontrol dc Ġ= Ġking dom . get King dom Stat (" control dc ") ĊĊĠĠĠĠĠ Ġ// low Ġstability , Ġvery Ġd ange or us ĊĠĠĠĠĠ Ġif ( control dc Ġ- Ġstability Ġ> Ġ 1 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// determine Ġbest Ġvalue Ġstability Ġbuilding ĊĊĠĠĠĠĠ Ġ} Ċ } Ċ Ċ private Ġfun Ġbuilding Type ( type : ĠString ): ĠInt Ġ{ ĊĠĠĠĠĠ Ġwhen ( type ){ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" v illage " Ġ-> Ġreturn Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" town " Ġ-> Ġreturn Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" city " Ġ-> Ġreturn Ġ 2 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġreturn Ġ 0 ĊĠĠĠĠĠ Ġ} Ċ } Ċ Ċ class ĠBuilding Pair ( val Ġname : ĠString , Ġval Ġrank : ĠDouble ) Ġ: ĠComparable < Building Pair > Ġ{ ĊĠĠĠĠĠ Ġoverride Ġfun Ġcompare To ( other : ĠBuilding Pair ): ĠInt Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif ( this . rank Ġ< Ġother . rank ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġ- 1 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġif ( this . rank Ġ== Ġother . rank ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġ 1 ĊĠĠĠĠĠ Ġ} Ċ } Ċ Ċ fun Ġfind Best Building ( stat To Look For : ĠString , Ġset tlement Type : ĠString ): ĠPriority Queue < Building Pair > Ġ{ ĊĠĠĠĠĠ Ġval Ġbuild ings Doc Ġ= Ġopen File (" data / build ings . xml ") ĊĊĠĠĠĠĠ Ġval Ġbuild ings Ġ= Ġbuild ings Doc . firstChild . childNodes ĊĠĠĠĠĠ Ġval Ġmax PQ Ġ= ĠPriority Queue < Building Pair >( 1 0 , ĠCollections . reverse Order ()) ĊĠĠĠĠĠ Ġfor ( i Ġin Ġ 0 .. build ings . length ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbuilding Ġ= Ġbuild ings . item ( i ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif ( building Ġ== Ġnull Ġ|| Ġbuilding . nodeName Ġ== Ġnull Ġ|| Ġbuilding . nodeName Ġ== Ġ"# text ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontinue ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtarget Stat Ġ= Ġbuilding . find Child ( stat To Look For ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif ( target Stat Ġ== Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontinue ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtype Ġ= Ġbuilding . find Child (" type ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif ( type Ġ== Ġnull Ġ|| Ġbuilding Type ( type . textContent ) Ġ> Ġbuilding Type ( set tlement Type )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontinue ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcost Ġ= Ġbuilding . attributes . getName d Item (" cost "). node Value . toInt () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġturns Ġ= Ġbuilding . attributes . getName d Item (" turn s "). node Value . toInt () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġranking : ĠDouble Ġ= Ġtarget Stat . textContent . toDouble () Ġ/ Ġ( cost * turn s ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmax PQ . add ( Building Pair ( building . nodeName , Ġranking )) ĊĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠ Ġreturn Ġmax PQ Ċ }