package Ġpl uto . chess . figure Ċ Ċ import Ġpl uto . chess . board .* Ċ import Ġpl uto . chess . move . Conversion Ċ import Ġpl uto . chess . move . Default Move Ċ import Ġpl uto . chess . move . Move Ċ import Ġpl uto . chess . move . Move With Board Ċ Ċ internal Ġabstract Ġclass ĠRange Figure ( color : ĠFigure Color , Ġfield : ĠField , Ġprivate Ġval Ġmove Lists : ĠArray < Array < Move >>) Ġ: ĊĠĠĠ ĠFigure ( color , Ġfield ) Ġ{ ĊĊĠĠĠ Ġoverride Ġfun Ġfind Move ( board : ĠBoard , Ġtarget Field : ĠField , Ġconversion : ĠConversion ?): ĠMove With Board ? Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( conversion Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġfor Ġ( move List Ġin Ġmove Lists ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( move Ġin Ġmove List ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( move . isNot Blocked ( board )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( move . target Field Ġ== Ġtarget Field ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnew Board Ġ= Ġboard . moved ( move ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! new Board . is King Attack ed ( color )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠMove With Board ( move , Ġnew Board ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( move . is Capt uring ( board )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbreak ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbreak ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġget Moves ( board : ĠBoard , Ġconsumer : ĠMove Consumer ): ĠMove Consumer Result Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġret Ġ= ĠMove Consumer Result . CONTINUE _ ALL ĊĠĠĠĠĠĠĠ Ġfor Ġ( move List Ġin Ġmove Lists ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( move Ġin Ġmove List ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( move . isNot Blocked ( board )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġvalue Changing Ġ= Ġmove . is Value Changing ( board ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( ret Ġ== ĠMove Consumer Result . CONTINUE _ ALL Ġ|| Ġvalue Changing ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnew Board Ġ= Ġboard . moved ( move ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! new Board . is King Attack ed ( color )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġret Ġ= Ġret Ġcombine Ġconsumer . move ( move , Ġnew Board ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( ret Ġ== ĠMove Consumer Result . CANCEL ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġret ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( value Changing ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbreak ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbreak ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġret ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠgetValue Changing Moves ( board : ĠBoard , Ġconsumer : ĠMove Consumer ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġfor Ġ( direction al Moves Ġin Ġmove Lists ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( move Ġin Ġdirection al Moves ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( move . isNot Blocked ( board )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( move . is Value Changing ( board )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnew Board Ġ= Ġboard . moved ( move ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! new Board . is King Attack ed ( color )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( consumer . move ( move , Ġnew Board ) Ġ== ĠMove Consumer Result . CANCEL ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbreak ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbreak ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĊĠĠĠĠĠĠĠ Ġ@ Jvm Static ĊĠĠĠĠĠĠĠ Ġprotected Ġfun Ġcreate Range Moves ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcolor : ĠFigure Color , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtype : ĠFigure Type , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstart Field : ĠField , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġr ays : ĠArray < Ray > ĊĠĠĠĠĠĠĠ Ġ): ĠArray < Array < Move >> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġr ays . map Ġ{ Ġray Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġret : ĠArray < Move > Ġ= ĠMask s . ray ( start Field , Ġray ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. stream Fields () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġtarget Field Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠDefault Move ( color , Ġtype , Ġstart Field , Ġtarget Field ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}. sorted ( Comparator . comp aring Int Ġ{ Ġit . get Man h att an Distance () Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. toArray Ġ{ Ġsz Ġ-> ĠarrayOf Null s < Move >( sz ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġret ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}. to Typed Array () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }