package Ġcom . ib ash k imi . tris . model . player Ċ Ċ import Ġandroid . os . System Clock Ċ import Ġcom . ib ash k imi . tris . model . Board Ċ import Ġcom . ib ash k imi . tris . model . Board . Companion . PLAYER _ 1 Ċ import Ġcom . ib ash k imi . tris . model . Board . Companion . PLAYER _ 2 Ċ import Ġkotlinx . coroutines . Dispatch ers Ċ import Ġkotlinx . coroutines . delay Ċ import Ġkotlinx . coroutines . flow . Flow Ċ import Ġkotlinx . coroutines . flow . flow Ċ import Ġkotlinx . coroutines . flow . flow On ĊĊ Ċ abstract Ġclass ĠA i Player ( ĊĠĠĠ Ġoverride Ġval Ġname : ĠString , ĊĠĠĠ Ġoverride Ġval Ġseed : ĠInt , ĊĠĠĠ Ġoverride Ġvar Ġscore : ĠLong Ġ= Ġ 0 , ĊĠĠĠ Ġopen Ġval Ġmin Delay Millis : ĠLong Ġ= ĠDEFAULT _ DELAY Ċ ) Ġ: ĠPlayer Ġ{ ĊĊĠĠĠ Ġval Ġopponent Seed : ĠInt ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġif Ġ( seed Ġ== ĠP LAYER _ 1 ) ĠP LAYER _ 2 Ġelse ĠP LAYER _ 1 ĊĊĠĠĠ Ġinternal Ġabstract Ġfun Ġmake Move Internal ( board : ĠBoard ): ĠInt ĊĊĠĠĠ Ġoverride Ġfun Ġmake Move ( board : ĠBoard ): ĠFlow < Int > Ġ= Ġflow Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġrequest Time Ġ= ĠSystem Clock . elapsed Realtime () ĊĠĠĠĠĠĠĠ Ġval Ġmove Ġ= Ġmake Move Internal ( board ) ĊĠĠĠĠĠĠĠ Ġval Ġremaining Time Ġ= Ġmin Delay Millis Ġ- ĠSystem Clock . elapsed Realtime () Ġ+ Ġrequest Time ĊĠĠĠĠĠĠĠ Ġif Ġ( remaining Time Ġ> Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdelay ( remaining Time ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġemit ( move ) ĊĠĠĠ Ġ}. flow On ( Dispatch ers . Default ) ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠDEFAULT _ DELAY : ĠLong Ġ= Ġ 1 2 0 ĊĠĠĠ Ġ} Ċ }