package Ġweek 5 . players Ċ Ċ import Ġweek 5 .* Ċ Ċ class ĠLook A head Player Ġ: ĠPlayer Ġ{ ĊĊĠĠĠ Ġoverride Ġfun Ġnext Move ( state : ĠState ): ĠMove Ġ{ ĊĊĠĠĠĠĠĠĠ Ġval Ġwin ning Move Ġ= ĠWin ning Move Player (). win ning Move ( state ) ĊĠĠĠĠĠĠĠ Ġif Ġ( win ning Move Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprintln (" Found Ġa Ġwin ning Ġmove !") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġwin ning Move ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġsafe Move Ġ= Ġfind Safe Move ( state ) ĊĠĠĠĠĠĠĠ Ġif Ġ( safe Move Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprintln (" Found Ġa Ġsafe Ġmove !") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġsafe Move ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġprintln (" Fall ing Ġback Ġto Ġvalid Ġmove ") ĊĠĠĠĠĠĠĠ Ġreturn ĠValid Move Player (). next Move ( state ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġfind Safe Move ( state : ĠState ): ĠMove ? Ġ{ ĊĊĠĠĠĠĠĠĠ Ġval Ġcenter Move Ġ= ĠMove ( 1 , Ġ 1 ) ĊĠĠĠĠĠĠĠ Ġif Ġ( isValid Move ( state , Ġcenter Move ) Ġ&& Ġis Safe ( state , Ġcenter Move )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġcenter Move ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfor Ġ( row Ġin Ġ 0 Ġ.. Ġ 2 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( column Ġin Ġ 0 Ġ.. Ġ 2 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmove Ġ= ĠMove ( row , Ġcolumn ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( isValid Move ( state , Ġmove ) Ġ&& Ġis Safe ( state , Ġmove )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġmove ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġis Safe ( state : ĠState , Ġmove : ĠMove ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġstate . field [ move . row ][ move . column ] Ġ= Ġstate . next Player Symbol ĊĠĠĠĠĠĠĠ Ġstate . next Player Symbol Ġ= Ġstate . next Player Symbol . other () ĊĠĠĠĠĠĠĠ Ġval Ġwin ning Move Other Ġ= ĠWin ning Move Player (). win ning Move ( state ) ĊĠĠĠĠĠĠĠ Ġstate . field [ move . row ][ move . column ] Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġstate . next Player Symbol Ġ= Ġstate . next Player Symbol . other () ĊĠĠĠĠĠĠĠ Ġreturn Ġwin ning Move Other Ġ== Ġnull ĊĠĠĠ Ġ} Ċ } Ċ