package Ġground War . exec ut ables Ċ Ċ import Ġagents . M CT S .* Ċ import Ġagents . R HE A .* Ċ import Ġagents . UI . GUI Agent Ċ import Ġagents . UI . Next Move Container Ċ import Ġagents . UI . Queue Next Move Ċ import Ġg gi . Simple Action Player Interface Ċ import Ġground War .* Ċ import Ġground War . views .* Ċ import Ġmath . Vec 2 d Ċ import Ġorg . junit . jupiter . api . Order Ċ import Ġutilities .* Ċ import Ġjava . awt .* Ċ import Ġjava . awt . event . ActionListener Ċ import Ġjava . awt . event . MouseEvent Ċ import Ġjava . awt . event . Mouse Listener Ċ import Ġjava . io .* Ċ import Ġjavax . swing .* Ċ import Ġkotlin . math .* Ċ import Ġkotlin . streams . toList Ċ Ċ var Ġpaused : ĠBoolean Ġ= Ġfalse Ċ Ċ fun Ġmain ( args : ĠArray < String >) Ġ{ ĊĠĠĠ Ġval Ġparams Ġ= ĠEvent Game Params ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfog Of War Ġ= Ġfalse , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfog Strength Ass umption Ġ= Ġdouble ArrayOf ( 5 . 0 , Ġ 5 . 0 ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġn Attempts Ġ= Ġ 1 5 , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcity Se paration Ġ= Ġ 5 0 , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmin Connections Ġ= Ġ 3 , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġspeed Ġ= Ġdouble ArrayOf ( 5 . 0 , Ġ 5 . 0 ), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠO OD AL oop Ġ= Ġint ArrayOf ( 2 5 , Ġ 2 5 ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġorder Delay Ġ= Ġint ArrayOf ( 0 , Ġ 0 ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmin Ass ault Factor Ġ= Ġdouble ArrayOf ( 2 . 0 , Ġ 2 . 0 ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlan che ster Coeff Ġ= Ġdouble ArrayOf ( 0 . 0 5 , Ġ 0 . 0 5 ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlan che ster Exp Ġ= Ġdouble ArrayOf ( 0 . 5 , Ġ 0 . 5 ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfat ig ue Rate Ġ= Ġdouble ArrayOf ( 0 . 0 , Ġ 0 . 0 ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpercent Fort Ġ= Ġ 0 . 2 5 , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfort Attack er Div isor Ġ= Ġ 2 . 0 , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfort Def ender Exp Bonus Ġ= Ġ 0 . 1 ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġval Ġblue Params Ġ= Ġif Ġ( args . size Ġ> Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġfile As Lines Ġ= ĠBufferedReader ( FileReader ( args [ 0 ])). lines (). toList () ĊĠĠĠĠĠĠĠ Ġcreate Agent Params FromString ( file As Lines ) ĊĠĠĠ Ġ} Ġelse ĠAgent Params () ĊĠĠĠ Ġval Ġred Params Ġ= Ġif Ġ( args . size Ġ> Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġfile As Lines Ġ= ĠBufferedReader ( FileReader ( args [ 1 ])). lines (). toList () ĊĠĠĠĠĠĠĠ Ġcreate Agent Params FromString ( file As Lines ) ĊĠĠĠ Ġ} Ġelse ĠAgent Params () ĊĠĠĠ Ġval Ġblue Score Params Ġ= Ġargs . first OrNull Ġ{ Ġit . startsWith (" SC B | ") Ġ} ĊĠĠĠ Ġval Ġblue Score Function Ġ= Ġstring To Score Function ( blue Score Params ) ĊĠĠĠ Ġval Ġred Score Params Ġ= Ġargs . first OrNull Ġ{ Ġit . startsWith (" SCR | ") Ġ} ĊĠĠĠ Ġval Ġred Score Function Ġ= Ġstring To Score Function ( red Score Params ) ĊĊĠĠĠ Ġval Ġblue Agent Ġ= Ġblue Params . create Agent (" BLUE ") ĊĠĠĠ Ġval Ġred Agent Ġ= Ġred Params . create Agent (" RED ") ĊĠĠĠ Ġrun With Params ( params , Ġblue Agent , Ġred Agent , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġblue Score Function Ġ= Ġblue Score Function , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġred Score Function Ġ= Ġred Score Function , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmap File Ġ= Ġif Ġ( args . size Ġ> Ġ 2 ) Ġargs [ 2 ] Ġelse Ġ"") Ċ } Ċ Ċ fun Ġrun With Params ( params : ĠEvent Game Params , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġblue Agent : ĠSimple Action Player Interface , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġred Agent : ĠSimple Action Player Interface , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġblue Score Function : Ġ( Land Combat Game , ĠInt ) Ġ-> ĠDouble Ġ= Ġfinal Score Function , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġred Score Function : Ġ( Land Combat Game , ĠInt ) Ġ-> ĠDouble Ġ= Ġfinal Score Function , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġblue V ictory Function : Ġ(( Land Combat Game ) Ġ-> ĠBoolean )? Ġ= Ġnull , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshow Agent Plans : ĠBoolean Ġ= Ġfalse , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmap File : ĠString Ġ= Ġ"") Ġ{ ĊĠĠĠ Ġval Ġfile As Lines Ġ= Ġif Ġ( map File Ġ!= Ġ"") ĠBufferedReader ( FileReader ( map File )). read Lines (). join ToString ("\ n ") Ġelse Ġ"" ĊĠĠĠ Ġval Ġworld Ġ= Ġif Ġ( file As Lines Ġ== Ġ"") ĠWorld ( params Ġ= Ġparams ) Ġelse Ġcreate World ( file As Lines , Ġparams ) ĊĊĠĠĠ Ġif Ġ( map File Ġ!= Ġ"" Ġ&& Ġ! file As Lines . startsWith ("{ ")) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġoutput Ġ= ĠFile Writer ( map File . substring Before ('.') Ġ+ Ġ". json ") ĊĠĠĠĠĠĠĠ Ġoutput . write ( world . toJSON (). toString ( 1 )) ĊĠĠĠĠĠĠĠ Ġoutput . close () ĊĠĠĠ Ġ} ĊĠĠĠ Ġval Ġgame Ġ= ĠLand Combat Game ( world ) ĊĊĠĠĠ Ġgame . score Function [ Player Id . Blue ] Ġ= Ġblue Score Function ĊĠĠĠ Ġgame . score Function [ Player Id . Red ] Ġ= Ġred Score Function ĊĠĠĠ Ġif Ġ( blue V ictory Function Ġ!= Ġnull ) ĊĠĠĠĠĠĠĠ Ġgame . v ictory Function [ Player Id . Blue ] Ġ= Ġblue V ictory Function ĊĊĠĠĠ ĠStats Coll ator . clear () ĊĊĠĠĠ Ġgame . register Agent ( 0 , Ġblue Agent ) ĊĠĠĠ Ġgame . register Agent ( 1 , Ġred Agent ) ĊĊĠĠĠ Ġclass ĠList Component Ġ: ĠJ Component () Ġ{ ĊĠĠĠĠĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbackground Ġ= ĠColor . get H SB Color ( 0 . 7 f , Ġ 1 . 0 f , Ġ 1 . 0 f ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlayout Ġ= ĠFlow Layout ( Flow Layout . CENTER , Ġ 5 , Ġ 5 ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġval Ġmap Dimension Ġ= Ġif Ġ( world . image File Ġ!= Ġnull Ġ&& Ġworld . image File Ġ!= Ġ"") ĊĠĠĠĠĠĠĠ ĠDimension ( min ( max ( world . params . width , Ġ 5 0 0 ), Ġ 1 0 0 0 ), Ġmin ( max ( world . params . height , Ġ 4 0 0 ), Ġ 1 0 0 0 )) ĊĠĠĠ Ġelse ĊĠĠĠĠĠĠĠ ĠDimension ( 5 0 0 , Ġ 4 0 0 ) ĊĊĠĠĠ Ġval Ġmulti View Ġ= ĠList Component () ĊĠĠĠ Ġval Ġom ni View Ġ= ĠWorld View ( game , Ġmap Dimension ) ĊĠĠĠ Ġval Ġred View Ġ= ĠWorld View ( game , Ġmap Dimension ) ĊĠĠĠ Ġval Ġblue View Ġ= ĠWorld View ( game , Ġmap Dimension ) ĊĠĠĠ Ġval Ġblue Plan Ġ= ĠPlan View ( blue Agent , Ġgame , Ġ 0 ) ĊĠĠĠ Ġval Ġred Plan Ġ= ĠPlan View ( red Agent , Ġgame , Ġ 1 ) ĊĠĠĠ Ġif Ġ( blue Agent Ġis ĠGUI Agent ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġwe Ġhave Ġa Ġhuman Ġplayer , Ġso Ġjust Ġadd Ġtheir Ġview , Ġbut Ġwith ĠGUI Ġbelow Ġit ĊĠĠĠĠĠĠĠ Ġval ĠUI Container Ġ= ĠJ Split Pane () ĊĠĠĠĠĠĠĠ ĠUI Container . orientation Ġ= ĠJ Split Pane . VERTICAL _ SPLIT ĊĠĠĠĠĠĠĠ ĠUI Container . top Component Ġ= Ġif Ġ( params . fog Of War ) Ġblue View Ġelse Ġom ni View ĊĠĠĠĠĠĠĠ Ġval Ġuser Interface Ġ= ĠL CG UI ( blue Agent . move Details Ġas ĠQueue Next Move , Ġworld ) ĊĠĠĠĠĠĠĠ ĠUI Container . bottom Component Ġ= Ġuser Interface ĊĠĠĠĠĠĠĠ Ġmulti View . add ( UI Container ) ĊĠĠĠĠĠĠĠ ĠUI Container . top Component . add Mouse Listener ( Land Combat Game Mouse Listener ( if Ġ( params . fog Of War ) Ġblue View Ġelse Ġom ni View , Ġuser Interface )) ĊĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠ Ġmulti View . add ( om ni View ) ĊĠĠĠĠĠĠĠ Ġif Ġ( params . fog Of War ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmulti View . add ( red View ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmulti View . add ( blue View ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ( show Agent Plans ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmulti View . add ( blue Plan ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmulti View . add ( red Plan ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġval Ġframe Ġ= ĠJ Easy Frame ( multi View , Ġ" Event ĠBased ĠGame ") ĊĠĠĠ Ġframe . default Close Operation Ġ= ĠJ Frame . DIS POSE _ ON _ CLOSE ĊĊĠĠĠ Ġwhile Ġ(! game . is Terminal ()) Ġ{ ĊĠĠĠĠĠĠĠ Ġgame . next ( 1 ) ĊĠĠĠĠĠĠĠ Ġif Ġ( params . fog Of War ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġred View . game Ġ= Ġgame . copy ( 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġblue View . game Ġ= Ġgame . copy ( 0 ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġframe . title Ġ= ĠString . format (" Time : Ġ% d ĠĠĠĠĠĠĠ ĠBlue : Ġ%. 0 f ĠĠĠĠĠĠĠ ĠRed : Ġ%. 0 f ", Ġgame . n Ticks (), Ġgame . score ( 0 ), Ġgame . score ( 1 )) ĊĠĠĠĠĠĠĠ Ġif Ġ( show Agent Plans ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġblue Plan . refresh () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġred Plan . refresh () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġmulti View . rep aint () ĊĠĠĠĠĠĠĠ Ġdo Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠThread . sleep ( 1 0 0 ) ĊĠĠĠĠĠĠĠ Ġ} Ġwhile Ġ( paused ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprintln ( Stats Coll ator . summary String ()) Ċ } Ċ Ċ class ĠInt Verifier ( val Ġinput : ĠJTextField , Ġval Ġrange : ĠInt Range ) Ġ: ĠInput Verifier () Ġ{ ĊĠĠĠ Ġoverride Ġfun Ġverify ( input : ĠJ Component ?): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġvalue Ġ= Ġthis . input . text . toInt () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvalue Ġin Ġrange ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ Ċ } Ċ Ċ class ĠL CG UI ( val Ġmove Queue : ĠQueue Next Move , Ġval Ġworld : ĠWorld ) Ġ: ĠJ Split Pane ( VERTICAL _ SPLIT ) Ġ{ ĊĠĠĠ Ġval Ġfrom Box Ġ= ĠJTextField (" 0 ", Ġ 3 ) ĊĠĠĠ Ġval Ġto Box Ġ= ĠJTextField (" 0 ", Ġ 3 ) ĊĠĠĠ Ġval Ġpercentage Box Ġ= ĠJTextField (" 1 0 0 ", Ġ 3 ) ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġworld . cities . forEach { Ġprintln ("${ it . name } Ġat Ġ${ it . location }") } ĊĊĠĠĠĠĠĠĠ Ġval Ġfirst Line Ġ= ĠJPanel ( Flow Layout ( Flow Layout . LEFT , Ġ 5 , Ġ 5 )) ĊĠĠĠĠĠĠĠ Ġfrom Box . input Verifier Ġ= ĠInt Verifier ( from Box , Ġ 0 .. world . cities . size ) ĊĠĠĠĠĠĠĠ Ġto Box . input Verifier Ġ= ĠInt Verifier ( from Box , Ġ 0 .. world . cities . size ) ĊĠĠĠĠĠĠĠ Ġpercentage Box . input Verifier Ġ= ĠInt Verifier ( from Box , Ġ 0 .. 1 0 0 ) ĊĊĠĠĠĠĠĠĠ Ġval Ġsubmit Button Ġ= ĠJButton (" Submit ") ĊĠĠĠĠĠĠĠ Ġsubmit Button . addActionListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠWe Ġtake Ġthe Ġdata Ġfrom Ġthe Ġfields , Ġand Ġadd Ġit Ġto Ġthe Ġcurrent Ġlist Ġof Ġorders ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmove Queue . action Queue . add ( Triple ( from Box . text . toInt (), Ġto Box . text . toInt (), Ġpercentage Box . text . toInt () Ġ/ Ġ 1 0 0 . 0 )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfrom Box . text Ġ= Ġ" 0 " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġto Box . text Ġ= Ġ" 0 " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpercentage Box . text Ġ= Ġ" 1 0 0 " ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġpause Button Ġ= ĠJButton (" Pause ") ĊĠĠĠĠĠĠĠ Ġpause Button . addActionListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpaused Ġ= Ġ! paused ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpause Button . text Ġ= Ġif Ġ( paused ) Ġ" Re - start " Ġelse Ġ" Pause " ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġfirst Line . add ( JLabel (" From : Ġ")) ĊĠĠĠĠĠĠĠ Ġfirst Line . add ( from Box ) ĊĠĠĠĠĠĠĠ Ġfirst Line . add ( JLabel (" To : Ġ")) ĊĠĠĠĠĠĠĠ Ġfirst Line . add ( to Box ) ĊĠĠĠĠĠĠĠ Ġfirst Line . add ( JLabel ("% age Ġ( 1 - 1 0 0 ): Ġ")) ĊĠĠĠĠĠĠĠ Ġfirst Line . add ( percentage Box ) ĊĠĠĠĠĠĠĠ Ġfirst Line . add ( submit Button ) ĊĠĠĠĠĠĠĠ Ġfirst Line . add ( pause Button ) ĊĠĠĠĠĠĠĠ Ġtop Component Ġ= Ġfirst Line ĊĠĠĠĠĠĠĠ Ġval Ġamount Slider Ġ= ĠJ Slider ( Swing Constants . HORIZONTAL , Ġ 1 , Ġ 1 0 0 , Ġ 1 0 0 ) ĊĠĠĠĠĠĠĠ Ġbottom Component Ġ= Ġamount Slider ĊĠĠĠĠĠĠĠ Ġamount Slider . add ChangeListener Ġ{ Ġpercentage Box . text Ġ= Ġamount Slider . value . toString () Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ class ĠLand Combat Game Mouse Listener ( val Ġworld View : ĠWorld View , Ġval Ġuser Interface : ĠL CG UI ) Ġ: ĠMouse Listener Ġ{ ĊĠĠĠ Ġenum Ġclass ĠOrder State Ġ{ ĊĠĠĠĠĠĠĠ ĠFROM , ĠTO ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġvar Ġcurrent State Ġ= ĠOrder State . FROM ĊĠĠĠ Ġoverride Ġfun Ġmouse Clicked ( e : ĠMouseEvent ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( e Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġx Scale Ġ= Ġworld View . getWidth () Ġ/ Ġuser Interface . world . params . width . toDouble () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġy Scale Ġ= Ġworld View . getHeight () Ġ/ Ġuser Interface . world . params . height . toDouble () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġclick Pos Ġ= ĠVec 2 d ( e . x . toDouble () Ġ/ Ġx Scale , Ġe . y . toDouble () Ġ/ Ġy Scale ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprintln (" Click ĠPosition Ġ$ click Pos ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnearest City Ġ= Ġuser Interface . world . cities . with Index () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ ĠTrip le ( it . index , Ġit . value , Ġit . value . location . distance To ( click Pos )) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. min By Ġ{ Ġit . third Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ? . first Ġ?: Ġ- 1 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( nearest City Ġ== Ġ- 1 ) Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( currentState ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠOrder State . FROM Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent State Ġ= ĠOrder State . TO ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġuser Interface . from Box . text Ġ= Ġnearest City . toString () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠOrder State . TO Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent State Ġ= ĠOrder State . FROM ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġuser Interface . to Box . text Ġ= Ġnearest City . toString () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġmouse Released ( e : ĠMouseEvent ?) Ġ{ ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġmouse Entered ( e : ĠMouseEvent ?) Ġ{ ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġmouse Exit ed ( e : ĠMouseEvent ?) Ġ{ ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġmouse Pressed ( e : ĠMouseEvent ?) Ġ{ ĊĠĠĠ Ġ} Ċ Ċ }