package Ġcom . tol u og . f lood it compose Ċ Ċ import Ġcom . tol u og . f lood it compose . model . Cell Ċ import Ġcom . tol u og . f lood it compose . model . Cell Color Ċ import Ġcom . tol u og . f lood it compose . model . capture Ċ import Ġjava . util .* Ċ import Ġkotlin . random . Random Ċ Ċ class ĠGame Ġ( val Ġcolor Count : ĠInt , Ġprivate Ġval Ġboard Height : ĠInt , Ġprivate Ġval Ġboard Width : ĠInt , Ġprivate Ġval Ġmax Steps : ĠInt ) Ġ{ ĊĠĠĠ Ġval Ġboard Ġ= ĠArray < Array < Cell ?> >( board Height ){ ĠArray ( board Width ) Ġ{ null } Ġ} ĊĠĠĠ Ġprivate Ġvar Ġcaptured Ġ= Ġ 1 ĊĠĠĠ Ġvar Ġsteps Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġprivate Ġset ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġlast Color : ĠCell Color ĊĠĠĠ Ġprivate Ġval Ġn bs Ġ= ĠarrayOf ( array Of ( 1 , 0 ), ĠarrayOf (- 1 , 0 ), ĠarrayOf ( 0 , 1 ), ĠarrayOf ( 0 ,- 1 )) ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġinit Board () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġinit Board () Ġ{ ĊĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 0 Ġuntil Ġboard Height ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( j Ġin Ġ 0 Ġuntil Ġboard Width ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcell Ġ= ĠCell ( i , Ġj , Ġcolor Ġ= ĠCell Color . from ( Random . nextInt ( color Count )), Ġcaptured Ġ= Ġi Ġ== Ġ 0 Ġ&& Ġj == 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġboard [ i ][ j ] Ġ= Ġcell ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( i Ġ== Ġ 0 Ġ&& Ġj Ġ== Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlast Color Ġ= Ġcell . color ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġcolor ize Neighbors ( last Color ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġreset () Ġ{ ĊĠĠĠĠĠĠĠ Ġsteps Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġcaptured Ġ= Ġ 1 ĊĠĠĠĠĠĠĠ Ġinit Board () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġcolor Clicked ( color : ĠCell Color ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( game Finished () Ġ|| Ġlast Color Ġ== Ġcolor Ġ|| Ġcolor . value Ġ>= Ġcolor Count ) Ġreturn ĊĠĠĠĠĠĠĠ Ġlast Color Ġ= Ġcolor ĊĠĠĠĠĠĠĠ Ġsteps ++ ĊĠĠĠĠĠĠĠ Ġcolor ize Neighbors ( color ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġgame Finished (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġgame W on () Ġ|| Ġsteps Ġ== Ġmax Steps ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġgame W on (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġcaptured Ġ== Ġboard Height * board Width ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġgame Lost (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġ! game W on () Ġ&& Ġsteps Ġ>= Ġmax Steps ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcolor ize Neighbors ( color : ĠCell Color ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġstack Ġ= ĠLinkedList < Cell ?> () ĊĠĠĠĠĠĠĠ Ġval Ġvisited Ġ= ĠArray ( board Height ){ ĠArray ( board Width ) Ġ{ false } Ġ} ĊĠĠĠĠĠĠĠ Ġvisited [ 0 ][ 0 ] Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġstack . add ( board [ 0 ][ 0 ]) ĊĊĠĠĠĠĠĠĠ Ġwhile Ġ( stack . isNotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcell Ġ= Ġstack . remove Last () Ġ?: Ġcontinue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( cell . captured Ġ|| Ġcell . color Ġ== Ġcolor ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! cell . captured ) Ġcaptured ++ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġboard [ cell . i ][ cell . j ] Ġ= Ġcell . capture ( color ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontinue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor ( pos Ġin Ġn bs ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġrow Ġ= Ġcell . i Ġ+ Ġpos [ 0 ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcol Ġ= Ġcell . j Ġ+ Ġpos [ 1 ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( row Ġ< Ġ 0 Ġ|| Ġrow Ġ>= Ġboard Height Ġ|| Ġcol Ġ< Ġ 0 Ġ|| Ġcol Ġ>= Ġboard Width ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontinue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! visited [ row ][ col ]) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstack . add Last ( board [ row ][ col ]) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvisited [ row ][ col ] Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĊ Ċ }