package Ġgame . model . player Ċ Ċ import Ġgame . model . Board Ċ import Ġio . reactivex . Emitter Ċ import Ġio . reactivex . Observable Ċ import Ġio . reactivex . Observable On Subscribe Ċ import Ġio . reactivex . android . schedul ers . Android Schedulers Ċ import Ġio . reactivex . schedul ers . Schedulers Ċ Ċ class ĠC pu Alpha Beta Player ( player ID : ĠInt , Ġplayer Name : ĠString , Ġcolor : ĠInt ) Ġ: ĠC pu Player ( player ID , Ġplayer Name , Ġcolor ) Ġ{ ĊĠĠĠ Ġvar Ġai Depth Ġ= Ġ 4 ĊĠĠĠ Ġvar Ġg reedy T reshold Ġ= Ġ 1 6 ĊĠĠĠ Ġvar Ġshuffle Free Fields Array Ġ= Ġtrue ĊĊĠĠĠ Ġconstructor ( other : ĠC pu Alpha Beta Player ) Ġ: Ġthis ( other . player ID , Ġother . player Name , Ġother . color ) Ġ{ ĊĠĠĠĠĠĠĠ Ġpoints Ġ= Ġother . points ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġmake AIM ov ement ( board : ĠBoard , Ġplayers : ĠArray < Player >): ĠObservable < Void > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġprocessor Ġ= ĠAlpha Beta Processor ( players , Ġplayers . indexOf ( this ), Ġboard ) ĊĊĠĠĠĠĠĠĠ Ġreturn ĠObservable . create ({ Ġemitter Outside : ĠEmit ter < Void > Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġobservable Ġ= ĠObservable . create ( Observable On Subscribe < Pair < Int , ĠInt >> Ġ{ Ġemitter Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġemitter . onNext ( processor . calculate ( ai Depth , Ġg reedy T reshold , Ġshuffle Free Fields Array )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġemitter . onComplete () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}). subscribe On ( Schedulers . computation ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. observe On ( Android Schedulers . main Thread ()) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġobservable . subscribe ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ{ Ġresult Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġboard . mark Field ( this , Ġresult . first , Ġresult . second ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġemitter Outside . onComplete () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ{ Ġthrowable Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrowable . printStackTrace () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġclone () Ġ= ĠC pu Alpha Beta Player ( this ) Ċ }