package Ġcom . sas ak ir ione . pokemon . simulator . domain . value . nature Ċ Ċ import Ġcom . sas ak ir ione . pokemon . simulator . const . Move Const Ċ import Ġcom . sas ak ir ione . pokemon . simulator . data . Pokemon Type Compatibility Ċ import Ġcom . sas ak ir ione . pokemon . simulator . domain . value . move . Move Ċ Ċ /** Ċ Ġ* ĠãĤ ¿ ãĤ¤ ãĥĹ ãĤĴ æĭħ å½ĵ ãģĻãĤĭ ãĤ¯ãĥ©ãĤ¹ Ċ Ġ* Ġ@ param Ġtype ĠãĤ ¿ ãĤ¤ ãĥĹ ãģ® ãĥªãĤ¹ãĥĪ Ċ Ġ*/ Ċ class ĠType ( private Ġval Ġtype : ĠList < Type Select >) Ġ{ ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠãĤ ¿ ãĤ¤ ãĥĹ ãĤĴ å¢ Ĺ ãĤĦ ãģĻ Ġ< BR > ĊĠĠĠĠ Ġ* Ġ ãĢĮ ãĥı ãĥŃ ãĤ¦ ãĤ£ ãĥ³ ãĢį ãĤĦ ãĢĮ ãĤĤ ãĤĬ ãģ® ãģ® ãĤ į ãģĦ ãĢį ãģªãģ© ãĤ¿ãĤ¤ ãĥĹ ãĤĴ å¢ Ĺ ãĤĦ ãģĻ æĬĢ ãģªãģ© ãģ§ ãĤ¿ãĤ¤ ãĥĹ ãĤĴ å¢ Ĺ ãĤĦ ãģĻ ãģ¨ ãģį ãģ« ä½¿ ãģĦ ãģ¾ãģĻ ĊĠĠĠĠ Ġ* Ġ@ param Ġadd Type Ġ è¿½åĬł ãģĻãĤĭ ãĤ¿ãĤ¤ ãĥĹ ĊĠĠĠĠ Ġ* Ġ@ return Ġ çı¾åľ¨ ãģ® ãĤ¿ãĤ¤ ãĥĹ ãģ« æĸ°ãģĹãģĦ ãĤ¿ãĤ¤ ãĥĹ ãģĮ è¿½åĬł ãģķãĤĮãģŁ ãĤ¤ãĥ³ ãĤ¹ãĤ¿ ãĥ³ãĤ¹ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġadd Type ( add Type : ĠType Select ): ĠType Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġadd Types Ġ= Ġtype . to Mutable List () ĊĠĠĠĠĠĠĠ Ġadd Types . add ( add Type ) ĊĠĠĠĠĠĠĠ Ġreturn ĠType ( add Types . toList ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġãĥ ı ãĥŃ ãĤ¦ ãĤ£ ãĥ³ ãģ® ãĤ¿ãĤ¤ ãĥĹ åĩ¦çĲĨ ãĤĴè¡Į ãģĦ ãģ¾ãģĻ ĊĠĠĠĠ Ġ* Ġ@ return ĠãĤ ´ ãĥ¼ ãĤ¹ãĥĪ ãĤ¿ãĤ¤ ãĥĹ ãĤĴ è¿½åĬł ãģĹãģŁ ãĤ¿ãĤ¤ ãĥĹ ãĤ¤ãĥ³ ãĤ¹ãĤ¿ ãĥ³ãĤ¹ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġtype H allow een (): ĠType Ġ= Ġadd Type ( Type Select . G HOST ) ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠãĤ Ĥ ãĤĬ ãģ® ãģ® ãĤ į ãģĦ ãģ® ãĤ¿ãĤ¤ ãĥĹ åĩ¦çĲĨ ãĤĴè¡Į ãģĦ ãģ¾ãģĻ ĊĠĠĠĠ Ġ* Ġ@ return Ġ ãģı ãģķ ãĤ¿ãĤ¤ ãĥĹ ãĤĴ è¿½åĬł ãģĹãģŁ ãĤ¿ãĤ¤ ãĥĹ ãĤ¤ãĥ³ ãĤ¹ãĤ¿ ãĥ³ãĤ¹ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġtype M ori (): ĠType Ġ= Ġadd Type ( Type Select . GR ASS ) ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠãĤ ¿ ãĤ¤ ãĥĹ ãĤĴ åħ¥åĬĽ ãģĹãģŁ ãĤ¿ãĤ¤ ãĥĹ ãģ« å¤īæĽ´ ãģĹãģ¾ãģĻ < BR > ĊĠĠĠĠ Ġ* Ġ ãĥª ãĥĻ ãĥŃ ãĤĦ ãģ¸ ãĤĵ ãģ Ĵ ãĤĵ ãģĺ ãģ ĸ ãģĦ ãģªãģ© ãģ® ãĤ¿ãĤ¤ ãĥĹ ãĤĴ å¤ī ãģĪãĤĭ çī¹æĢ§ ãĢģ ãģ¿ ãģļ ãģ³ ãģŁ ãģĹãģª ãģ© ãģ® çī¹å®ļ ãģ® ãĤ¿ãĤ¤ ãĥĹ ãģ« ãĤ¿ãĤ¤ ãĥĹ ãĤĴ å¤īæĽ´ ãģĻãĤĭ æĬĢ ãģ§ ä½¿ ãģĦ ãģ¾ãģĻ ĊĠĠĠĠ Ġ* Ġ@ param Ġchange Type Ġ å¤ī åĮĸ ãģķ ãģĽ ãĤĭ ãĤ¿ãĤ¤ ãĥĹ ĊĠĠĠĠ Ġ* Ġ@ return Ġ å¤ī åĮĸ ãģķ ãģĽ ãĤĭ ãĤ¿ãĤ¤ ãĥĹ ãģ® ãĤ¿ãĤ¤ ãĥĹ ãĤ¤ãĥ³ ãĤ¹ãĤ¿ ãĥ³ãĤ¹ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġtype Change ( change Type : ĠType Select ): ĠType Ġ= ĠType ( listOf ( change Type )) ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ ãģ¿ ãģļ ãģ³ ãģŁ ãģĹ ãģ® ãĤ¿ãĤ¤ ãĥĹ åĩ¦çĲĨ ãĤĴè¡Į ãģĦ ãģ¾ãģĻ ĊĠĠĠĠ Ġ* Ġ@ return Ġ ãģ¿ ãģļ åįĺ ãĤ¿ãĤ¤ ãĥĹ ãģ® ãĤ¿ãĤ¤ ãĥĹ ãĤ¤ãĥ³ ãĤ¹ãĤ¿ ãĥ³ãĤ¹ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġtype So ak (): ĠType Ġ= Ġtype Change ( Type Select . WATER ) ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ ãĥª ãĥĻ ãĥŃ ãĤĦ ãģ¸ ãĤĵ ãģ Ĵ ãĤĵ ãģĺ ãģ ĸ ãģĦ ãģ® ãĤ¿ãĤ¤ ãĥĹ åĩ¦çĲĨ ãĤĴè¡Į ãģĦ ãģ¾ãģĻ ĊĠĠĠĠ Ġ* Ġ@ param Ġmove Ġ åĩº ãģĹãģŁ æĬĢ ãģ® ãĤ¤ãĥ³ ãĤ¹ãĤ¿ ãĥ³ãĤ¹ ĊĠĠĠĠ Ġ* Ġ@ return Ġ åĩº ãģĹãģŁ æĬĢ ãģ® ãĤ¿ãĤ¤ ãĥĹ ãģ® ãĤ¿ãĤ¤ ãĥĹ ãĤ¤ãĥ³ ãĤ¹ãĤ¿ ãĥ³ãĤ¹ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġtype Li bero ( move : ĠMove ): ĠType Ġ= Ġtype Change ( move . move Type ) ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠãĤ ¿ ãĤ¤ ãĥĹ çĽ¸ æĢ§ ãĤĴ è¨Ī ç®Ĺ ãģĹãģ¾ãģĻ ĊĠĠĠĠ Ġ* Ġ@ param Ġmove Ġ åıĹ ãģĳãĤĭ æĬĢ ãģ® ãĤ¤ãĥ³ ãĤ¹ãĤ¿ ãĥ³ãĤ¹ ĊĠĠĠĠ Ġ* Ġ@ return ĠæĬ Ģ ãģ® çĽ¸ æĢ§ åĢ į çİĩ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun ĠgetType Compatibility ( move : ĠMove ): ĠDouble Ġ= Ġwhen Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġãĥķ ãĥª ãĥ¼ãĤ º ãĥī ãĥ©ãĤ¤ æĻĤ ãģ® åĩ¦çĲĨ ï¼ļ æ°´ ãģ¸ãģ® è£ ľ æŃ£ ãģĮ åįĬ æ¸ Ľ ãģĭãĤī åĢ į ãģ« ãģªãĤĭ ãģ®ãģ§ æľĢ çµĤ çµĲæŀľ ãģĭãĤī 4 åĢ į ãģĻãĤĭ ĊĠĠĠĠĠĠĠ Ġmove . name Ġ== ĠMove Const . FREE ZE _ DR Y Ġ&& Ġtype . contains ( Type Select . WATER ) ĊĠĠĠĠĠĠĠ Ġ-> Ġnormal Type Compatibility ( move . move Type ) Ġ* Ġ 4 ĊĠĠĠĠĠĠĠ Ġ// Ġãĥķ ãĥ© ãĤ¤ãĥ³ ãĤ° ãĥĹ ãĥ¬ ãĤ¹ æĻĤ ãģ® åĩ¦çĲĨ ï¼ļ æł¼ éĹ ĺ ãģ¨ é£ Ľ è¡Į ãģ® ä¸ ¡ æĸ¹ ãģ® åĢ į çİĩ ãĤĴ æİ Ľ ãģĳ åĲĪ ãĤı ãģĽ ãĤĭ ĊĠĠĠĠĠĠĠ Ġmove . name Ġ== ĠMove Const . FL Y ING _ PRESS ĊĠĠĠĠĠĠĠ Ġ-> Ġnormal Type Compatibility ( Type Select . F IGHT ING ) Ġ* Ġnormal Type Compatibility ( Type Select . FL Y ING ) ĊĠĠĠĠĠĠĠ Ġ// Ġ éĢļå¸¸ ãģ® æĬĢ ãģ® åĩ¦çĲĨ ĊĠĠĠĠĠĠĠ Ġelse Ġ-> Ġnormal Type Compatibility ( move . move Type ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠãĤ ¿ ãĤ¤ ãĥĹ çĽ¸ æĢ§ ãĤĴ åįĺ ç´ Ķ ãģ« è¨Ī ç®Ĺ ãģĹãģ¾ãģĻ ĊĠĠĠĠ Ġ* Ġ@ param Ġmove Type Ġ åıĹ ãģĳãĤĭ æĬĢ ãģ® ãĤ¿ãĤ¤ ãĥĹ ĊĠĠĠĠ Ġ* Ġ@ return ĠæĬ Ģ ãģ® çĽ¸ æĢ§ åĢ į çİĩ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġnormal Type Compatibility ( move Type : ĠType Select ): ĠDouble Ġ= Ġtype . map Ġ{ Ġtype Ġ-> ĊĠĠĠĠĠĠĠ ĠPokemon Type Compatibility . type Compatibility ( move Type , Ġtype ) ĊĠĠĠ Ġ}. reduce Ġ{ Ġacc , Ġd Ġ-> Ġacc Ġ* Ġd Ġ} Ċ }