package Ġxyz . hot ch pot ch . re ver si . framework Ċ Ċ import Ġxyz . hot ch pot ch . re ver si . Color Ċ import Ġxyz . hot ch pot ch . re ver si . count Ċ import Ġkotlin . reflect . K Class Ċ Ċ /** Ċ Ġ* Ġ 2 ãĥĹ ãĥ¬ ãĥ¼ãĥ ¤ ãĥ¼ ãģ§ è¤ĩ æķ° åĽŀ å¯¾ æĪ ¦ ãĤĴè¡Į ãģĨ ãĢĮ ãĥŀ ãĥĥ ãĥģ ãĢį ãģ§ãģĻ ãĢĤ Ċ Ġ* Ċ Ġ* Ġ@ param Ġplayer A Ġ ãĥĹ ãĥ¬ ãĥ¼ãĥ ¤ ãĥ¼ A ãģ® ãĤ¯ãĥ©ãĤ¹ Ċ Ġ* Ġ@ param Ġplayer B Ġ ãĥĹ ãĥ¬ ãĥ¼ãĥ ¤ ãĥ¼ B ãģ® ãĤ¯ãĥ©ãĤ¹ Ċ Ġ* Ġ@ param Ġmillis In Game ĠãĤ ² ãĥ¼ãĥł åĨħ ãģ® åĲĦ ãĥĹ ãĥ¬ ãĥ¼ãĥ ¤ ãĥ¼ãģ® æĮģ ãģ¡ æĻĤéĸĵ ï¼Ī ãĥŁ ãĥª ç§Ĵ ï¼ī Ċ Ġ* Ġ@ param Ġmillis At Turn Ġä¸Ģ æīĭ å½ĵ ãģŁ ãĤĬ ãģ® åĪ¶ éĻĲ æĻĤéĸĵ ï¼Ī ãĥŁ ãĥª ç§Ĵ ï¼ī Ċ Ġ* Ġ@ param Ġtimes Ġ å¯¾ æĪ ¦ åĽŀ æķ° Ċ Ġ* Ġ@ param Ġautomatic Ġä¸Ģ ãĤ ² ãĥ¼ãĥł ãģĶ ãģ¨ ãģ«å¯¾ è© ± çļĦãģ« æīĭ ãĤĴ éĢ² ãĤģ ãĤĭ ãĢĮ å¯¾ è© ± ãĥ¢ ãĥ¼ãĥī ãĢį ãģ§ãģ¯ ãģªãģı Ċ Ġ* ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ èĩªåĭķ ãģ§ ãĥŀ ãĥĥ ãĥģ çµĤ äºĨ ãģ¾ãģ§ éĢ² ãĤģ ãĤĭ ãĢĮ èĩªåĭķ ãĥ¢ ãĥ¼ãĥī ãĢį ãģ® åł´åĲĪãģ¯ Ġtrue Ċ Ġ* Ġ@ param Ġsilent Ġæ¨ Ļ æºĸ åĩºåĬĽ ãģ¸ãģ® åĩºåĬĽ ãģª ãģĹãģ § éĢ² è¡Į ãģķ ãģĽ ãĤĭ åł´åĲĪãģ¯ Ġtrue ãĢĤ Ċ Ġ* ĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġä¸Ģ ãĤ ² ãĥ¼ãĥł ãģĶ ãģ¨ ãģ® çµĲæŀľ ãĤĴ ãĤ¤ãĥ³ ãĤ¿ ãĥ© ãĤ¯ ãĥĨãĤ£ ãĥĸ ãģ« åĩºåĬĽ ãģĹãģª ãģĮ ãĤī éĢ² è¡Į ãģĻãĤĭ åł´åĲĪãģ¯ Ġfalse Ċ Ġ*/ Ċ class ĠMatch ( ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġplayer A : ĠK Class < out ĠPlayer >, ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġplayer B : ĠK Class < out ĠPlayer >, ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġmillis In Game : ĠLong , ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġmillis At Turn : ĠLong , ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġtimes : ĠInt , ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġautomatic : ĠBoolean Ġ= Ġfalse , ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġsilent : ĠBoolean Ġ= Ġfalse Ċ ) Ġ: ĠPlay able Ġ{ ĊĊĠĠĠ Ġcompanion Ġobject Ġ: ĠPlay able Factory < Match > Ġ{ ĊĊĠĠĠĠĠĠĠ Ġoverride Ġval Ġdescription : ĠString Ġ= Ġ" 2 ãĥĹ ãĥ¬ ãĥ¼ãĥ ¤ ãĥ¼ ãģ§ é» Ĵ çĻ½ ãĤĴ åħ¥ ãĤĮ æĽ¿ ãģĪ ãģª ãģĮ ãĤī è¤ĩ æķ° åĽŀ å¯¾ æĪ ¦ ãģĹãģ¾ãģĻ ãĢĤ " ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġarrange Via Console (): ĠMatch Ġ= ĠMatch ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSc anners . getPlayer (" ãĥĹ ãĥ¬ ãĥ¼ãĥ ¤ ãĥ¼ A ", Ġfalse ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSc anners . getPlayer (" ãĥĹ ãĥ¬ ãĥ¼ãĥ ¤ ãĥ¼ B ", Ġfalse ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSc anners . millis In Game . get (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSc anners . millis At Turn . get (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSc anners . times . get (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSc anners . automatic . get () ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** Ġ ãĥĹ ãĥ¬ ãĥ¼ãĥ ¤ ãĥ¼ A ãģ® æĪĲ ç¸ ¾ Ġ*/ ĊĠĠĠ Ġprivate Ġval Ġrecord A Ġ= ĠRecord () ĊĊĠĠĠ Ġ/** Ġ ãĥĹ ãĥ¬ ãĥ¼ãĥ ¤ ãĥ¼ A ãģ® èī² ï¼Ī ä¸Ģ ãĤ ² ãĥ¼ãĥł ãģĶ ãģ¨ ãģ« åĪĩ ãĤĬ æĽ¿ ãģĪãĤĭ ãĢĤ ï¼ī Ġ*/ ĊĠĠĠ Ġprivate Ġvar Ġcolor A : ĠColor Ġ= ĠColor . BLACK ĊĊĠĠĠ Ġoverride Ġfun Ġplay (): ĠMatch Result Ġ{ ĊĠĠĠĠĠĠĠ Ġcheck ( record A . total Play s Ġ== Ġ 0 ) ĊĠĠĠĠĠĠĠ Ġ{ Ġ" Match ãĤ¯ãĥ©ãĤ¹ ãģ¯ ãģĦ ãĤı ãĤ Ĩ ãĤĭ ãĥ¯ ãĥ³ ãĤ· ãĥ§ ãĥĥãĥĪ ãģ§ãģĻ ãĢĤ å¯¾ æĪ ¦ ãģĶ ãģ¨ ãģ« æĸ° ãģŁ ãģª ãĤ¤ãĥ³ ãĤ¹ãĤ¿ ãĥ³ãĤ¹ ãĤĴ åĪ©çĶ¨ ãģĹãģ¦ãģıãģłãģķãģĦ ãĢĤ " Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ(! silent ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprint ("\ n å¯¾ æĪ ¦ ãĤĴ éĸĭå§ĭ ãģĹãģ¾ãģĻ ãĢĤ \ n ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprint ("\ t ãĥĹ ãĥ¬ ãĥ¼ãĥ ¤ ãĥ¼ A Ġ: Ġ${ player A . qualified Name }\ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"\ t ãĥĹ ãĥ¬ ãĥ¼ãĥ ¤ ãĥ¼ B Ġ: Ġ${ player B . qualified Name }\ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"\ t ãĤ ² ãĥ¼ãĥł åĨħ ãģ® ç· ı æĮģ ãģ¡ æĻĤéĸĵ ï¼Ī ãĥŁ ãĥª ç§Ĵ ï¼ī Ġ: Ġ$ millis In Game \ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"\ t ä¸Ģ æīĭ å½ĵ ãģŁ ãĤĬ ãģ® åĪ¶ éĻĲ æĻĤéĸĵ ï¼Ī ãĥŁ ãĥª ç§Ĵ ï¼ī Ġ: Ġ$ millis At Turn \ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"\ t å¯¾ æĪ ¦ åĽŀ æķ° Ġ: Ġ$ times \ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"> Ġ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( automatic ) Ġprintln () Ġelse Ġread Line () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfor Ġ( n Ġin Ġ 1 .. times ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! silent ) Ġprintln ("\ n ${ n } åĽŀ æĪ ¦ çĽ® ï¼Ī A =${ color A }, ĠB =${ color A . reversed ()} ï¼ī \ n ") ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġgame Result : ĠGame Result Ġ= ĠGame ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġplayer Black Ġ= Ġif Ġ( color A Ġ=== ĠColor . BLACK ) Ġplayer A Ġelse Ġplayer B , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġplayer White Ġ= Ġif Ġ( color A Ġ=== ĠColor . BLACK ) Ġplayer B Ġelse Ġplayer A , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmillis In Game Ġ= Ġmillis In Game , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmillis At Turn Ġ= Ġmillis At Turn , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġautomatic Ġ= Ġtrue , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsilent Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ). play () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! silent ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprintln ( game Result . board . toString (). prepend Indent ("\ t ")) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprint ( when Ġ( game Result . winner ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcolor A Ġ-> Ġ" A ãģ® åĭ Ŀ ãģ¡ ãģ§ãģĻ ãĢĤ " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcolor A . reversed () Ġ-> Ġ" B ãģ® åĭ Ŀ ãģ¡ ãģ§ãģĻ ãĢĤ " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ" å¼ķ ãģį åĪĨ ãģĳ ãģ§ãģĻ ãĢĤ " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprint (" ï¼Ī A =${ color A } ï¼ļ ${ game Result . board . count ( color A )}, Ġ" Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" B =${ color A . reversed ()} :${ game Result . board . count ( color A . reversed ()) } ï¼ī Ġ> Ġ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( automatic ) Ġprintln () Ġelse Ġread Line () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( game Result . winner ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcolor A Ġ-> Ġrecord A . wins ++ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcolor A . reversed () Ġ-> Ġrecord A . losses ++ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġrecord A . draw s ++ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcolor A Ġ= Ġcolor A . reversed () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= ĠMatch Result ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġplayer A Ġto Ġrecord A , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġplayer B Ġto Ġrecord A . op pos ite ()) ĊĊĠĠĠĠĠĠĠ Ġif Ġ(! silent ) Ġprintln ( result . announce ) ĊĊĠĠĠĠĠĠĠ Ġreturn Ġresult ĊĠĠĠ Ġ} Ċ } Ċ Ċ class ĠMatch Result ( ĊĠĠĠĠĠĠĠ Ġblack Record : ĠPair < K Class < out ĠPlayer >, ĠRecord >, ĊĠĠĠĠĠĠĠ Ġwhite Record : ĠPair < K Class < out ĠPlayer >, ĠRecord > Ċ ) Ġ: ĠResult Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġrecords : ĠMap < K Class < out ĠPlayer >, ĠRecord > Ġ= Ġmap Of ( black Record , Ġwhite Record ) ĊĊĠĠĠ Ġfun Ġrecord ( player : ĠK Class < out ĠPlayer >): ĠRecord Ġ= Ġrecords [ player ] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ?: Ġthrow ĠIllegalArgumentException (" ãģĵãģ® ãĥĹ ãĥ¬ ãĥ¼ãĥ ¤ ãĥ¼ ãģ¯ åıĤ åĬł ãģĹãģ¦ãģĦ ãģ¾ãģĽãĤĵ : Ġ" Ġ+ Ġplayer . qualified Name ) ĊĊĠĠĠ Ġoverride Ġval Ġannounce : ĠString Ġ= Ġwith ( black Record . second ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ"\ n ç· ı åĲĪ æĪĲ ç¸ ¾ ï¼ļ \ n \ t A ãģ® åĭ Ŀ ãģ¡ ï¼ļ ${ wins }, Ġ å¼ķ ãģį åĪĨ ãģĳ ï¼ļ ${ draw s }, ĠB ãģ® åĭ Ŀ ãģ¡ ï¼ļ ${ losses }\ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlosses Ġ< Ġwins Ġ-> Ġ"\ t A ãģ® åĭ Ŀ ãģ¡ ãģ§ãģĻ ãĢĤ " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwins Ġ< Ġlosses Ġ-> Ġ"\ tB ãģ® åĭ Ŀ ãģ¡ ãģ§ãģĻ ãĢĤ " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ"\ t å¼ķ ãģį åĪĨ ãģĳ ãģ§ãģĻ ãĢĤ " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ