package Ġnet . z om is . games . impl . words Ċ Ċ import Ġnet . z om is . games . Win Result Ċ import Ġnet . z om is . games . api . Games Api Ċ import Ġnet . z om is . games . common . Player Index Ċ import Ġnet . z om is . games . dsl . View able Ċ import Ġnet . z om is . games . impl . words . word lists . De crypto Words Ċ Ċ object ĠDec rypto Ġ{ ĊĊĠĠĠ Ġclass ĠTeam ( val Ġteam Number : ĠInt , Ġval Ġteam Members : ĠList < Int >) Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġchat : ĠString Ġ= Ġ"" ĊĠĠĠĠĠĠĠ Ġvar Ġcl ue G iver Index : ĠInt Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġval Ġcl ue G iver Player : ĠInt Ġget () Ġ= Ġteam Members [ cl ue G iver Index Ġ% Ġteam Members . size ] ĊĠĠĠĠĠĠĠ Ġval Ġwords Ġ= Ġmutable ListOf < String >() ĊĠĠĠĠĠĠĠ Ġvar Ġinter ception s : ĠInt Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġvar Ġmis com munications : ĠInt Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġval Ġcommunication History Ġ= Ġmutable ListOf < Cl ues And Guess >() ĊĠĠĠĠĠĠĠ Ġval Ġinter ception History Ġ= Ġmutable ListOf < Cl ues And Guess >() ĊĠĠĠ Ġ} ĊĠĠĠ Ġfun Ġplayers On Team ( team Index : ĠInt , Ġplayer Count : ĠInt ): ĠList < Int > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġ( 0 Ġuntil Ġplayer Count ). filter Ġ{ Ġit Ġ% Ġ 2 Ġ== Ġteam Index Ġ} ĊĠĠĠ Ġ} ĊĠĠĠ Ġclass ĠModel ( val Ġplayer Count : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġteam A Ġ= ĠTeam ( 0 , Ġplayers On Team ( 0 , Ġplayer Count )) ĊĠĠĠĠĠĠĠ Ġval Ġteam B Ġ= ĠTeam ( 1 , Ġplayers On Team ( 1 , Ġplayer Count )) ĊĊĠĠĠĠĠĠĠ Ġvar Ġcurrent Team Index : ĠInt Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġvar Ġcurrent Code : ĠList < Int > Ġ= ĠlistOf () ĊĠĠĠĠĠĠĠ Ġval Ġcurrent Team Ġget () Ġ= Ġteams [ current Team Index ] ĊĠĠĠĠĠĠĠ Ġval Ġopponent Team : ĠTeam Ġget () Ġ= Ġteams [ 1 Ġ- Ġcurrent Team Index ] ĊĠĠĠĠĠĠĠ Ġval Ġteams Ġ= ĠlistOf ( team A , Ġteam B ) ĊĊĠĠĠĠĠĠĠ Ġfun Ġround Number (): ĠInt Ġ= Ġteams . min Of Ġ{ Ġit . inter ception History . size Ġ} ĊĠĠĠĠĠĠĠ Ġfun Ġteam For ( viewer : ĠPlayer Index ): ĠTeam ? Ġ= Ġteams . find Ġ{ Ġit . team Members . contains ( viewer ) Ġ} ĊĠĠĠ Ġ} ĊĠĠĠ Ġdata Ġclass ĠCl ues And Guess ( private Ġval Ġcorrect Code : ĠList < Int >, Ġval Ġcl ues : ĠCl ues , Ġvar Ġguess : ĠGu ess ?): ĠView able Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġcorrect Code Re ve aled : ĠBoolean Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġfun Ġpublic Correct Code (): ĠList < Int > Ġ= Ġif Ġ( correct Code Re ve aled ) Ġcorrect Code Ġelse ĠlistOf () ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġto View ( viewer : ĠPlayer Index ): ĠAny ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ= Ġmap Of (" cl ues " Ġto Ġcl ues . cl ues , Ġ" guess " Ġto Ġguess ?. guess , Ġ" correct " Ġto Ġpublic Correct Code ()) ĊĠĠĠĠĠĠĠ Ġfun Ġcorrect Guess (): ĠBoolean Ġ= Ġguess ?. guess Ġ== Ġcorrect Code ĊĠĠĠ Ġ} ĊĠĠĠ Ġclass ĠCl ues ( val Ġcl ues : ĠList < String >) ĊĠĠĠ Ġdata Ġclass ĠGu ess ( val Ġguess : ĠList < Int >) ĊĊĠĠĠ Ġval Ġfactory Ġ= ĠGames Api . game Creator ( Model :: class ) ĊĠĠĠ Ġval Ġchat Ġ= Ġfactory . action (" chat ", ĠString :: class ) ĊĠĠĠ Ġval Ġgive Cl ue Ġ= Ġfactory . action (" give Cl ue ", ĠCl ues :: class ). serialization ({ Ġit . cl ues . join ToString ("\ n ") Ġ}) Ġ{ ĊĠĠĠĠĠĠĠ ĠCl ues ( it . split ("\ n ")) ĊĠĠĠ Ġ} ĊĠĠĠ Ġval Ġguess Code Ġ= Ġfactory . action (" guess Code ", ĠGu ess :: class ). serialization ({ Ġit . guess . join ToString ("") Ġ}) Ġ{ ĊĠĠĠĠĠĠĠ ĠGu ess ( it . map Ġ{ Ġc Ġ-> Ġc . toString (). toInt () Ġ}) ĊĠĠĠ Ġ} ĊĠĠĠ Ġval Ġgame Ġ= Ġfactory . game (" De crypto ") Ġ{ ĊĠĠĠĠĠĠĠ Ġsetup Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġplayers ( 4 .. 1 6 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinit Ġ{ ĠModel ( player Count ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠonStart Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġwords Ġ= ĠDec rypto Words . words . choose XY ( replay able , Ġ" words ", Ġ 4 , Ġ 4 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgame . team A . words . addAll ( words . first ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgame . team B . words . addAll ( words . second ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġeach Ġteam 's Ġencrypt or Ġshould Ġget Ġa Ġcode Ġto Ġgive Ġsome Ġthinking Ġtime ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgame . current Code Ġ= Ġreplay able . ints (" code ") Ġ{ Ġrandom Code () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġgame Flow Rules Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrule (" win Ġthe Ġgame ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġapplies When Ġ{ Ġgame . teams . any Ġ{ Ġit . inter ception s Ġ>= Ġ 2 Ġ} Ġ&& Ġ! elim inations . is Game Over () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġapply ForEach Ġ{ Ġgame . teams . filter Ġ{ Ġit . inter ception s Ġ>= Ġ 2 Ġ} Ġ}. effect Ġ{ win ning Team Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelim inations . elim inate Many ( win ning Team . team Members , ĠWin Result . WIN ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelim inations . elim inate Remaining ( Win Result . LO SS ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrule (" lose Ġthe Ġgame ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġapplies When Ġ{ Ġgame . teams . any Ġ{ Ġit . mis com munications Ġ>= Ġ 2 Ġ} Ġ&& Ġ! elim inations . is Game Over () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġapply ForEach Ġ{ Ġgame . teams . filter Ġ{ Ġit . mis com munications Ġ>= Ġ 2 Ġ} Ġ}. effect Ġ{ lo sing Team Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelim inations . elim inate Many ( lo sing Team . team Members , ĠWin Result . LO SS ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelim inations . elim inate Remaining ( Win Result . WIN ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbefore Return Rule (" chat Ġaction ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġaction ( chat ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpre condition Ġ{ Ġplayer Index Ġ!= Ġgame . current Team . cl ue G iver Player Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoptions Ġ{ ĠlistOf ("") Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġperform Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgame . team For ( player Index ) !!. chat Ġ+= Ġ"$ player Index : Ġ${ action . parameter }\ n " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbefore Return Rule (" view ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġview (" current Team ") Ġ{ Ġgame . current Team Index Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġview (" words ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgame . team For ( viewer )?. words Ġ?: Ġempty List < String >() ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġview (" your Team ") Ġ{ Ġgame . team For ( viewer )?. team Number Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġview (" teams ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠCl ues Ġand Ġgues ses Ġare Ġpublic Ġinformation Ġfor Ġboth Ġteams ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgame . teams . map Ġ{ Ġteam Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmap Of ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" members " Ġto Ġteam . team Members , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" chat " Ġto Ġteam . chat . take If Ġ{ Ġviewer Ġin Ġteam . team Members Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" cl ue G iver " Ġto Ġteam . cl ue G iver Player , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" intercept ed " Ġto Ġteam . inter ception s , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" mis com munications " Ġto Ġteam . mis com munications , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" com munications " Ġto Ġteam . communication History . map Ġ{ Ġit . to View ( viewer ) Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" inter ception s " Ġto Ġteam . inter ception History . map Ġ{ Ġit . to View ( viewer ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġview (" code ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( this . viewer Ġ== Ġgame . current Team . cl ue G iver Player ) Ġgame . current Code Ġelse ĠlistOf () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġgame Flow Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġloop Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( team Ġin Ġgame . teams ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠTODO : ĠRefactor Ġthis Ġcode Ġand Ġextract Ġphases Ġinto Ġmethods ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgame . current Team Index Ġ= Ġteam . team Number ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstep (" team Ġ${ team . team Number } Ġ- Ġgive Cl ue ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġyield Action ( give Cl ue ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpre condition Ġ{ Ġplayer Index Ġ== Ġteam . cl ue G iver Player Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoptions Ġ{ ĠlistOf ( Cl ues ( listOf (" random ", Ġ" random ", Ġ" random "))) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġperform Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgame . current Team . communication History . add ( Cl ues And Guess ( game . current Code , Ġaction . parameter , Ġnull )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgame . opp onent Team . inter ception History . add ( Cl ues And Guess ( game . current Code , Ġaction . parameter , Ġnull )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}. loop Until Ġ{ Ġaction ?. action Type Ġ== Ġgive Cl ue . name Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġintercept ed : ĠBoolean Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( game . round Number () Ġ> Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstep (" team Ġ${ team . team Number } Ġ- Ġopponent s Ġguess Ġcode ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġyield Action ( guess Code ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoptions Ġ{ ĠlistOf ( Guess ( listOf ( 1 , Ġ 2 , Ġ 3 ))) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpre condition Ġ{ Ġplayer Index Ġin Ġgame . opp onent Team . team Members Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġperform Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġitem Ġ= Ġgame . opp onent Team . inter ception History . last () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġitem . guess Ġ= Ġaction . parameter ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġintercept ed Ġ= Ġitem . correct Guess () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( intercept ed ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgame . current Team . communication History . last (). correct Code Re ve aled Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġitem . correct Code Re ve aled Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgame . opp onent Team . inter ception s ++ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgame . current Code Ġ= Ġreplay able . ints (" code ") Ġ{ Ġrandom Code () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}. loop Until Ġ{ Ġaction ?. action Type Ġ== Ġguess Code . name Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! intercept ed ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstep (" team Ġ${ team . team Number } Ġ- Ġguess Ġown Ġcode ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġyield Action ( guess Code ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoptions Ġ{ ĠlistOf ( Guess ( listOf ( 1 , Ġ 2 , Ġ 3 ))) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpre condition Ġ{ Ġplayer Index Ġin Ġgame . current Team . team Members Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpre condition Ġ{ Ġplayer Index Ġ!= Ġgame . current Team . cl ue G iver Player Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġperform Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġitem Ġ= Ġgame . current Team . communication History . last () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġitem . correct Code Re ve aled Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgame . opp onent Team . inter ception History . last (). correct Code Re ve aled Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġitem . guess Ġ= Ġaction . parameter ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! item . correct Guess ()) Ġgame . current Team . mis com munications ++ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgame . current Code Ġ= Ġreplay able . ints (" code ") Ġ{ Ġrandom Code () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}. loop Until Ġ{ Ġaction ?. action Type Ġ== Ġguess Code . name Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgame . current Team . cl ue G iver Index ++ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġrandom Code (): ĠList < Int > Ġ= Ġmutable ListOf ( 1 , Ġ 2 , Ġ 3 , Ġ 4 ). sh uffled (). take ( 3 ) Ċ Ċ } Ċ