package Ġcom . md u . min es w eeper ĊĊ Ċ import Ġandroid . graphics . Bitmap Ċ import Ġandroid . graphics . Bitmap Factory Ċ import Ġandroid . graphics . Paint Ċ import Ġandroid . graphics . Rect Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . view .* Ċ import Ġandroid . widget . Button Ċ import Ġandroid . widget . TextView Ċ import Ġandroidx . fragment . app . Fragment Ċ import Ġandroidx . navigation . fragment . find Nav Controller Ċ import Ġandroidx . navigation . fragment . nav Args Ċ import Ġkotlinx . coroutines .* Ċ Ċ /** Ċ Ġ* ĠFragment . kt Ċ Ġ* ĠClass Ġhandling Ġthe Ġgame Ċ Ġ* Ġ@ author ĠM ike ĠDu Ċ Ġ* Ġ@ since ĠJuly Ġ 2 0 2 0 Ċ Ġ*/ Ċ class ĠGame Fragment Ġ: ĠFragment (), ĠSurface Holder . Callback , ĠView . On Touch Listener Ġ{ ĊĠĠĠ Ġlateinit Ġvar Ġb Ġ: ĠBoard ĊĠĠĠ Ġlateinit Ġvar Ġbt : ĠBoard Thread ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate View ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinflater : ĠLayoutInflater , Ġcontainer : ĠViewGroup ?, ĊĠĠĠĠĠĠĠĠĠĠĠ ĠsavedInstanceState : ĠBundle ? ĊĠĠĠ Ġ): ĠView ? Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠInf late Ġthe Ġlayout Ġfor Ġthis Ġfragment ĊĠĠĠĠĠĠĠ Ġreturn Ġinflater . inflate ( R . layout . fragment _ game , Ġcontainer , Ġfalse ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġval Ġargs : ĠGame Fragment Args Ġby Ġnav Args () Ġ// passed Ġdifficulty ĊĊĠĠĠ Ġoverride Ġfun Ġon View Created ( view : ĠView , ĠsavedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on View Created ( view , ĠsavedInstanceState ) ĊĠĠĠĠĠĠĠ Ġval Ġv Ġ= Ġview . findViewById ( R . id . game Surface ) Ġas ĠSurface View ĊĠĠĠĠĠĠĠ Ġv . holder . add Callback ( this ) ĊĠĠĠĠĠĠĠ Ġview . findViewById < Button >( R . id . button _ return _ menu ). setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfind Nav Controller (). navigate ( R . id . action _ Game Fragment _ to _ Menu Fragment ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġview . findViewById < Button >( R . id . button _ restart _ game ). setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbt . reset () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġv . setOn Touch Listener ( this ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġsurface Created ( holder : ĠSurface Holder ) Ġ{ ĊĠĠĠĠĠĠĠ Ġwhen Ġ( args . difficulty Arg ){ Ġ// these Ġare Ġthe Ġdefaults ĊĠĠĠĠĠĠĠĠĠĠĠĠ 1 Ġ-> Ġb Ġ= ĠBoard ( 8 , 8 , 1 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠ 2 Ġ-> Ġb Ġ= ĠBoard ( 1 6 , 1 6 , 4 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠ 3 Ġ-> Ġb Ġ= ĠBoard ( 3 0 , Ġ 1 6 , Ġ 9 9 ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġbt Ġ= ĠBoard Thread ( holder , Ġb ) ĊĠĠĠĠĠĠĠ Ġbt . start () ĊĠĠĠĠĠĠĠ Ġtext Coroutine ( bt , view ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġtext Coroutine ĊĠĠĠĠ Ġ* ĠA Ġcoroutine Ġthat Ġchecks Ġand Ġupdates Ġgame Ġinformation Ġfor Ġthe ĠUI ĊĠĠĠĠ Ġ* Ġ@ param Ġboard Thread ĠThe Ġthread Ġwhich Ġruns Ġthe Ġgame Ġlogic ĊĠĠĠĠ Ġ* Ġ@ param Ġview ĠThe Ġfragment Ġview ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġtext Coroutine ( board Thread : ĠBoard Thread , Ġview : ĠView ?) Ġ{ ĊĠĠĠĠĠĠĠ ĠGlobal Scope . launch ( Dispatch ers . Main ) Ġ{// start Ġcoroutine ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhile Ġ( true ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( bt . running ) Ġ{ Ġ// always Ġrunning Ġwhile Ġfragment Ġis Ġactive , Ġbut Ġonly Ġchecks Ġwhile Ġgame Ġin Ġprogress ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġflags Left Ġ= Ġboard Thread . board . flags Left ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġflags Left String Ġ= Ġ" M ines ĠLeft : Ġ$ flags Left " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtime Elapsed Ġ= Ġ( System . currentTimeMillis () Ġ- Ġboard Thread . board . startTime ) Ġ/ Ġ 1 0 0 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtime Elapsed String Ġ= Ġ" Time : Ġ$ time Elapsed " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġview ?. findViewById < TextView >( R . id . min es _ left )?. text Ġ= Ġflags Left String ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġview ?. findViewById < TextView >( R . id . game _ time )?. text Ġ= Ġtime Elapsed String ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdelay ( 5 0 0 ) Ġ// Ġwait Ġhalf Ġa Ġsecond ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠĠĠ Ġoverride Ġfun Ġon Pause () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Pause () ĊĠĠĠĠĠĠĠ Ġbt . pause () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġvar Ġlast Click Ġ: Long Ġ= Ġ 0 Ġ// keep s Ġtrack Ġof Ġtime ĊĠĠĠ Ġoverride Ġfun Ġon Touch ( v : ĠView ?, Ġm : ĠMotion Event ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġt X Ġ= Ġm . x ĊĠĠĠĠĠĠĠ Ġval Ġt Y Ġ= Ġm . y ĊĠĠĠĠĠĠĠ Ġif Ġ( bt . running ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( m . action ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMotion Event . ACTION _ DOWN Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( m . event Time Ġ- Ġlast Click Ġ< Ġ 1 0 0 ) Ġ{ Ġ// two Ġclicks Ġin Ġshort Ġsuc ces ion ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġb . d Tap Expand ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ(( t Y Ġ- Ġbt . y Offset ) Ġ/ Ġbt . square Side ). toInt (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ(( t X Ġ- Ġbt . x Offset ) Ġ/ Ġbt . square Side ). toInt () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlast Click Ġ= Ġm . event Time ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMotion Event . ACTION _ UP Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( m . event Time Ġ- Ġlast Click Ġ> Ġ 1 5 0 ) Ġ{ Ġ// long Ġtap ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġb . pool Expand ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ(( t Y Ġ- Ġbt . y Offset ) Ġ/ Ġbt . square Side ). toInt (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ(( t X Ġ- Ġbt . x Offset ) Ġ/ Ġbt . square Side ). toInt () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ Ġ// regular Ġtap ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġb . to g Flag ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ(( t Y Ġ- Ġbt . y Offset ) Ġ/ Ġbt . square Side ). toInt (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ(( t X Ġ- Ġbt . x Offset ) Ġ/ Ġbt . square Side ). toInt () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( b . game Over Check ()) Ġ{ Ġ// check Ġgame Ġover Ġafter Ġeach Ġevent ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 1 Ġ-> Ġbt . game End Display ( 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ- 1 Ġ-> Ġbt . game End Display (- 1 ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlast Click Ġ= Ġm . event Time ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġsurface Changed ( holder : ĠSurface Holder ?, Ġformat : ĠInt , Ġwidth : ĠInt , Ġheight : ĠInt ) Ġ{ ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġsurface Destroyed ( holder : ĠSurface Holder ?) Ġ{ ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠBoard Thread ĊĠĠĠĠ Ġ* ĠThread Ġrunning Ġgame Ġrendering Ġand Ġlogic ĊĠĠĠĠ Ġ* Ġ@ param Ġholder ĠIs Ġa Ġholder Ġfor ĠSurface View ĊĠĠĠĠ Ġ* Ġ@ param Ġboard ĠAn Ġobject Ġthat Ġcontains Ġgame Ġlogic ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġinner Ġclass ĠBoard Thread ( private Ġval Ġholder : ĠSurface Holder , Ġvar Ġboard : ĠBoard ) Ġ: ĠThread () Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġsprites : ĠBitmap Ġ= ĠBitmap Factory . decode Resource ( resources , ĠR . drawable . tile sprites ) ĊĠĠĠĠĠĠĠ Ġvar Ġrunning Ġ= Ġtrue Ġ// if Ġgame Ġis Ġactive ĊĠĠĠĠĠĠĠ Ġvar Ġc Ġ= Ġholder . lock Canvas () ĊĠĠĠĠĠĠĠ Ġval Ġsquare Side Ġ= ĠMath . min ( c . height / board . height , Ġc . width / board . width ) Ġ// scales Ġboard Ġto Ġfit Ġinto Ġthe Ġscreen ĊĠĠĠĠĠĠĠ Ġval Ġx Offset Ġ= Ġ( c . width Ġ- Ġ( square Side * board . width ))/ 2 ĊĠĠĠĠĠĠĠ Ġval Ġy Offset Ġ= Ġ( c . height Ġ- Ġ( square Side * board . height ))/ 2 ĊĠĠĠĠĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsprites Ġ= ĠBitmap . create Scaled Bitmap ( sprites , Ġsquare Side * 1 1 , Ġsquare Side , Ġtrue ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġholder . unlock Canvas And Post ( c ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġrun () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhile ( true ){ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( running ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! holder . surface . isValid ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontinue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġc Ġ= Ġholder . lock Canvas () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġc . draw ARGB ( 2 5 0 , Ġ 1 9 1 , Ġ 1 9 1 , Ġ 1 9 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdraw Lines () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdraw Sprites () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġholder . unlock Canvas And Post ( c ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontinue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġpause (){ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrunning Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* Ġdraw Sprites ĊĠĠĠĠĠĠĠĠ Ġ* ĠA Ġfunction Ġwhich Ġloops Ġthrough Ġthe Ġentire Ġboard Ġand Ġdraw s Ġeach Ġcell ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġprivate Ġfun Ġdraw Sprites (){ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 0 Ġuntil Ġboard . height ){ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( j Ġin Ġ 0 Ġuntil Ġboard . width ){ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbm Destination Ġ= ĠRect ( j * square Side , Ġi * square Side , Ġ( j + 1 )* square Side , Ġ( i + 1 )* square Side ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbm Destination . offset ( x Offset , Ġy Offset ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbm From Ġ= Ġif Ġ( board . flag ( i , j )) ĠRect ( 0 , 0 , square Side , Ġsquare Side ) Ġelse Ġif Ġ(! board . vis ( i , j )) ĠRect ( 0 , 0 , 0 , 0 ) Ġelse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( val Ġtile Value Ġ= Ġboard . check ( i , j )){ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ- 1 Ġ-> ĠRect ( 9 * square Side , 0 , 1 0 * square Side , square Side ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 0 Ġ-> ĠRect ( 1 0 * square Side , 0 , 1 1 * square Side , square Side ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġin Ġ 1 .. 8 Ġ-> ĠRect ( tile Value * square Side , Ġ 0 , Ġ( tile Value + 1 )* square Side , Ġsquare Side ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> ĠRect ( 0 , 0 , 0 , 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġc . draw Bitmap ( sprites , Ġbm From , Ġbm Destination , Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* Ġdraw Lines ĊĠĠĠĠĠĠĠĠ Ġ* ĠDraw s Ġgrid lines Ġon Ġdisplay ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġprivate Ġfun Ġdraw Lines (){ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġp Ġ= ĠPaint () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġp . stroke Width Ġ= Ġ 3 F ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 0 Ġ.. Ġboard . height ){ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġc . draw Line ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġx Offset . toFloat (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( i * square Side Ġ+ Ġy Offset ). toFloat (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( board . width * square Side Ġ+ Ġx Offset ). toFloat (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( i * square Side Ġ+ Ġy Offset ). toFloat (), Ġp ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( j Ġin Ġ 0 Ġ.. Ġboard . width ){ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġc . draw Line ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( j * square Side Ġ+ Ġx Offset ). toFloat (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġy Offset . toFloat (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( j * square Side Ġ+ Ġx Offset ). toFloat (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( board . height * square Side Ġ+ Ġy Offset ). toFloat (), Ġp ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* Ġgame End Display ĊĠĠĠĠĠĠĠĠ Ġ* ĠDisplays Ġtext Ġfor Ġwin Ġor Ġloss ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ param Ġcode ĠGame ĠState Ġ( 1 Ġ= Ġwin , Ġ- 1 Ġ= Ġloss . ĠInt Ġbecause Ġ 0 Ġis Ġa Ġpossibility Ġupstream ) ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġfun Ġgame End Display ( code : ĠInt ){ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrunning Ġ= Ġfalse Ġ// stop Ġgame ĊĠĠĠĠĠĠĠĠĠĠĠ Ġc Ġ= Ġholder . lock Canvas () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġp Ġ= ĠPaint () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġp . text Size Ġ= Ġ 2 0 0 F ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( code ){ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 1 Ġ-> Ġ( c . draw Text (" You ĠW on !", Ġx Offset . toFloat (), Ġy Offset . toFloat (), Ġp )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ- 1 Ġ-> ( c . draw Text (" You ĠL ost ", Ġx Offset . toFloat (), Ġy Offset . toFloat (), Ġp )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġholder . unlock Canvas And Post ( c ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġrestart Ġ= Ġview ?. findViewById < Button >( R . id . button _ restart _ game ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrestart ?. visibility Ġ= ĠView . VISIBLE Ġ// M akes Ġrestart Ġbutton Ġvisible Ġto Ġplayer ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġreset (){ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġrestart Ġ= Ġview ?. findViewById < Button >( R . id . button _ restart _ game ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrestart ?. visibility Ġ= ĠView . IN VISIBLE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( args . difficulty Arg ){ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 1 Ġ-> Ġb Ġ= ĠBoard ( 8 , 8 , 1 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 2 Ġ-> Ġb Ġ= ĠBoard ( 1 6 , 1 6 , 4 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 3 Ġ-> Ġb Ġ= ĠBoard ( 3 0 , Ġ 1 6 , Ġ 9 9 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġboard Ġ= Ġb ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrunning Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ} Ċ }