package Ġcom . p unto gr is . neon ma ze . models Ċ Ċ import Ġandroid . graphics . Canvas Ċ import Ġandroid . graphics . Paint Ċ import Ġjava . util .* Ċ Ċ class ĠM aze ( private Ġval Ġplayer : ĠCell , seed : ĠLong ) Ġ{ ĊĠĠĠ Ġprivate Ġval Ġm aze Cols Ġ= Ġ 1 0 ĊĠĠĠ Ġprivate Ġval Ġm aze Rows Ġ= Ġ 1 7 ĊĠĠĠ Ġprivate Ġval Ġexit Ġ= ĠCell ( ma ze Cols Ġ- Ġ 1 , ma ze Rows Ġ- Ġ 1 ) ĊĠĠĠ Ġprivate Ġval Ġcells : ĠArray < Array < Cell >> Ġ Ġ= ĠArray ( ma ze Cols ) Ġ{ Array ( ma ze Rows ) Ġ{ Cell ()} Ġ} ĊĠĠĠ Ġprivate Ġvar Ġrandom : Random Ġ= ĠRandom ( seed ) ĊĊĠĠĠ Ġfun Ġcreate M aze (): ĠArray < Array < Cell >> { ĊĠĠĠĠĠĠĠ Ġval Ġstack Ġ= ĠStack < Cell >() ĊĠĠĠĠĠĠĠ Ġvar Ġcurrent : Cell ĊĠĠĠĠĠĠĠ Ġvar Ġnext : Cell ? ĊĊĠĠĠĠĠĠĠ Ġfor ( col Ġin Ġ 0 Ġuntil Ġm aze Cols ){ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor ( row Ġin Ġ 0 Ġuntil Ġm aze Rows ){ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcells [ col ][ row ] Ġ= ĠCell ( col , Ġrow , Ġplayer . id , player . color ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġcurrent Ġ= Ġcells [ 0 ][ 0 ] ĊĠĠĠĠĠĠĠ Ġcurrent . visited Ġ= Ġtrue ĊĊĠĠĠĠĠĠĠ Ġdo { ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnext Ġ= Ġget Ne ighbour ( current ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif ( next Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġremove Wall ( current , Ġnext ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstack . push ( current ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent Ġ= Ġnext ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent . visited Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} else { ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent Ġ= Ġstack . pop () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ} while Ġ(! stack . empty ()) ĊĠĠĠĠĠĠĠ Ġreturn Ġcells ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġprivate Ġfun Ġget Ne ighbour ( cell : Cell ): ĠCell ? Ġ{ ĊĊĠĠĠĠĠĠĠ Ġval Ġne ig b our List : ĠArrayList < Cell > Ġ= ĠArrayList () ĊĠĠĠĠĠĠĠ Ġ// vec ino Ġiz quier da ĊĠĠĠĠĠĠĠ Ġif ( cell . col Ġ> Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! cells [ cell . col Ġ- Ġ 1 ][ cell . row ]. visited ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġne ig b our List . add ( cells [ cell . col Ġ- Ġ 1 ][ cell . row ]) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ// vec ino Ġdere cha ĊĠĠĠĠĠĠĠ Ġif ( cell . col Ġ< Ġm aze Cols Ġ- Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! cells [ cell . col Ġ+ Ġ 1 ][ cell . row ]. visited ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġne ig b our List . add ( cells [ cell . col Ġ+ Ġ 1 ][ cell . row ]) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ// vec ino Ġar ri ba ĊĠĠĠĠĠĠĠ Ġif ( cell . row Ġ> Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! cells [ cell . col ][ cell . row Ġ- Ġ 1 ]. visited ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġne ig b our List . add ( cells [ cell . col Ġ][ cell . row Ġ- Ġ 1 ]) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ// vec ino Ġab ajo ĊĠĠĠĠĠĠĠ Ġif ( cell . row Ġ< Ġm aze Rows Ġ- Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! cells [ cell . col ][ cell . row Ġ+ Ġ 1 ]. visited ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġne ig b our List . add ( cells [ cell . col ][ cell . row Ġ+ Ġ 1 ]) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( ne ig b our List . size Ġ> Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġindex Ġ= Ġrandom . nextInt ( ne ig b our List . size ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġne ig b our List [ index ] ĊĠĠĠĠĠĠĠ Ġ} else Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnull ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġremove Wall ( current : Cell , Ġnext : Cell ){ ĊĠĠĠĠĠĠĠ Ġif Ġ( current . col Ġ== Ġnext . col Ġ&& Ġcurrent . row Ġ== Ġnext . row Ġ+ 1 ){ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent . top Wall Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnext . bottom Wall Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( current . col Ġ== Ġnext . col Ġ&& Ġcurrent . row Ġ== Ġnext . row Ġ- 1 ){ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent . bottom Wall Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnext . top Wall Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( current . col Ġ== Ġnext . col Ġ+ Ġ 1 Ġ&& Ġcurrent . row Ġ== Ġnext . row ){ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent . left Wall Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnext . right Wall Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( current . col Ġ== Ġnext . col Ġ- Ġ 1 Ġ&& Ġcurrent . row Ġ== Ġnext . row ){ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent . right Wall Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnext . left Wall Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĊĊĠĠĠ Ġfun Ġcheck Exit ( player : Cell ) Ġ= Ġplayer . col Ġ== Ġexit . col Ġ&& Ġplayer . row Ġ== Ġexit . row ĊĊ Ċ }