/* Ċ Ġ* ĠThe ĠMIT ĠLicense Ċ Ġ* Ċ Ġ* ĠCopyright Ġ 2 0 1 4 ĠAlex ander ĠAlex ee v . Ċ Ġ* Ċ Ġ*/ Ċ Ċ package Ġorg . m um id ol . logic games . examples Ċ Ċ import Ġorg . m um id ol . logic games . Multi Player Game Ċ import Ġorg . m um id ol . logic games . Game Ċ import Ġorg . m um id ol . logic games . Illegal Turn Exception Ċ import Ġorg . m um id ol . logic games . Player Ċ import Ġorg . m um id ol . logic games . Sequential Game Ċ import Ġorg . m um id ol . logic games . alpha Beta Search Ċ import Ġorg . m um id ol . logic games . examples . T ic T ac To e . T ic T ac To e Turn Ċ Ċ /** Ċ Ġ* ĠCreated Ġon Ġ 0 3 . 1 1 . 2 0 1 4 . Ċ Ġ*/ Ċ class ĠT ic T ac To e (_ field : ĠChar Array Ġ= ĠcharArray ( ĊĠĠĠĠĠĠĠ Ġ'_ ', Ġ'_ ', Ġ'_ ', ĊĠĠĠĠĠĠĠ Ġ'_ ', Ġ'_ ', Ġ'_ ', ĊĠĠĠĠĠĠĠ Ġ'_ ', Ġ'_ ', Ġ'_ ')) Ġ: ĠSequential Game () Ġ{ ĊĠĠĠ Ġoverride Ġval Ġplayers Count Ġ= Ġ 2 ĊĠĠĠ Ġval ĠE Ġ= Ġ'_' Ċ Ċ // ĠĠĠ Ġclass Ġobject Ġ: ĠGame . Initial < T ic T ac To e >() Ġ{ Ċ // ĠĠĠĠĠĠĠ Ġoverride Ġval Ġinitial : ĠT ic T ac To e Ġ= ĠT ic T ac To e () Ċ // ĠĠĠ Ġ} ĊĊĠĠĠ Ġval Ġfield Ġ= ĠString (_ field ) ĊĠĠĠ Ġval Ġturn Count : ĠInt ĊĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠ Ġturn Count Ġ= Ġfield . fold ( 0 , Ġ{( n , Ġc ) Ġ-> Ġif Ġ( c Ġ!= ĠE ) Ġn Ġ+ Ġ 1 Ġelse Ġn }) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġval Ġcurr Player Ġ= Ġturn Count Ġ% Ġ 2 ĊĊĠĠĠ Ġprivate Ġval Ġis W on Ġ= ĊĠĠĠĠĠĠĠ Ġ( field [ 0 ] Ġ== Ġfield [ 1 ]) Ġ&& Ġ( field [ 1 ] Ġ== Ġfield [ 2 ]) Ġ&& Ġ( field [ 0 ] Ġ!= ĠE ) Ġ|| ĊĠĠĠĠĠĠĠ Ġ( field [ 1 Ġ* Ġ 3 ] Ġ== Ġfield [ 1 Ġ* Ġ 3 Ġ+ Ġ 1 ]) Ġ&& Ġ( field [ 1 Ġ* Ġ 3 Ġ+ 1 ] Ġ== Ġfield [ 1 Ġ* Ġ 3 Ġ+ 2 ]) Ġ&& Ġ( field [ 1 Ġ* Ġ 3 ] Ġ!= ĠE ) Ġ|| ĊĠĠĠĠĠĠĠ Ġ( field [ 2 Ġ* Ġ 3 ] Ġ== Ġfield [ 2 Ġ* Ġ 3 Ġ+ Ġ 1 ]) Ġ&& Ġ( field [ 2 Ġ* Ġ 3 Ġ+ 1 ] Ġ== Ġfield [ 2 Ġ* Ġ 3 Ġ+ 2 ]) Ġ&& Ġ( field [ 2 Ġ* Ġ 3 ] Ġ!= ĠE ) Ġ|| ĊĠĠĠĠĠĠĠ Ġ( field [ 0 ] Ġ== Ġfield [ 1 Ġ* Ġ 3 ]) Ġ&& Ġ( field [ 1 Ġ* Ġ 3 ] Ġ== Ġfield [ 2 Ġ* Ġ 3 ]) Ġ&& Ġ( field [ 0 ] Ġ!= ĠE ) Ġ|| ĊĠĠĠĠĠĠĠ Ġ( field [ 1 ] Ġ== Ġfield [ 1 Ġ* Ġ 3 Ġ+ Ġ 1 ]) Ġ&& Ġ( field [ 1 Ġ* Ġ 3 Ġ+ Ġ 1 ] Ġ== Ġfield [ 2 Ġ* Ġ 3 Ġ+ Ġ 1 ]) Ġ&& Ġ( field [ 1 ] Ġ!= ĠE ) Ġ|| ĊĠĠĠĠĠĠĠ Ġ( field [ 2 ] Ġ== Ġfield [ 1 Ġ* Ġ 3 Ġ+ Ġ 2 ]) Ġ&& Ġ( field [ 1 Ġ* Ġ 3 Ġ+ Ġ 2 ] Ġ== Ġfield [ 2 Ġ* Ġ 3 Ġ+ Ġ 2 ]) Ġ&& Ġ( field [ 2 ] Ġ!= ĠE ) Ġ|| ĊĠĠĠĠĠĠĠ Ġ( field [ 0 ] Ġ== Ġfield [ 1 Ġ* Ġ 3 Ġ+ Ġ 1 ]) Ġ&& Ġ( field [ 1 Ġ* Ġ 3 Ġ+ Ġ 1 ] Ġ== Ġfield [ 2 Ġ* Ġ 3 Ġ+ Ġ 2 ]) Ġ&& Ġ( field [ 0 ] Ġ!= ĠE ) Ġ|| ĊĠĠĠĠĠĠĠ Ġ( field [ 2 ] Ġ== Ġfield [ 1 Ġ* Ġ 3 Ġ+ Ġ 1 ]) Ġ&& Ġ( field [ 1 Ġ* Ġ 3 Ġ+ Ġ 1 ] Ġ== Ġfield [ 2 Ġ* Ġ 3 ]) Ġ&& Ġ( field [ 2 ] Ġ!= ĠE ) ĊĊĠĠĠ Ġoverride Ġval Ġis Over Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ( turn Count Ġ== Ġ 9 ) Ġ|| Ġis W on ĊĊĠĠĠ Ġoverride Ġval Ġwinner : ĠInt ? Ġ= ĊĠĠĠĠĠĠĠ Ġif Ġ( is W on ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprev Player () ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnull ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠtoString (): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġsb Ġ= ĠStringBuilder () ĊĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 0 .. 2 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( j Ġin Ġ 0 .. 2 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsb . append ( field [ i Ġ* Ġ 3 Ġ+ Ġj ]) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsb . append ('\ n ') ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġsb . toString () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġmark ( x : ĠInt , Ġy : ĠInt ) Ġ= ĊĠĠĠĠĠĠĠ Ġif Ġ( x Ġ> Ġ 3 Ġ|| Ġy Ġ> Ġ 3 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠIllegal Turn Exception () ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( field [ x Ġ* Ġ 3 Ġ+ Ġy ] Ġ== ĠE ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠT ic T ac To e Turn ( x Ġ* Ġ 3 Ġ+ Ġy ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠIllegal Turn Exception () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġinner Ġclass ĠT ic T ac To e Turn ( val Ġi : ĠInt ) Ġ: ĠGame . Turn < T ic T ac To e >(( this Ġ: ĠGame ). Turn Def ender ()) Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġmove (): ĠT ic T ac To e Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnew Field Ġ= Ġfield . toCharArray () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnew Field [ i ] Ġ= Ġif Ġ( curr Player Ġ== Ġ 0 ) Ġ' X ' Ġelse Ġ' 0 ' ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠT ic T ac To e ( new Field ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ trait ĠT ic T ac To e Player Ġ: ĠPlayer < T ic T ac To e > Ċ Ċ class ĠDummy T ic T ac To e Player Ġ: ĠT ic T ac To e Player Ġ{ ĊĠĠĠ Ġoverride Ġfun Ġturn ( game : ĠT ic T ac To e ): ĠT ic T ac To e Turn Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġi Ġ= Ġgame . field . indexOf ( game . E ) ĊĠĠĠĠĠĠĠ Ġreturn Ġgame . mark ( i Ġ/ Ġ 3 , Ġi Ġ% Ġ 3 ) ĊĠĠĠ Ġ} Ċ } Ċ Ċ fun Ġgenerate T ic T ac To e Turn s ( node : ĠT ic T ac To e ) Ġ= ĊĠĠĠ Ġobject Ġ: ĠIterable < T ic T ac To e Turn > Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġiterator () Ġ= Ġobject Ġ: ĠIterator < T ic T ac To e Turn > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġi Ġ= Ġ- 1 ; ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġnext (): ĠT ic T ac To e Turn Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġi Ġ= Ġnode . field . indexOf ( node . E , Ġi Ġ+ Ġ 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġnode . mark ( i Ġ/ Ġ 3 , Ġi Ġ% Ġ 3 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġhas Next () Ġ= Ġnode . field . indexOf ( node . E , Ġi Ġ+ Ġ 1 ) Ġ!= Ġ- 1 ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ Ċ class ĠSmart T ic T ac To e Player : ĠT ic T ac To e Player Ġ{ ĊĠĠĠ Ġoverride Ġfun Ġturn ( game : ĠT ic T ac To e ) Ġ= ĊĠĠĠĠĠĠĠ Ġalpha Beta Search ( game , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ{ Ġnode Ġ-> Ġgenerate T ic T ac To e Turn s ( node ) Ġ} ĊĠĠĠĠĠĠĠ Ġ) !! Ċ } Ċ