package Ġru . h se . spb . sd . full _ metal _ rog ue . logic . be haviour Ċ Ċ import Ġru . h se . spb . sd . full _ metal _ rog ue . logic . map .* Ċ import Ġjava . io . Serializable Ċ Ċ /** Ċ Ġ* ĠInterface Ġfor Ġdifferent Ġbe havi ours Ġof Ġactors . Ċ Ġ*/ Ċ interface ĠBe haviour Ġ: ĠSerializable Ġ{ ĊĠĠĠ Ġfun Ġmake Move ( current Position : ĠPosition , Ġmap : ĠGame Map ): ĠPosition ĊĠĠĠ Ġfun Ġsimplify (): ĠBe haviour Ġ= Ġthis Ċ } Ċ Ċ /** Ċ Ġ* ĠA Ġstrategy Ġfor Ġan Ġactor Ġwhich Ġmakes Ġhim Ġstay Ġin Ġthe Ġsame Ġplace . Ċ Ġ*/ Ċ object ĠPass ive Behaviour Ġ: ĠBe haviour Ġ{ ĊĠĠĠ Ġoverride Ġfun Ġmake Move ( current Position : ĠPosition , Ġmap : ĠGame Map ): ĠPosition Ġ= Ġcurrent Position Ċ } Ċ Ċ /** Ċ Ġ* ĠA Ġstrategy Ġfor Ġan Ġactor Ġwhich Ġmakes Ġhim Ġdo Ġgo Ġto Ġa Ġplayer Ġposition . Ċ Ġ*/ Ċ object ĠAg gressive Behaviour Ġ: ĠBe haviour Ġ{ ĊĠĠĠ Ġoverride Ġfun Ġmake Move ( current Position : ĠPosition , Ġmap : ĠGame Map ): ĠPosition Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġdistances Ġ= Ġmap . calculate Dist ances From ( map . player Positions ()) ĊĠĠĠĠĠĠĠ Ġval Ġag gressive Move Ġ= Ġpossible Moves ( current Position , Ġmap ). min With ( compare By ({ distances [ it . x ][ it . y ]} )) ĊĊĠĠĠĠĠĠĠ Ġreturn Ġag gressive Move !! ĊĠĠĠ Ġ} Ċ } Ċ Ċ /** Ċ Ġ* ĠA Ġstrategy Ġfor Ġan Ġactor Ġwhich Ġmakes Ġhim Ġdo Ġrun Ġfrom Ġa Ġplayer Ġposition . Ċ Ġ*/ Ċ object ĠC ow ard Behaviour Ġ: ĠBe haviour Ġ{ ĊĠĠĠ Ġoverride Ġfun Ġmake Move ( current Position : ĠPosition , Ġmap : ĠGame Map ): ĠPosition Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġdistances Ġ= Ġmap . calculate Dist ances From ( map . player Positions ()) ĊĠĠĠĠĠĠĠ Ġval Ġc ow ard Move Ġ= Ġpossible Moves ( current Position , Ġmap ). max With ( compare By ({ distances [ it . x ][ it . y ]} )) ĊĊĠĠĠĠĠĠĠ Ġreturn Ġc ow ard Move !! ĊĠĠĠ Ġ} Ċ } Ċ Ċ /** Ċ Ġ* ĠReturns ĠList Ġof Ġpossible Ġmoves Ġfrom Ġa Ġposition Ġin Ġa Ġmap . Ċ Ġ*/ Ċ fun Ġpossible Moves ( position : ĠPosition , Ġmap : ĠGame Map ): ĠList < Position > Ġ{ ĊĠĠĠ Ġval Ġpossible Moves Ġ= Ġmutable ListOf ( position ) ĊĊĠĠĠ Ġfor Ġ( direction Ġin ĠDirection . values ()) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġnext Position Ġ= Ġapply ( position , Ġdirection ) ĊĊĠĠĠĠĠĠĠ Ġif Ġ( map . can Pass Through ( next Position )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpossible Moves . add ( next Position ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġreturn Ġpossible Moves Ċ }